| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- mod server;
- mod control_c;
- mod quant_libs;
- use std::str::FromStr;
- use std::sync::Arc;
- use std::sync::atomic::{AtomicBool, Ordering};
- use std::time::Duration;
- use tracing::{info};
- use global::params::Params;
- // 日志级别配置
- fn log_level_init(log_str: String) {
- let tracing_log_level = tracing::Level::from_str(log_str.as_str()).unwrap();
- info!("日志级别读取成功:{}。", tracing_log_level);
- global::log_utils::final_init(tracing_log_level);
- }
- #[tokio::main(flavor = "multi_thread", worker_threads = 2)]
- async fn main() {
- // 获取本地配置
- let params = Params::new("config.toml").unwrap();
- info!("配置读取成功:{:?}。", params);
- // 主进程控制
- let running = Arc::new(AtomicBool::new(true));
- // ws退出程序
- let ws_running = Arc::new(AtomicBool::new(true));
- // 日志级别配置
- log_level_init(params.log_level.clone());
- // quant初始化动作
- let quant_arc = quant_libs::init(params, ws_running.clone(), running.clone()).await;
- // 初始化中控服务
- server::run_server(6000, running.clone(), quant_arc.clone());
- // 退出检查程序
- let running = control_c::exit_handler(running);
- // 每一秒检查一次程序是否结束
- while running.load(Ordering::Relaxed) {
- tokio::time::sleep(Duration::from_secs(1)).await;
- }
- info!("检测到退出信号!停止ws订阅……");
- ws_running.store(false, Ordering::Relaxed);
- tokio::time::sleep(Duration::from_secs(1)).await;
- info!("等待其他线程后续处理完毕(再次按control c可以立马结束)……");
- tokio::spawn(async move {
- let mut quant = quant_arc.lock().await;
- quant.exit(0).await;
- });
- let mut i = 5;
- while i > 0 {
- tokio::time::sleep(Duration::from_secs(1)).await;
- info!("{}", i);
- i = i - 1;
- }
- info!("程序已退出!为以防万一,请再次检查仓位和订单!");
- }
|