use dispatcher for room events (#30)

This commit is contained in:
Théo Monnom
2023-01-11 01:08:26 +01:00
committed by GitHub
parent 4c5828b9c0
commit 608681d0e2
5 changed files with 70 additions and 62 deletions
+12 -6
View File
@@ -1,5 +1,5 @@
use crate::prelude::*;
use crate::participant::ConnectionQuality;
use crate::prelude::*;
use crate::proto;
use crate::rtc_engine::EngineError;
use std::fmt::Debug;
@@ -17,8 +17,6 @@ pub mod track;
pub use room_session::*;
pub type RoomEvents = mpsc::UnboundedReceiver<RoomEvent>;
pub type RoomEmitter = mpsc::UnboundedSender<RoomEvent>;
pub type RoomResult<T> = Result<T, RoomError>;
#[derive(Error, Debug)]
@@ -89,9 +87,12 @@ pub struct Room {
}
impl Room {
pub async fn connect(url: &str, token: &str) -> RoomResult<(Self, RoomEvents)> {
let (emitter, events) = mpsc::unbounded_channel();
let handle = SessionHandle::connect(emitter, url, token).await?;
pub async fn connect(
url: &str,
token: &str,
) -> RoomResult<(Self, mpsc::UnboundedReceiver<RoomEvent>)> {
let handle = SessionHandle::connect(url, token).await?;
let events = handle.subscribe();
Ok((Self { handle }, events))
}
@@ -99,6 +100,11 @@ impl Room {
self.handle.close().await;
}
/// Allow multiple subscribers/observers to receive events
pub fn subscribe(&self) -> mpsc::UnboundedReceiver<RoomEvent> {
self.handle.subscribe()
}
pub fn session(&self) -> RoomSession {
self.handle.session()
}