use std::sync::Arc;
use tokio::sync::RwLock;
use y_sync::awareness::Awareness;
use y_sync::net::BroadcastGroup;
use yrs::Doc;
pub type AwarenessRef = Arc<RwLock<Awareness>>;
pub type BroadcastRef = Arc<BroadcastGroup>;
#[allow(dead_code)]
pub struct YrsDoc {
awareness: AwarenessRef,
broadcast: BroadcastRef,
}
impl YrsDoc {
pub async fn new() -> Self {
let awareness: AwarenessRef = {
let doc = Doc::new();
Arc::new(RwLock::new(Awareness::new(doc.clone())))
};
let broadcast =
Arc::new(BroadcastGroup::new(awareness.clone(), 32).await);
Self {
awareness,
broadcast,
}
}
pub fn get_awareness(&self) -> AwarenessRef {
self.awareness.clone()
}
pub fn get_broadcast(&self) -> BroadcastRef {
self.broadcast.clone()
}
}