synckit_core/awareness/mod.rs
1mod clock;
2/// Awareness Protocol - Ephemeral user presence and state
3///
4/// Unlike CRDTs which persist data, Awareness tracks ephemeral state like:
5/// - Who's online
6/// - Cursor positions
7/// - User selections
8/// - Custom presence data
9///
10/// Key differences from Document sync:
11/// - No persistence (in-memory only)
12/// - 30-second timeout for offline detection
13/// - Simpler conflict resolution (increasing clock, not vector clocks)
14/// - Separate broadcast channel (doesn't mix with CRDT operations)
15mod state;
16
17pub use clock::IncreasingClock;
18pub use state::{Awareness, AwarenessState, AwarenessUpdate};
19
20use std::time::Duration;
21
22/// Default timeout for marking clients offline
23pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(30);
24
25/// Heartbeat interval (send update even if no changes)
26pub const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(10);
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn test_awareness_creation() {
34 let awareness = Awareness::new("client-1".to_string());
35 assert_eq!(awareness.client_id(), "client-1");
36 assert!(awareness.get_states().is_empty());
37 }
38}