use crate::error::Result;
use super::manager::ConnectionManager;
use super::message::Message;
use serde::Serialize;
use std::sync::Arc;
pub struct Room {
name: String,
manager: Arc<ConnectionManager>,
}
impl Room {
pub fn new(name: impl Into<String>, manager: Arc<ConnectionManager>) -> Self {
Self {
name: name.into(),
manager,
}
}
pub fn name(&self) -> &str {
&self.name
}
pub async fn broadcast(&self, msg: Message) -> Result<()> {
self.manager.broadcast_to_room(&self.name, msg).await
}
pub async fn broadcast_text(&self, text: impl Into<String>) -> Result<()> {
self.manager.broadcast_text_to_room(&self.name, text).await
}
pub async fn broadcast_json<T: Serialize>(&self, data: &T) -> Result<()> {
self.manager.broadcast_json_to_room(&self.name, data).await
}
pub fn members(&self) -> Vec<String> {
self.manager.room_members(&self.name)
}
pub fn member_count(&self) -> usize {
self.members().len()
}
}