chiark / gitweb /
wip, compiles but more work to do
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 28 Jun 2020 20:03:06 +0000 (21:03 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 28 Jun 2020 20:03:06 +0000 (21:03 +0100)
src/bin/server.rs
src/updates.rs

index 6af71449b5a7f57f32f3a2d3ba370dd0e11e6548..efd284647e106def199009f44fa71ae9a1e54bbb 100644 (file)
@@ -133,6 +133,7 @@ struct ApiGrab {
 fn api_grab(form : Json<ApiGrab>) -> impl response::Responder<'static> {
   let iad = lookup_token(&form.t).ok_or_else(||anyhow!("unknown token"))?;
   let mut g = iad.i.lock().map_err(|e| anyhow!("lock poison {:?}",&e))?;
+  let g = &mut *g;
   let client = form.c;
   let r : Result<(),OpError> = (||{
     let piece = decode_visible_pieceid(form.p);
@@ -151,19 +152,20 @@ fn api_grab(form : Json<ApiGrab>) -> impl response::Responder<'static> {
       p.gen_before_lastclient = p.gen_lastclient;
       p.lastclient = client;
     }
+    let update = Update {
+      gen,
+      u : UpdatePayload::PieceUpdate(piece, p.mk_update()),
+    };
     p.gen_lastclient = gen;
-    for (tplayer, tpl) in g.gs.players {
-      for (tclient, tcl) in g.clients[tplayer] {
+    for (tplayer, tpl) in &g.gs.players {
+      for (tclient, tcl) in &mut g.clients[tplayer] {
         if tclient == client {
           tcl.transmit_update(&Update {
             gen,
             u : UpdatePayload::ClientSequence(form.s),
           });
         } else {
-          tcl.transmit_update(&Update {
-            gen,
-            u : UpdatePayload::PieceUpdate(piece, p.mk_update()),
-          });
+          tcl.transmit_update(&update);
         }          
       }
     }
@@ -209,7 +211,7 @@ struct TestCounterInner { next : usize, }
 impl Read for TestCounterInner {
   fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
     thread::sleep(Duration::from_millis(500));
-    let message = Update::TestCounter { value : self.next };
+    let message = XUpdate::TestCounter { value : self.next };
     let data = serde_json::to_string(&message)?;
     let data = format!("data: {}\n\n", &data);
     // eprintln!("want to return into &[;{}] {:?}", buf.len(), &data);
index b369729c62c128ae36a47c0216bd3049a3446c01..d651eef98648138d3e94710b1dd2296915f64339 100644 (file)
@@ -1,9 +1,9 @@
 
 use crate::imports::*;
 
-#[derive(Debug,Deserialize,Serialize)]
+#[derive(Debug,Copy,Clone,Eq,PartialEq,Deserialize,Serialize)]
 #[serde(transparent)]
-pub struct ClientSequence(String);
+pub struct ClientSequence(u64);
 
 #[derive(Debug,Serialize)]
 pub struct Update {