diff options
Diffstat (limited to 'src/backend.rs')
| -rw-r--r-- | src/backend.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/backend.rs b/src/backend.rs index 8b13789..fce8a26 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -1 +1,48 @@ +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<Packet, Data = (), Uid = u64> +where + Uid: PartialEq, + Data: Send + Sync + 'static, + Packet: Codec<Data> + Send + Sync + 'static, + Self::Transport: Transport<Uid, Data = Data>, + <Self::Transport as Transport<Uid>>::Sender: PacketSender<Data> + Clone, + <Self::Transport as Transport<Uid>>::Receiver: PacketReceiver<Data, Uid>, +{ + type Transport: Transport<Uid, Data = Data>; + + fn transport(&self) -> &Self::Transport; + fn event_handler(&self) -> &EventHandler<Packet, Data, Uid>; + fn make_context(&self) -> Context<Data>; + + fn recv( + &self, + conn: &ConnectionOf<Uid, Self::Transport>, + ctx: &Context<Data>, + ) -> Result<(Uid, Packet)>; + + fn send( + &self, + conn: &ConnectionOf<Uid, Self::Transport>, + packet: &Packet, + ctx: &Context<Data>, + ) -> Result<()>; + + fn connect( + &self, + addr: <Self::Transport as Transport<Uid>>::Addr, + ) -> Result<ConnectionOf<Uid, Self::Transport>>; + + fn serve<A>(&self, addr: <Self::Transport as Transport<Uid>>::Addr, on_accept: A) -> Result<()> + where + A: Fn(&Self, &ConnectionOf<Uid, Self::Transport>, &Context<Data>) + Send + Sync + 'static; +} |
