use std::sync::Arc;
use async_trait::async_trait;
use crate::socket::{DisconnectReason, Socket};
#[async_trait]
pub trait EngineIoHandler: std::fmt::Debug + Send + Sync + 'static {
type Data: Default + Send + Sync + 'static;
fn on_connect(&self, socket: Arc<Socket<Self::Data>>);
fn on_disconnect(&self, socket: Arc<Socket<Self::Data>>, reason: DisconnectReason);
fn on_message(&self, msg: String, socket: Arc<Socket<Self::Data>>);
fn on_binary(&self, data: Vec<u8>, socket: Arc<Socket<Self::Data>>);
}
impl<T: EngineIoHandler> EngineIoHandler for Arc<T> {
type Data = T::Data;
fn on_connect(&self, socket: Arc<Socket<Self::Data>>) {
(**self).on_connect(socket)
}
fn on_disconnect(&self, socket: Arc<Socket<Self::Data>>, reason: DisconnectReason) {
(**self).on_disconnect(socket, reason)
}
fn on_message(&self, msg: String, socket: Arc<Socket<Self::Data>>) {
(**self).on_message(msg, socket)
}
fn on_binary(&self, data: Vec<u8>, socket: Arc<Socket<Self::Data>>) {
(**self).on_binary(data, socket)
}
}