hcnet/
handler.rs

1use crate::ws::WsHandshake;
2
3use super::{CloseCode, Message, NetConn, NetResult};
4use async_trait::async_trait;
5use log::trace;
6use webparse::{Request, Response};
7
8/// 连接处理回调函数
9#[async_trait]
10pub trait Handler {
11    /// 此接口只有在服务端接受服务时进行触发
12    /// 接收新的端口连接, 如果处理将在此触发
13    async fn on_accept(&mut self, conn: NetConn) -> NetResult<()> {
14        let _conn = conn;
15        unreachable!("Listener must impl accept")
16    }
17
18    /// 此接口在可以发送消息时触发
19    /// 例如websocket将在握手成功后触发该函数
20    async fn on_open(&mut self) -> NetResult<()> {
21        trace!("ws on_open");
22        Ok(())
23    }
24
25    /// 此接口在远程服务端被关闭时进行触发
26    async fn on_close(&mut self, code: CloseCode, reason: String) {
27        trace!(
28            "on_close code = {}, reason = {reason}",
29            Into::<u16>::into(code)
30        );
31    }
32
33    /// ping消息收到, 将会自动返回pong消息
34    async fn on_ping(&mut self, data: Vec<u8>) -> NetResult<Vec<u8>> {
35        trace!("on_ping");
36        Ok(data)
37    }
38
39    /// pong消息
40    async fn on_pong(&mut self, data: Vec<u8>) -> NetResult<()> {
41        let _data = data;
42        trace!("on_pong");
43        Ok(())
44    }
45
46    /// message信息收到
47    async fn on_message(&mut self, msg: Message) -> NetResult<()> {
48        let _ = msg;
49        Ok(())
50    }
51
52    async fn on_request(&mut self, req: Request<Vec<u8>>) -> NetResult<Response<Vec<u8>>> {
53        WsHandshake::build_request(&req)
54    }
55
56    async fn on_response(&mut self, res: Request<Vec<u8>>) -> NetResult<()> {
57        let _ = res;
58        Ok(())
59    }
60
61    async fn on_logic(&mut self) -> NetResult<()> {
62        let future = std::future::pending();
63        let () = future.await;
64        unreachable!()
65    }
66}