1mod peer_manager;
2mod server;
3
4use crate::errors::CmdResult;
5use crate::{CmdBody, CmdHandler, PeerId, TunnelId};
6use bucky_raw_codec::{RawDecode, RawEncode, RawFixedBytes};
7use num::{FromPrimitive, ToPrimitive};
8pub use server::*;
9use std::hash::Hash;
10use std::time::Duration;
11
12#[async_trait::async_trait]
13pub trait CmdServer<
14 LEN: RawEncode
15 + for<'a> RawDecode<'a>
16 + Copy
17 + RawFixedBytes
18 + Sync
19 + Send
20 + 'static
21 + FromPrimitive
22 + ToPrimitive,
23 CMD: RawEncode + for<'a> RawDecode<'a> + Copy + RawFixedBytes + Sync + Send + 'static + Eq + Hash,
24>: 'static + Send + Sync
25{
26 fn register_cmd_handler(&self, cmd: CMD, handler: impl CmdHandler<LEN, CMD>);
27 async fn send(&self, peer_id: &PeerId, cmd: CMD, version: u8, body: &[u8]) -> CmdResult<()>;
28 async fn send_with_resp(
29 &self,
30 peer_id: &PeerId,
31 cmd: CMD,
32 version: u8,
33 body: &[u8],
34 timeout: Duration,
35 ) -> CmdResult<CmdBody>;
36 async fn send2(&self, peer_id: &PeerId, cmd: CMD, version: u8, body: &[&[u8]])
37 -> CmdResult<()>;
38 async fn send2_with_resp(
39 &self,
40 peer_id: &PeerId,
41 cmd: CMD,
42 version: u8,
43 body: &[&[u8]],
44 timeout: Duration,
45 ) -> CmdResult<CmdBody>;
46 async fn send_cmd(
47 &self,
48 peer_id: &PeerId,
49 cmd: CMD,
50 version: u8,
51 body: CmdBody,
52 ) -> CmdResult<()>;
53 async fn send_cmd_with_resp(
54 &self,
55 peer_id: &PeerId,
56 cmd: CMD,
57 version: u8,
58 body: CmdBody,
59 timeout: Duration,
60 ) -> CmdResult<CmdBody>;
61 async fn send_by_specify_tunnel(
62 &self,
63 peer_id: &PeerId,
64 tunnel_id: TunnelId,
65 cmd: CMD,
66 version: u8,
67 body: &[u8],
68 ) -> CmdResult<()>;
69 async fn send_by_specify_tunnel_with_resp(
70 &self,
71 peer_id: &PeerId,
72 tunnel_id: TunnelId,
73 cmd: CMD,
74 version: u8,
75 body: &[u8],
76 timeout: Duration,
77 ) -> CmdResult<CmdBody>;
78 async fn send2_by_specify_tunnel(
79 &self,
80 peer_id: &PeerId,
81 tunnel_id: TunnelId,
82 cmd: CMD,
83 version: u8,
84 body: &[&[u8]],
85 ) -> CmdResult<()>;
86 async fn send2_by_specify_tunnel_with_resp(
87 &self,
88 peer_id: &PeerId,
89 tunnel_id: TunnelId,
90 cmd: CMD,
91 version: u8,
92 body: &[&[u8]],
93 timeout: Duration,
94 ) -> CmdResult<CmdBody>;
95 async fn send_cmd_by_specify_tunnel(
96 &self,
97 peer_id: &PeerId,
98 tunnel_id: TunnelId,
99 cmd: CMD,
100 version: u8,
101 body: CmdBody,
102 ) -> CmdResult<()>;
103 async fn send_cmd_by_specify_tunnel_with_resp(
104 &self,
105 peer_id: &PeerId,
106 tunnel_id: TunnelId,
107 cmd: CMD,
108 version: u8,
109 body: CmdBody,
110 timeout: Duration,
111 ) -> CmdResult<CmdBody>;
112 async fn send_by_all_tunnels(
113 &self,
114 peer_id: &PeerId,
115 cmd: CMD,
116 version: u8,
117 body: &[u8],
118 ) -> CmdResult<()>;
119 async fn send2_by_all_tunnels(
120 &self,
121 peer_id: &PeerId,
122 cmd: CMD,
123 version: u8,
124 body: &[&[u8]],
125 ) -> CmdResult<()>;
126}