use crate::{
api::{
DataTrackFrame, DataTrackInfo, DataTrackSid, DataTrackSubscribeError,
DataTrackSubscribeOptions, RemoteDataTrack, RemoteDataTrackPipelineOptions,
},
packet::Handle,
};
use bytes::Bytes;
use from_variants::FromVariants;
use std::collections::HashMap;
use tokio::sync::{broadcast, oneshot};
#[derive(Debug, FromVariants)]
pub enum InputEvent {
SubscribeRequest(SubscribeRequest),
UnsubscribeRequest(UnsubscribeRequest),
SfuPublicationUpdates(SfuPublicationUpdates),
SfuSubscriberHandles(SfuSubscriberHandles),
SetPipelineOptions(SetPipelineOptions),
PacketReceived(Bytes),
ResendSubscriptionUpdates,
Shutdown,
}
#[derive(Debug, FromVariants)]
pub enum OutputEvent {
SfuUpdateSubscription(SfuUpdateSubscription),
TrackPublished(TrackPublished),
TrackUnpublished(TrackUnpublished),
}
pub(super) type SubscribeResult =
Result<broadcast::Receiver<DataTrackFrame>, DataTrackSubscribeError>;
#[derive(Debug)]
pub struct SubscribeRequest {
pub(super) sid: DataTrackSid,
pub(super) options: DataTrackSubscribeOptions,
pub(super) result_tx: oneshot::Sender<SubscribeResult>,
}
#[derive(Debug)]
pub struct UnsubscribeRequest {
pub(super) sid: DataTrackSid,
}
#[derive(Debug)]
pub struct SetPipelineOptions {
pub(super) sid: DataTrackSid,
pub(super) options: RemoteDataTrackPipelineOptions,
}
#[derive(Debug)]
pub struct SfuPublicationUpdates {
pub updates: HashMap<String, Vec<DataTrackInfo>>,
}
#[derive(Debug)]
pub struct SfuSubscriberHandles {
pub mapping: HashMap<Handle, DataTrackSid>,
}
#[derive(Debug)]
pub struct SfuUpdateSubscription {
pub sid: DataTrackSid,
pub subscribe: bool,
}
#[derive(Debug)]
pub struct TrackPublished {
pub track: RemoteDataTrack,
}
#[derive(Debug)]
pub struct TrackUnpublished {
pub sid: DataTrackSid,
}