1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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;
}
|