summaryrefslogtreecommitdiff
path: root/src/backend.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend.rs')
-rw-r--r--src/backend.rs47
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;
+}