use crate::{ codec::Codec, context::Context, event::handler::EventHandler, transport::{ConnectionOf, Result, Transport, receiver::PacketReceiver, sender::PacketSender}, }; // TODO : check backend ! maybe better implementations // TODO : maybe add default functions implementation // TODO : not sure about send/recv functions pub trait Backend where Uid: PartialEq, Data: Send + Sync + 'static, Packet: Codec + Send + Sync + 'static, Self::Transport: Transport, >::Sender: PacketSender + Clone, >::Receiver: PacketReceiver, { type Transport: Transport; fn transport(&self) -> &Self::Transport; fn event_handler(&self) -> &EventHandler; fn make_context(&self) -> Context; fn recv( &self, conn: &ConnectionOf, ctx: &Context, ) -> Result<(Uid, Packet)>; fn send( &self, conn: &ConnectionOf, packet: &Packet, ctx: &Context, ) -> Result<()>; fn connect( &self, addr: >::Addr, ) -> Result>; fn serve(&self, addr: >::Addr, on_accept: A) -> Result<()> where A: Fn(&Self, &ConnectionOf, &Context) + Send + Sync + 'static; }