use url::Url;
use super::channel::ChannelInfo;
use crate::util::time::NanoTimestamp;
macro_rules! dnetev {
($self:expr, $event_name:ident, $($code:tt)*) => {
{
if $self.p2p().dnet_enabled.load(std::sync::atomic::Ordering::SeqCst) {
let event = DnetEvent::$event_name(dnet::$event_name $($code)*);
$self.p2p().dnet_notify(event).await;
}
}
};
}
pub(crate) use dnetev;
#[derive(Clone, Debug)]
pub struct MessageInfo {
pub chan: ChannelInfo,
pub cmd: String,
pub time: NanoTimestamp,
}
pub type SendMessage = MessageInfo;
pub type RecvMessage = MessageInfo;
#[derive(Clone, Debug)]
pub struct InboundInfo {
pub addr: Url,
pub channel_id: u32,
}
pub type InboundConnected = InboundInfo;
pub type InboundDisconnected = InboundInfo;
#[derive(Clone, Debug)]
pub struct OutboundSlotSleeping {
pub slot: u32,
}
#[derive(Clone, Debug)]
pub struct OutboundSlotConnecting {
pub slot: u32,
pub addr: Url,
}
#[derive(Clone, Debug)]
pub struct OutboundSlotConnected {
pub slot: u32,
pub addr: Url,
pub channel_id: u32,
}
#[derive(Clone, Debug)]
pub struct OutboundSlotDisconnected {
pub slot: u32,
pub err: String,
}
#[derive(Clone, Debug)]
pub struct OutboundPeerDiscovery {
pub attempt: u32,
pub state: &'static str,
}
#[derive(Clone, Debug)]
pub enum DnetEvent {
SendMessage(MessageInfo),
RecvMessage(MessageInfo),
InboundConnected(InboundConnected),
InboundDisconnected(InboundDisconnected),
OutboundSlotSleeping(OutboundSlotSleeping),
OutboundSlotConnecting(OutboundSlotConnecting),
OutboundSlotConnected(OutboundSlotConnected),
OutboundSlotDisconnected(OutboundSlotDisconnected),
OutboundPeerDiscovery(OutboundPeerDiscovery),
}