chat_room_server/
chat_room_server.rs1use easy_esp::{Request, RequestHandler, Server, Response, ServerCMD};
2use std::net::SocketAddr;
3
4
5struct ChatRoomHandler {
7 clients: Vec<SocketAddr>,
8}
9impl ChatRoomHandler {
10 fn new() -> Self {
11 ChatRoomHandler {
12 clients: vec![],
13 }
14 }
15}
16impl RequestHandler for ChatRoomHandler {
17 fn handle_request(&mut self, request: Request, origin: SocketAddr) -> (Response, Option<ServerCMD>) {
18
19 let response = format!("Ok");
20
21 let cmd = ServerCMD::SendAll(format!("{}: {}", origin, request));
22 (response, Some(cmd))
23 }
24
25 fn client_connect(&mut self, addr: SocketAddr) -> Option<ServerCMD> {
26 self.clients.push(addr);
28
29 Some(ServerCMD::SendAll(format!("{} Connected to chat", addr)))
30 }
31
32 fn client_disconnect(&mut self, addr: SocketAddr) -> Option<ServerCMD> {
33 self.clients.retain(|&x| x != addr);
35
36 Some(ServerCMD::SendAll(format!("{} Disconnect from chat", addr)))
37 }
38}
39
40#[tokio::main]
41async fn main() {
42 let addr: SocketAddr = "127.0.0.1:5555".parse().expect("Could not parse ip addr");
44
45 let handler = ChatRoomHandler::new();
47
48 let mut server = Server::new(addr, handler);
50
51 server.listen().await;
53}