aboutsummaryrefslogtreecommitdiff
path: root/karld/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'karld/src/main.rs')
-rw-r--r--karld/src/main.rs27
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)));
}
}
}