pub mod data;
pub(crate) mod internal_data;
use super::*;
use crate::{
model::payload::{ClientDisconnect, Speaking},
tracks::{TrackHandle, TrackState},
};
pub use data as context_data;
use data::*;
use internal_data::*;
#[derive(Debug)]
#[non_exhaustive]
pub enum EventContext<'a> {
Track(&'a [(&'a TrackState, &'a TrackHandle)]),
SpeakingStateUpdate(Speaking),
#[cfg(feature = "receive")]
VoiceTick(VoiceTick),
#[cfg(feature = "receive")]
RtpPacket(RtpData),
#[cfg(feature = "receive")]
RtcpPacket(RtcpData),
ClientDisconnect(ClientDisconnect),
DriverConnect(ConnectData<'a>),
DriverReconnect(ConnectData<'a>),
DriverDisconnect(DisconnectData<'a>),
}
#[derive(Debug)]
pub enum CoreContext {
SpeakingStateUpdate(Speaking),
#[cfg(feature = "receive")]
VoiceTick(VoiceTick),
#[cfg(feature = "receive")]
RtpPacket(InternalRtpPacket),
#[cfg(feature = "receive")]
RtcpPacket(InternalRtcpPacket),
ClientDisconnect(ClientDisconnect),
DriverConnect(InternalConnect),
DriverReconnect(InternalConnect),
DriverDisconnect(InternalDisconnect),
}
impl<'a> CoreContext {
pub(crate) fn to_user_context(&'a self) -> EventContext<'a> {
match self {
Self::SpeakingStateUpdate(evt) => EventContext::SpeakingStateUpdate(*evt),
#[cfg(feature = "receive")]
Self::VoiceTick(evt) => EventContext::VoiceTick(evt.clone()),
#[cfg(feature = "receive")]
Self::RtpPacket(evt) => EventContext::RtpPacket(RtpData::from(evt)),
#[cfg(feature = "receive")]
Self::RtcpPacket(evt) => EventContext::RtcpPacket(RtcpData::from(evt)),
Self::ClientDisconnect(evt) => EventContext::ClientDisconnect(*evt),
Self::DriverConnect(evt) => EventContext::DriverConnect(ConnectData::from(evt)),
Self::DriverReconnect(evt) => EventContext::DriverReconnect(ConnectData::from(evt)),
Self::DriverDisconnect(evt) =>
EventContext::DriverDisconnect(DisconnectData::from(evt)),
}
}
}
impl EventContext<'_> {
#[must_use]
pub fn to_core_event(&self) -> Option<CoreEvent> {
match self {
Self::SpeakingStateUpdate(_) => Some(CoreEvent::SpeakingStateUpdate),
#[cfg(feature = "receive")]
Self::VoiceTick(_) => Some(CoreEvent::VoiceTick),
#[cfg(feature = "receive")]
Self::RtpPacket(_) => Some(CoreEvent::RtpPacket),
#[cfg(feature = "receive")]
Self::RtcpPacket(_) => Some(CoreEvent::RtcpPacket),
Self::ClientDisconnect(_) => Some(CoreEvent::ClientDisconnect),
Self::DriverConnect(_) => Some(CoreEvent::DriverConnect),
Self::DriverReconnect(_) => Some(CoreEvent::DriverReconnect),
Self::DriverDisconnect(_) => Some(CoreEvent::DriverDisconnect),
_ => None,
}
}
}