#[derive(Debug, Default)]
struct MyHandler {
user_cnt: AtomicUsize,
}
#[derive(Debug, Default)]
struct SocketState {
id: Mutex<String>,
}
impl EngineIoHandler for MyHandler {
type Data = SocketState;
fn on_connect(self: Arc<Self>, socket: Arc<Socket<SocketState>>) {
let cnt = self.user_cnt.fetch_add(1, Ordering::Relaxed) + 1;
socket.emit(cnt.to_string()).ok();
}
fn on_disconnect(&self, socket: Arc<Socket<SocketState>>, reason: DisconnectReason) {
let cnt = self.user_cnt.fetch_sub(1, Ordering::Relaxed) - 1;
socket.emit(cnt.to_string()).ok();
}
fn on_message(self: &Arc<Self>, msg: Str, socket: Arc<Socket<SocketState>>) {
*socket.data.id.lock().unwrap() = msg.into(); }
fn on_binary(self: &Arc<Self>, data: Bytes, socket: Arc<Socket<SocketState>>) { }
}
let svc = EngineIoService::new(Arc::new(MyHandler::default()));