|
| 1 | +use async_trait::async_trait; |
| 2 | +use log::info; |
| 3 | + |
| 4 | +use crate::{handler::event_entity::{Event, EventHandler}, http_server::HttpServer, service::global_service::GLOBAL}; |
| 5 | + |
| 6 | +// 启动事件发布后,开启http服务 |
| 7 | +pub struct HttpServerHandler { |
| 8 | + pub id: String, |
| 9 | + pub http_server_running: bool, |
| 10 | + pub http_server: HttpServer,// 声明一个http server |
| 11 | +} |
| 12 | + |
| 13 | +#[async_trait] |
| 14 | +impl EventHandler for HttpServerHandler { |
| 15 | + async fn handle(&mut self, event: Event) { |
| 16 | + |
| 17 | + if let Event::StartUp() = event { |
| 18 | + info!("HttpServer {} 启动", self.id); |
| 19 | + |
| 20 | + let global = GLOBAL.get().unwrap(); |
| 21 | + let wechat_config = global.wechat_config.read().unwrap(); |
| 22 | + let port = wechat_config.http_server_port; |
| 23 | + |
| 24 | + let host_bytes = "0.0.0.0".to_string() |
| 25 | + .split('.') |
| 26 | + .map(|part| part.parse::<u8>().unwrap_or(0)) |
| 27 | + .collect::<Vec<u8>>() |
| 28 | + .try_into() |
| 29 | + .map_err(|_| "Invalid host address".to_string()).unwrap(); |
| 30 | + |
| 31 | + if !self.http_server_running { |
| 32 | + self.http_server.start(host_bytes, port).unwrap(); |
| 33 | + self.http_server_running = true; |
| 34 | + } |
| 35 | + info!("服务启动,监听 http://{}:{}", "0.0.0.0", port); |
| 36 | + info!("浏览器访问 http://localhost:{}/swagger/ 查看文档", port); |
| 37 | + } |
| 38 | + |
| 39 | + if let Event::Shutdown() = event { |
| 40 | + info!("HttpServer {} 关闭", self.id); |
| 41 | + if self.http_server_running { |
| 42 | + match self.http_server.stop() { |
| 43 | + Ok(()) => { |
| 44 | + self.http_server_running = false; |
| 45 | + () |
| 46 | + } |
| 47 | + Err(e) => { |
| 48 | + log::error!("http服务关闭失败 {}", e); |
| 49 | + } |
| 50 | + } |
| 51 | + } else { |
| 52 | + info!("服务已停止"); |
| 53 | + } |
| 54 | + } |
| 55 | + } |
| 56 | +} |
0 commit comments