|
|
@@ -1,50 +1,63 @@
|
|
|
use std::sync::Arc;
|
|
|
+use std::sync::atomic::AtomicBool;
|
|
|
use serde::Deserialize;
|
|
|
use strategy::quant::Quant;
|
|
|
use actix_web::{web, App, HttpResponse, HttpServer, Responder, post, get};
|
|
|
-use actix_web::dev::Server;
|
|
|
use tokio::sync::Mutex;
|
|
|
use tracing::{debug, info};
|
|
|
-#[derive(Deserialize)]
|
|
|
-#[derive(Debug)]
|
|
|
+
|
|
|
+
|
|
|
+#[derive(Deserialize, Debug)]
|
|
|
struct InputData {
|
|
|
stop: bool,
|
|
|
}
|
|
|
|
|
|
+#[derive(Clone)]
|
|
|
+struct Arcs {
|
|
|
+ running: Arc<AtomicBool>,
|
|
|
+ quant_arc: Arc<Mutex<Quant>>
|
|
|
+}
|
|
|
+
|
|
|
// 句柄 GET 请求
|
|
|
-#[get("/")]
|
|
|
-async fn get_handler(quant_arc: web::Data<Arc<Mutex<Quant>>>) -> impl Responder {
|
|
|
- let quant = quant_arc.lock().await;
|
|
|
+#[get("/account")]
|
|
|
+async fn get_account(arcs: web::Data<Arcs>) -> impl Responder {
|
|
|
+ let quant = arcs.quant_arc.lock().await;
|
|
|
HttpResponse::Ok().body(format!("Value: {}", quant.params.log_level))
|
|
|
}
|
|
|
|
|
|
// 句柄 POST 请求
|
|
|
-#[post("/")]
|
|
|
-async fn post_handler(quant_arc: web::Data<Arc<Mutex<Quant>>>, input: web::Json<InputData>) -> impl Responder {
|
|
|
- let mut quant = quant_arc.lock().await;
|
|
|
+#[post("/exit")]
|
|
|
+async fn on_change(arcs: web::Data<Arcs>, input: web::Json<InputData>) -> impl Responder {
|
|
|
+ let mut quant = arcs.quant_arc.lock().await;
|
|
|
debug!(?input);
|
|
|
|
|
|
HttpResponse::Ok().body(format!("Incremented Value: {}", quant.params.log_level))
|
|
|
}
|
|
|
|
|
|
-// Server要.await才能使用
|
|
|
-pub fn run_server(port: u32, quant_arc: Arc<Mutex<Quant>>) -> Server {
|
|
|
+pub fn run_server(port: u32, running: Arc<AtomicBool>, quant_arc: Arc<Mutex<Quant>>) {
|
|
|
let addr = format!("127.0.0.1:{}", port);
|
|
|
info!("中控绑定地址:{}", addr);
|
|
|
- let bind_rst = HttpServer::new(move || {
|
|
|
+
|
|
|
+ let arcs = Arcs {
|
|
|
+ running,
|
|
|
+ quant_arc,
|
|
|
+ };
|
|
|
+
|
|
|
+ let server_fut = HttpServer::new(move || {
|
|
|
+ let arcs_clone = arcs.clone();
|
|
|
+
|
|
|
App::new()
|
|
|
- .app_data(web::Data::new(quant_arc.clone()))
|
|
|
- .service(get_handler)
|
|
|
- .service(post_handler)
|
|
|
+ .app_data(web::Data::new(arcs_clone))
|
|
|
+ .service(get_account)
|
|
|
+ .service(on_change)
|
|
|
})
|
|
|
- .bind(addr);
|
|
|
-
|
|
|
- return match bind_rst {
|
|
|
- Ok(server) => {
|
|
|
- server.run()
|
|
|
- },
|
|
|
- Err(err) => {
|
|
|
- panic!("{}", format!("Bind port error:{}", err.to_string()))
|
|
|
- }
|
|
|
- }
|
|
|
+ .bind(addr)
|
|
|
+ .expect("Bind port error")
|
|
|
+ .run();
|
|
|
+
|
|
|
+ info!("中控服务已运行。");
|
|
|
+
|
|
|
+ tokio::spawn(async move {
|
|
|
+ server_fut.await.expect("error running the server");
|
|
|
+ });
|
|
|
}
|