server.rs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. use std::sync::Arc;
  2. use serde::Deserialize;
  3. use strategy::quant::Quant;
  4. use actix_web::{web, App, HttpResponse, HttpServer, Responder, post, get};
  5. use actix_web::dev::Server;
  6. use tokio::sync::Mutex;
  7. use tracing::{debug, info};
  8. #[derive(Deserialize)]
  9. #[derive(Debug)]
  10. struct InputData {
  11. stop: bool,
  12. }
  13. // 句柄 GET 请求
  14. #[get("/")]
  15. async fn get_handler(quant_arc: web::Data<Arc<Mutex<Quant>>>) -> impl Responder {
  16. let quant = quant_arc.lock().await;
  17. HttpResponse::Ok().body(format!("Value: {}", quant.params.log_level))
  18. }
  19. // 句柄 POST 请求
  20. #[post("/")]
  21. async fn post_handler(quant_arc: web::Data<Arc<Mutex<Quant>>>, input: web::Json<InputData>) -> impl Responder {
  22. let mut quant = quant_arc.lock().await;
  23. debug!(?input);
  24. HttpResponse::Ok().body(format!("Incremented Value: {}", quant.params.log_level))
  25. }
  26. // Server要.await才能使用
  27. pub fn run_server(port: u32, quant_arc: Arc<Mutex<Quant>>) -> Server {
  28. let addr = format!("127.0.0.1:{}", port);
  29. info!("中控绑定地址:{}", addr);
  30. let bind_rst = HttpServer::new(move || {
  31. App::new()
  32. .app_data(web::Data::new(quant_arc.clone()))
  33. .service(get_handler)
  34. .service(post_handler)
  35. })
  36. .bind(addr);
  37. return match bind_rst {
  38. Ok(server) => {
  39. server.run()
  40. },
  41. Err(err) => {
  42. panic!("{}", format!("Bind port error:{}", err.to_string()))
  43. }
  44. }
  45. }