use easy_esp::{Request, RequestHandler, Server, Response, ServerCMD};
use std::net::SocketAddr;
struct ChatRoomHandler {
clients: Vec<SocketAddr>,
}
impl ChatRoomHandler {
fn new() -> Self {
ChatRoomHandler {
clients: vec![],
}
}
}
impl RequestHandler for ChatRoomHandler {
fn handle_request(&mut self, request: Request, origin: SocketAddr) -> (Response, Option<ServerCMD>) {
let response = format!("Ok");
let cmd = ServerCMD::SendAll(format!("{}: {}", origin, request));
(response, Some(cmd))
}
fn client_connect(&mut self, addr: SocketAddr) -> Option<ServerCMD> {
self.clients.push(addr);
Some(ServerCMD::SendAll(format!("{} Connected to chat", addr)))
}
fn client_disconnect(&mut self, addr: SocketAddr) -> Option<ServerCMD> {
self.clients.retain(|&x| x != addr);
Some(ServerCMD::SendAll(format!("{} Disconnect from chat", addr)))
}
}
#[tokio::main]
async fn main() {
let addr: SocketAddr = "127.0.0.1:5555".parse().expect("Could not parse ip addr");
let handler = ChatRoomHandler::new();
let mut server = Server::new(addr, handler);
server.listen().await;
}