Skip to content

Commit f0ba50d

Browse files
authored
Merge pull request #38 from luoqiz/feat-update-tauri2
重构,可配置化
2 parents 3923f2f + 72d0cc8 commit f0ba50d

24 files changed

+249
-122
lines changed

src-tauri/config.json5

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"cburl":["http://192.168.1.2:9999"],"wsurl":"","file_dir":""}
1+
{"cburl":[],"http_server_port":10080,"wsurl":"","file_dir":"","front_msg_show":true}

src-tauri/src/service/message/event_entity.rs renamed to src-tauri/src/handler/event_entity.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ use crate::wcferry::wcf;
55
#[derive(Clone)]
66
pub enum Event {
77
ClientMessage(wcf::WxMsg),
8+
StartUp(),
9+
Shutdown(),
810
}
911

1012
#[async_trait]
1113
pub trait EventHandler {
12-
async fn handle(&self, event: Event);
14+
async fn handle(&mut self, event: Event);
1315
}

src-tauri/src/service/message/console_message_handler.rs renamed to src-tauri/src/handler/message/console_message_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use async_trait::async_trait;
22

3-
use super::event_entity::{Event, EventHandler};
3+
use crate::handler::event_entity::{Event, EventHandler};
44

55
// 控制台日志打印
66
pub struct ConsoleLogMessageHandler {
@@ -9,7 +9,7 @@ pub struct ConsoleLogMessageHandler {
99

1010
#[async_trait]
1111
impl EventHandler for ConsoleLogMessageHandler {
12-
async fn handle(&self, event: Event) {
12+
async fn handle(&mut self, event: Event) {
1313
if let Event::ClientMessage(ref msg) = event {
1414
println!("控制台日志处理器 {} -- 接收到信息: {:?}", self.id, msg);
1515
}

src-tauri/src/service/message/http_message_handler.rs renamed to src-tauri/src/handler/message/http_message_handler.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
use async_trait::async_trait;
22

3-
use crate::service::global_service::GLOBAL;
3+
use crate::{handler::event_entity::{Event, EventHandler}, service::global_service::GLOBAL};
44

55
use serde_json::json;
66

7-
use super::event_entity::{Event, EventHandler};
8-
97
/// 配置 http 回调地址后,将调用设置的url,
108
pub struct HttpMessageHandler {
119
pub id: String,
1210
}
1311

1412
#[async_trait]
1513
impl EventHandler for HttpMessageHandler {
16-
async fn handle(&self, event: Event) {
14+
async fn handle(&mut self, event: Event) {
1715
if let Event::ClientMessage(ref msg) = event {
1816
let global = GLOBAL.get().unwrap();
19-
let k_config = global.wechat_config.try_lock().unwrap();
20-
let cburl = k_config.cburl.clone();
17+
let wechat_config = global.wechat_config.read().unwrap();
18+
let cburl = wechat_config.cburl.clone();
2119
if cburl.is_empty() {
2220
return;
2321
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use async_trait::async_trait;
2+
3+
use crate::{handler::event_entity::{Event, EventHandler}, service::global_service::GLOBAL};
4+
5+
/// 日志打印
6+
pub struct LogMessageHandler {
7+
pub id: String,
8+
}
9+
10+
#[async_trait]
11+
impl EventHandler for LogMessageHandler {
12+
async fn handle(&mut self, event: Event) {
13+
if let Event::ClientMessage(ref msg) = event {
14+
let global = GLOBAL.get().unwrap();
15+
let wechat_config = global.wechat_config.read().unwrap();
16+
let show = wechat_config.front_msg_show.clone();
17+
if show {
18+
log::info!("日志处理器 {} -- 接收到信息: {:?}", self.id, msg);
19+
}
20+
}
21+
}
22+
}
23+
24+
25+
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
pub mod event_entity;
21
pub mod log_message_handler;
32
pub mod console_message_handler;
43
pub mod http_message_handler;

src-tauri/src/handler/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pub mod event_entity;
2+
pub mod startup_event_mgr;
3+
pub mod startup;
4+
pub mod message;
5+
pub mod msg_event_mgr;

src-tauri/src/service/msg_event_mgr.rs renamed to src-tauri/src/handler/msg_event_mgr.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::sync::{Arc, Mutex};
22

33
use tokio::{sync::broadcast, task};
44

5-
use super::message::event_entity::{Event, EventHandler};
5+
use super::event_entity::{Event, EventHandler};
66

77
pub struct MsgEventBus {
88
pub broadcaster: Arc<Mutex<broadcast::Sender<Event>>>,
@@ -15,13 +15,15 @@ impl MsgEventBus {
1515
}
1616
}
1717

18-
pub fn subscribe(&mut self, handler: Arc<dyn EventHandler + Send + Sync>) {
18+
pub fn subscribe(&mut self, mut handler: Box<dyn EventHandler + Send + Sync>) {
1919
let broadcast = self.broadcaster.lock().unwrap();
2020
let mut rx = broadcast.subscribe();
2121
task::spawn(async move {
2222
loop {
2323
match rx.recv().await {
24-
Ok(msg) => handler.handle(msg).await,
24+
Ok(msg) => {
25+
handler.handle(msg).await
26+
},
2527
Err(broadcast::error::RecvError::Closed) => break,
2628
Err(broadcast::error::RecvError::Lagged(msg)) => {
2729
println!("客户端丢失了消息: {:?}", msg);
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod http_server_handler;

0 commit comments

Comments
 (0)