#[async_trait::async_trait]
pub trait EventHandler: Send + Sync {
type PacketData: literustlib::packet::PacketData;
type UserData;
async fn on_receive(&self, data: Self::PacketData, header: &literustlib::packet::Header, peer: &std::sync::Arc<super::Connection<Self::PacketData>>, user: &Self::UserData, sender: &std::sync::Arc<super::DataSender<Self::PacketData>>);
async fn on_connect_start(&self, addr: &core::net::SocketAddr, key: String, peer: &std::sync::Arc<super::Connection<Self::PacketData>>) -> Option<Self::UserData>;
async fn on_connect_done(&self, peer: &std::sync::Arc<super::Connection<Self::PacketData>>, user: &Self::UserData, sender: &std::sync::Arc<super::DataSender<Self::PacketData>>);
async fn on_disconnect(&self, peer: &std::sync::Arc<super::Connection<Self::PacketData>>, user: &Self::UserData);
}