Skip to main content

sfo_cmd_server/server/
mod.rs

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}