hyperspeed-broadcast 0.0.11

FTL media ingest server and WebSocket signaling server.
Documentation
use std::net::SocketAddr;

use mediasoup::router::{Router, RouterOptions};
use mediasoup::producer::{Producer, ProducerId};
use ftl_protocol::protocol::FtlHandshakeFinalised;

use super::{codecs::init_codecs, workers::WorkerPool, producers::init_producers};

#[derive(Clone)]
pub enum DataSource {
    Ftl(FtlHandshakeFinalised)
}

#[derive(Clone)]
pub struct HyperspeedRouter {
    pub router: Router,
    pub channel_id: String,
    pub producers: Vec<Producer>,
    pub source: DataSource
}

impl HyperspeedRouter {
    pub async fn new(channel_id: String, source: DataSource, addr: SocketAddr) -> HyperspeedRouter {
        let mut options = RouterOptions::default();
        init_codecs(&mut options, &source);

        let router = WorkerPool::get()
            .get_worker()
            .create_router(options)
            .await
            .unwrap();

        let producers = init_producers(&router, &source, addr).await;

        HyperspeedRouter {
            router,
            channel_id,
            producers,
            source
        }
    }

    pub fn clone_router(&self) -> Router {
        self.router.clone()
    }

    pub fn get_producer_ids(&self) -> Vec<ProducerId> {
        self.producers.iter()
            .map(|v| v.id().clone())
            .collect()
    }
}