bee_network/service/
command.rs1use crate::peer::info::PeerRelation;
5
6use super::error::Error;
7
8use libp2p::{Multiaddr, PeerId};
9use tokio::sync::mpsc;
10
11pub type CommandReceiver = mpsc::UnboundedReceiver<Command>;
12pub type CommandSender = mpsc::UnboundedSender<Command>;
13
14pub fn command_channel() -> (CommandSender, CommandReceiver) {
15 mpsc::unbounded_channel()
16}
17
18#[derive(Debug, Eq, PartialEq)]
20#[non_exhaustive]
21pub enum Command {
22 AddPeer {
24 peer_id: PeerId,
26 multiaddr: Multiaddr,
28 alias: Option<String>,
30 relation: PeerRelation,
32 },
33 RemovePeer {
35 peer_id: PeerId,
37 },
38 DialPeer {
40 peer_id: PeerId,
42 },
43 DialAddress {
45 address: Multiaddr,
47 },
48 DisconnectPeer {
50 peer_id: PeerId,
52 },
53 BanPeer {
55 peer_id: PeerId,
57 },
58 UnbanPeer {
60 peer_id: PeerId,
62 },
63 BanAddress {
65 address: Multiaddr,
67 },
68 UnbanAddress {
70 address: Multiaddr,
72 },
73 ChangeRelation {
75 peer_id: PeerId,
77 to: PeerRelation,
79 },
80}
81
82#[derive(Clone, Debug)]
84pub struct NetworkCommandSender(CommandSender);
85
86impl NetworkCommandSender {
87 pub(crate) fn new(inner: CommandSender) -> Self {
88 Self(inner)
89 }
90
91 pub fn send(&self, command: Command) -> Result<(), Error> {
95 self.0.send(command).map_err(|_| Error::SendingCommandFailed)
96 }
97}