diff options
Diffstat (limited to 'karld/src/main.rs')
-rw-r--r-- | karld/src/main.rs | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/karld/src/main.rs b/karld/src/main.rs index d5dfd5f..6f92fe5 100644 --- a/karld/src/main.rs +++ b/karld/src/main.rs @@ -47,27 +47,39 @@ fn main() { lazy_static::lazy_static! { static ref TASKS: RwLock<HashMap<u64, Task>> = RwLock::new(HashMap::new()); + static ref CLIENTS: RwLock<HashMap<u32, Sender<ClientboundPacket>>> = RwLock::new(HashMap::new()); static ref CLIENT_ID_COUNTER: AtomicU32 = AtomicU32::new(0); } +fn broadcast_invalidation() { + CLIENTS + .write() + .unwrap() + .values() + .for_each(|r| drop(r.send(ClientboundPacket::InvalidateState))); +} + pub fn handle_packet(client: u32, packet: ServerboundPacket, responder: Sender<ClientboundPacket>) { // std::thread::sleep(std::time::Duration::from_millis(75)); // for testing clients with latency match packet { ServerboundPacket::Sync => { - let _ = responder.send(ClientboundPacket::Sync); + drop(responder.send(ClientboundPacket::Sync)); } ServerboundPacket::ListTasks => { - let _ = responder.send(ClientboundPacket::TaskList( + drop(responder.send(ClientboundPacket::TaskList( TASKS.read().unwrap().values().map(|e| e.clone()).collect(), - )); + ))); } ServerboundPacket::UpdateTask(t) => { TASKS.write().unwrap().insert(t.id, t); + broadcast_invalidation(); savestate::save(); } ServerboundPacket::RemoveTask(i) => { - if TASKS.write().unwrap().remove(&i).is_none() { - let _ = responder.send(ClientboundPacket::Error(ProtoError::UnknownTask)); + if TASKS.write().unwrap().remove(&i).is_some() { + broadcast_invalidation(); + } else { + drop(responder.send(ClientboundPacket::Error(ProtoError::UnknownTask))); } savestate::save(); } @@ -78,8 +90,7 @@ pub fn handle_packet(client: u32, packet: ServerboundPacket, responder: Sender<C let t = match TASKS.read().unwrap().get(&task).cloned() { Some(t) => t, None => { - let _ = responder.send(ClientboundPacket::Error(ProtoError::UnknownTask)); - return; + return drop(responder.send(ClientboundPacket::Error(ProtoError::UnknownTask))) } }; @@ -113,7 +124,7 @@ pub fn handle_packet(client: u32, packet: ServerboundPacket, responder: Sender<C } } } - let _ = responder.send(ClientboundPacket::InstanceList(ocs)); + drop(responder.send(ClientboundPacket::InstanceList(ocs))); } } } |