hyperspeed_broadcast/rtc/
routers.rs1use 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}