use crate::{shoji::ShojiCommand, Satellite, ShojiError};
impl Satellite {
pub fn handle_shoji_command(&mut self, command: ShojiCommand) -> Result<(), ShojiError> {
match command {
ShojiCommand::GetClosestPeers(peer_id) => {
self.get_closest_peers(peer_id);
}
ShojiCommand::DialPeer(peer_id, sender) => {
sender
.send(self.dial_peer(peer_id))
.or(Err(ShojiError::Tear))?;
}
ShojiCommand::LocalPeerId(sender) => {
sender
.send(self.local_peer_id())
.or(Err(ShojiError::Tear))?;
}
ShojiCommand::DialAddress(address, sender) => {
sender
.send(self.dial_address(address))
.or(Err(ShojiError::Tear))?;
}
ShojiCommand::Listeners(sender) => {
sender.send(self.listeners()).or(Err(ShojiError::Tear))?;
}
ShojiCommand::ListenOn(address, sender) => {
sender
.send(self.listen_on(address))
.or(Err(ShojiError::Tear))?;
}
ShojiCommand::BanPeerId(peer_id) => self.ban_peer_id(peer_id),
ShojiCommand::UnbanPeerId(peer_id) => self.unban_peer_id(peer_id),
ShojiCommand::ConnectedPeers(sender) => {
sender
.send(self.connected_peers())
.or(Err(ShojiError::Tear))?;
}
ShojiCommand::DisconnectPeerId(peer_id, sender) => {
sender
.send(self.disconnect_peer_id(peer_id))
.or(Err(ShojiError::Tear))?;
}
ShojiCommand::IsConnected(peer_id, sender) => {
sender
.send(self.is_connected(&peer_id))
.or(Err(ShojiError::Tear))?;
}
ShojiCommand::NetworkInfo(sender) => {
sender.send(self.network_info()).or(Err(ShojiError::Tear))?;
}
ShojiCommand::AddAddress(peer_id, multiaddr) => {
self.add_address(&peer_id, multiaddr);
}
ShojiCommand::PublishMessage(message, sender) => {
sender
.send(self.publish_message(message))
.or(Err(ShojiError::Tear))?;
}
ShojiCommand::Publish(payload, sender) => {
sender
.send(self.publish(payload))
.or(Err(ShojiError::Tear))?;
}
}
Ok(())
}
}