main.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. mod server;
  2. mod control_c;
  3. mod quant_libs;
  4. use std::str::FromStr;
  5. use std::sync::Arc;
  6. use std::sync::atomic::{AtomicBool, Ordering};
  7. use std::time::Duration;
  8. use tracing::{info};
  9. use global::params::Params;
  10. // 日志级别配置
  11. fn log_level_init(log_str: String) {
  12. let tracing_log_level = tracing::Level::from_str(log_str.as_str()).unwrap();
  13. info!("日志级别读取成功:{}。", tracing_log_level);
  14. global::log_utils::final_init(tracing_log_level);
  15. }
  16. #[tokio::main(flavor = "multi_thread", worker_threads = 2)]
  17. async fn main() {
  18. // 获取本地配置
  19. let params = Params::new("config.toml").unwrap();
  20. info!("配置读取成功:{:?}。", params);
  21. // 主进程控制
  22. let running = Arc::new(AtomicBool::new(true));
  23. // ws退出程序
  24. let ws_running = Arc::new(AtomicBool::new(true));
  25. // 日志级别配置
  26. log_level_init(params.log_level.clone());
  27. // quant初始化动作
  28. let quant_arc = quant_libs::init(params, ws_running.clone(), running.clone()).await;
  29. // 初始化中控服务
  30. server::run_server(6000, running.clone(), quant_arc.clone());
  31. // 退出检查程序
  32. let running = control_c::exit_handler(running);
  33. // 每一秒检查一次程序是否结束
  34. while running.load(Ordering::Relaxed) {
  35. tokio::time::sleep(Duration::from_secs(1)).await;
  36. }
  37. info!("检测到退出信号!停止ws订阅……");
  38. ws_running.store(false, Ordering::Relaxed);
  39. tokio::time::sleep(Duration::from_secs(1)).await;
  40. info!("等待其他线程后续处理完毕(再次按control c可以立马结束)……");
  41. tokio::spawn(async move {
  42. let mut quant = quant_arc.lock().await;
  43. quant.exit(0).await;
  44. });
  45. let mut i = 5;
  46. while i > 0 {
  47. tokio::time::sleep(Duration::from_secs(1)).await;
  48. info!("{}", i);
  49. i = i - 1;
  50. }
  51. info!("程序已退出!为以防万一,请再次检查仓位和订单!");
  52. }