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#[async_trait]
10pub trait Handler {
11 async fn on_accept(&mut self, conn: NetConn) -> NetResult<()> {
14 let _conn = conn;
15 unreachable!("Listener must impl accept")
16 }
17
18 async fn on_open(&mut self) -> NetResult<()> {
21 trace!("ws on_open");
22 Ok(())
23 }
24
25 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 async fn on_ping(&mut self, data: Vec<u8>) -> NetResult<Vec<u8>> {
35 trace!("on_ping");
36 Ok(data)
37 }
38
39 async fn on_pong(&mut self, data: Vec<u8>) -> NetResult<()> {
41 let _data = data;
42 trace!("on_pong");
43 Ok(())
44 }
45
46 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}