use std::sync::Arc;
use serde::Serialize;
use uuid::Uuid;
use crate::{
error::Result, peer::peer_state::PeerState, utils::broadcast_builder::BroadcastBuilder,
};
#[derive(Clone)]
pub struct PeerContext {
inner: Arc<PeerState>,
}
impl PeerContext {
pub(crate) fn new(inner: Arc<PeerState>) -> Self {
Self { inner }
}
pub(crate) fn get_peer_state(&self) -> Arc<PeerState> {
self.inner.clone()
}
pub fn get_socket_id(&self) -> Uuid {
self.inner.get_socket_id()
}
pub async fn emit<T: Serialize>(&self, event: &str, data: T) -> Result<()> {
self.inner.emit(event, data).await
}
pub fn join_room(&self, room: &str) {
self.inner.join_room(room);
}
pub fn leave_room(&self, room: &str) {
self.inner.leave_room(room);
}
pub fn broadcast<T: Serialize>(&self, event: &str, data: T) -> BroadcastBuilder<T> {
self.inner.broadcast(event, data)
}
pub async fn broadcast_to_room<T: Serialize>(
&self,
room: &str,
event: &str,
data: T,
) -> Result<()> {
self.inner.broadcast_to_room(room, event, data).await?;
Ok(())
}
pub async fn broadcast_to_expect<T: Serialize>(
&self,
room: &str,
socket_id: Uuid,
event: &str,
data: T,
) -> Result<()> {
self.inner
.broadcast_to_expect(room, socket_id, event, data)
.await?;
Ok(())
}
}