use codec::{v3, v5, PacketId, ProtocolLevel, QoS};
use tokio::sync::oneshot;
use crate::types::{ListenerId, SessionGid, SessionId, SessionInfo, Uptime};
use crate::session::CachedSession;
#[derive(Debug, Clone)]
pub enum ListenerToAuthCmd {
RequestAuth(SessionGid, v3::ConnectPacket),
RequestAuthV5(SessionGid, v5::ConnectPacket),
}
#[derive(Debug, Clone)]
pub enum AuthToListenerCmd {
ResponseAuth(SessionId, bool, v3::ConnectPacket),
ResponseAuthV5(SessionId, bool, v5::ConnectPacket),
}
#[derive(Debug, Clone)]
pub enum AclToListenerCmd {
PublishAck(SessionId, v3::PublishPacket, bool),
PublishAckV5(SessionId, v5::PublishPacket, bool),
SubscribeAck(SessionId, v3::SubscribePacket, Vec<v3::SubscribeAck>, bool),
SubscribeAckV5(SessionId, v5::SubscribePacket, Vec<v5::ReasonCode>, bool),
}
#[derive(Debug, Clone)]
pub enum ListenerToAclCmd {
Publish(SessionGid, v3::PublishPacket),
PublishV5(SessionGid, v5::PublishPacket),
Subscribe(SessionGid, v3::SubscribePacket),
SubscribeV5(SessionGid, v5::SubscribePacket),
}
#[derive(Debug, Clone)]
pub enum ListenerToSessionCmd {
ConnectAck(v3::ConnectAckPacket, Option<CachedSession>),
ConnectAckV5(v5::ConnectAckPacket, Option<CachedSession>),
PublishAck(PacketId, QoS, bool),
PublishAckV5(PacketId, QoS, bool),
Publish(v3::PublishPacket),
PublishV5(v5::PublishPacket),
SubscribeAck(v3::SubscribeAckPacket),
SubscribeAckV5(v5::SubscribeAckPacket),
Disconnect,
DisconnectV5,
}
#[derive(Debug, Clone)]
pub enum SessionToListenerCmd {
Connect(SessionId, v3::ConnectPacket),
ConnectV5(SessionId, v5::ConnectPacket),
Publish(SessionId, v3::PublishPacket),
PublishV5(SessionId, v5::PublishPacket),
Subscribe(SessionId, v3::SubscribePacket),
SubscribeV5(SessionId, v5::SubscribePacket),
Unsubscribe(SessionId, v3::UnsubscribePacket),
UnsubscribeV5(SessionId, v5::UnsubscribePacket),
Disconnect(SessionId),
DisconnectV5(SessionId),
}
#[derive(Debug, Clone)]
pub enum DispatcherToListenerCmd {
CheckCachedSessionResp(SessionId, ProtocolLevel, Option<CachedSession>),
Publish(SessionId, v3::PublishPacket),
PublishV5(SessionId, v5::PublishPacket),
SubscribeAck(SessionId, v3::SubscribeAckPacket),
SubscribeAckV5(SessionId, v5::SubscribeAckPacket),
}
#[derive(Debug, Clone)]
pub enum ListenerToDispatcherCmd {
CheckCachedSession(SessionGid, String, ProtocolLevel),
Publish(v3::PublishPacket),
PublishV5(v5::PublishPacket),
Subscribe(SessionGid, v3::SubscribePacket),
SubscribeV5(SessionGid, v5::SubscribePacket),
Unsubscribe(SessionGid, v3::UnsubscribePacket),
UnsubscribeV5(SessionGid, v5::UnsubscribePacket),
SessionAdded(ListenerId),
SessionRemoved(ListenerId),
}
#[derive(Debug, Clone)]
pub enum DispatcherToMetricsCmd {
ListenerAdded(ListenerId, String),
ListenerRemoved(ListenerId),
SessionAdded(ListenerId, usize),
SessionRemoved(ListenerId, usize),
SubscriptionsAdded(ListenerId, usize),
SubscriptionsRemoved(ListenerId, usize),
RetainedMessageAdded(ListenerId, usize, usize),
RetainedMessageRemoved(ListenerId, usize, usize),
PublishPacketSent(ListenerId, usize, usize),
PublishPacketReceived(ListenerId, usize, usize),
PublishPacketDropped(usize, usize),
PacketSent(ListenerId, usize, usize),
PacketReceived(ListenerId, usize, usize),
}
#[derive(Debug, Clone)]
pub enum MetricsToDispatcherCmd {
Publish(v3::PublishPacket),
PublishV5(v5::PublishPacket),
}
#[derive(Debug, Clone)]
pub enum DispatcherToBackendsCmd {
SessionAdded(SessionInfo),
SessionRemoved(ListenerId, SessionId),
}
#[derive(Debug, Clone)]
pub enum BackendsToDispatcherCmd {}
#[derive(Debug, Clone)]
pub enum DispatcherToBridgeCmd {}
#[derive(Debug, Clone)]
pub enum BridgeToDispatcherCmd {}
#[derive(Debug, Clone)]
pub enum DispatcherToGatewayCmd {}
#[derive(Debug, Clone)]
pub enum GatewayToDispatcherCmd {}
#[derive(Debug, Clone)]
pub enum DispatcherToRuleEngineCmd {}
#[derive(Debug, Clone)]
pub enum RuleEngineToDispatcherCmd {}
#[derive(Debug)]
pub enum ServerContextToAclCmd {}
#[derive(Debug)]
pub enum ServerContextToAuthCmd {}
#[derive(Debug)]
pub enum ServerContextToBackendsCmd {}
#[derive(Debug)]
pub enum ServerContextToBridgeCmd {}
#[derive(Debug)]
pub enum ServerContextToGatewayCmd {}
#[derive(Debug)]
pub enum ServerContextToMetricsCmd {
MetricsGetUptime(oneshot::Sender<Uptime>),
}
#[derive(Debug)]
pub enum ServerContextToRuleEngineCmd {}
#[derive(Debug)]
pub enum DashboardToServerContexCmd {
MetricsGetUptime(oneshot::Sender<Uptime>),
}