Module handler

Module handler 

Source
Expand description

§An EngineIoHandler to get event calls for any engine.io socket

§Example :
// Global state
#[derive(Debug, Default)]
struct MyHandler {
    user_cnt: AtomicUsize,
}

// Socket state
#[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(); // bind a provided user id to a socket
    }
    fn on_binary(self: &Arc<Self>, data: Bytes, socket: Arc<Socket<SocketState>>) { }
}

// Create an engine io service with the given handler
let svc = EngineIoService::new(Arc::new(MyHandler::default()));

Traits§

EngineIoHandler
The EngineIoHandler trait can be implemented on any struct to handle socket events