chiark / gitweb /
wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 4 Jul 2020 00:21:49 +0000 (01:21 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 4 Jul 2020 00:21:49 +0000 (01:21 +0100)
src/bin/server.rs
src/gamestate.rs
src/global.rs
src/sse.rs

index bd277408c854825f87158ba251acef1f4b1c9348..202efe73421eb8be2592b1146711bcbf72e74ed6 100644 (file)
@@ -161,15 +161,20 @@ fn api_grab(form : Json<ApiGrab>) -> impl response::Responder<'static> {
       p.gen_before_lastclient = p.gen_lastclient;
       p.lastclient = client;
     }
-    let update = Update {
+    let json = UpdatePayload::PieceUpdate(piece, p.mk_update());
+    let json = serde_json::to_string(&json).expect("convert to json");
+    let update = PreparedUpdate {
       gen,
-      u : UpdatePayload::PieceUpdate(piece, p.mk_update()),
+      client,
+      piece,
+      client_seq : form.s,
+      json,
     };
     let update = Arc::new(update);
     // split vie wthing would go here
     p.gen_lastclient = gen;
     for (_tplayer, tplupdates) in &mut g.updates {
-      tplupdates.log.push_back((client, update.clone()));
+      tplupdates.log.push_back(update.clone());
       tplupdates.cv.notify_all();
     }
     Ok(())
@@ -203,24 +208,20 @@ fn api_move(form : Json<ApiMove>) -> impl response::Responder<'static> {
   ""
 }
 
-#[derive(Serialize)]
-enum XUpdate {
-  TestCounter { value: usize },
-}
-
 #[get("/_/updates/<ctoken>/<gen>")]
 #[throws(E)]
-fn updates(ctoken : InstanceAccess<ClientId>, gen: Generation)
+fn updates(ctoken : InstanceAccess<ClientId>, gen: u64)
            -> impl response::Responder<'static> {
+  let gen = Generation(gen);
   let iad = ctoken.i;
-  let content = sse::content(iad);
+  let content = sse::content(iad, gen)?;
   let content = response::Stream::chunked(content, 1);
   const CTYPE : &str = "text/event-stream; charset=utf-8";
   let ctype = ContentType::parse_flexible(CTYPE).unwrap();
   response::content::Content(ctype,content)
 }  
 
-#[Get("/_/<leaf>")]
+#[get("/_/<leaf>")]
 fn resource(leaf : CheckedResourceLeaf) -> io::Result<NamedFile> {
   let template_dir = "templates"; // xxx
   NamedFile::open(format!("{}/{}", template_dir, leaf.safe))
@@ -242,7 +243,7 @@ fn main() {
       loading,
       session,
       resource,
-      sse::updates,
+      updates,
       api_grab,
       api_ungrab,
       api_move,
index 8d6da5ac5cbb3022d459411abdd6598afa7f689d..6bf54220c1e7848a4ceb1001fd331b6a2b011a7a 100644 (file)
@@ -6,9 +6,9 @@ slotmap::new_key_type!{
 }
 
 #[derive(Copy,Clone,Debug,Ord,PartialOrd,Eq,PartialEq)]
-#[derive(Serialize)]
+#[derive(Serialize,Deserialize)]
 #[serde(transparent)]
-pub struct Generation (u64);
+pub struct Generation (pub u64);
 
 impl Generation {
   pub fn increment(&mut self) { self.0 += 1 }
index c81c47e51482b8cfbae7a46943ea206fc3186445..c78530347afe384e531b0aaa7f6fc051656828c9 100644 (file)
@@ -32,7 +32,7 @@ pub struct PreparedUpdate {
 }
 
 pub struct PlayerUpdates {
-  pub log : StableIndexVecDeque<PreparedUpdate,sse::UpdateId>,
+  pub log : StableIndexVecDeque<Arc<PreparedUpdate>,sse::UpdateId>,
   pub cv : Arc<Condvar>,
 }
 
index 789262abefb500b22c19741176cc237087ff1c5b..51a097be6f25fffabe1f1bb40ca1e59bc512ceb2 100644 (file)
@@ -1,6 +1,4 @@
 
-#![feature(proc_macro_hygiene, decl_macro)]
-
 use crate::imports::*;
 
 #[derive(Copy,Clone,Debug,Eq,PartialEq,Ord,PartialOrd)]
@@ -100,7 +98,7 @@ data: {}
         .map_err(|_| em("poison"))?.0;
       write!(buf,r#"
 : keepalive
-"#);
+"#)?;
     }
   }
 }