bee_gossip/service/
command.rs1use libp2p_core::{Multiaddr, PeerId};
5use tokio::sync::mpsc;
6
7use super::error::Error;
8use crate::peer::info::PeerRelation;
9
10pub type CommandReceiver = mpsc::UnboundedReceiver<Command>;
11pub type CommandSender = mpsc::UnboundedSender<Command>;
12
13pub fn command_channel() -> (CommandSender, CommandReceiver) {
14 mpsc::unbounded_channel()
15}
16
17#[derive(Debug, Eq, PartialEq)]
19#[non_exhaustive]
20pub enum Command {
21 AddPeer {
23 peer_id: PeerId,
25 multiaddr: Multiaddr,
27 alias: Option<String>,
29 relation: PeerRelation,
31 },
32 RemovePeer {
34 peer_id: PeerId,
36 },
37 DialPeer {
39 peer_id: PeerId,
41 },
42 DialAddress {
44 address: Multiaddr,
46 },
47 DisconnectPeer {
49 peer_id: PeerId,
51 },
52 BanPeer {
54 peer_id: PeerId,
56 },
57 UnbanPeer {
59 peer_id: PeerId,
61 },
62 BanAddress {
64 address: Multiaddr,
66 },
67 UnbanAddress {
69 address: Multiaddr,
71 },
72 ChangeRelation {
74 peer_id: PeerId,
76 to: PeerRelation,
78 },
79}
80
81#[derive(Clone, Debug)]
83pub struct NetworkCommandSender(CommandSender);
84
85impl NetworkCommandSender {
86 pub(crate) fn new(inner: CommandSender) -> Self {
87 Self(inner)
88 }
89
90 pub fn send(&self, command: Command) -> Result<(), Error> {
94 self.0.send(command).map_err(|_| Error::SendingCommandFailed)
95 }
96}