hyperspeed_broadcast/rtc/
routers.rs

1use std::net::SocketAddr;
2
3use mediasoup::router::{Router, RouterOptions};
4use mediasoup::producer::{Producer, ProducerId};
5use ftl_protocol::protocol::FtlHandshakeFinalised;
6
7use super::{codecs::init_codecs, workers::WorkerPool, producers::init_producers};
8
9#[derive(Clone)]
10pub enum DataSource {
11    Ftl(FtlHandshakeFinalised)
12}
13
14#[derive(Clone)]
15pub struct HyperspeedRouter {
16    pub router: Router,
17    pub channel_id: String,
18    pub producers: Vec<Producer>,
19    pub source: DataSource
20}
21
22impl HyperspeedRouter {
23    pub async fn new(channel_id: String, source: DataSource, addr: SocketAddr) -> HyperspeedRouter {
24        let mut options = RouterOptions::default();
25        init_codecs(&mut options, &source);
26
27        let router = WorkerPool::get()
28            .get_worker()
29            .create_router(options)
30            .await
31            .unwrap();
32
33        let producers = init_producers(&router, &source, addr).await;
34
35        HyperspeedRouter {
36            router,
37            channel_id,
38            producers,
39            source
40        }
41    }
42
43    pub fn clone_router(&self) -> Router {
44        self.router.clone()
45    }
46
47    pub fn get_producer_ids(&self) -> Vec<ProducerId> {
48        self.producers.iter()
49            .map(|v| v.id().clone())
50            .collect()
51    }
52}