chiark / gitweb /
move
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 6 Jul 2020 18:19:06 +0000 (19:19 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 6 Jul 2020 18:19:06 +0000 (19:19 +0100)
src/bin/server.rs
src/gamestate.rs
templates/script.js

index 837b84c6f18a9ec3a2ae3c92f7c56a0b62ba5d46..560ec3600a0d05117346179762a1ea16e196ae3e 100644 (file)
@@ -177,8 +177,11 @@ fn api_piece_op<O: ApiPieceOp>(form : Json<ApiPiece<O>>)
 
     let q_gen = form.gen;
     let u_gen =
-      if client == pc.lastclient { pc.gen_lastclient }
-      else { pc.gen_before_lastclient };
+      if client == pc.lastclient { pc.gen_before_lastclient }
+      else { pc.gen };
+
+    eprintln!("Q_GEN={:?} U_GEN={:?}", u_gen, q_gen);
+
     if u_gen > q_gen { Err(GameError::Conflict)? }
     if pc.held != None && pc.held != Some(player) {
       Err(GameError::PieceHeld)?
@@ -196,9 +199,11 @@ fn api_piece_op<O: ApiPieceOp>(form : Json<ApiPiece<O>>)
       gs.gen.increment();
       let gen = gs.gen;
       if client != pc.lastclient {
-        pc.gen_before_lastclient = pc.gen_lastclient;
+        pc.gen_before_lastclient = pc.gen;
         pc.lastclient = client;
       }
+      pc.gen = gen;
+      eprintln!("PC GEN_LC={:?} LC={:?}", pc.gen, pc.lastclient);
 
       let pri_for_all = lens.svg_pri(piece,pc,Default::default());
 
@@ -227,7 +232,6 @@ fn api_piece_op<O: ApiPieceOp>(form : Json<ApiPiece<O>>)
       let update = Arc::new(update);
       eprintln!("UPDATE {:?}", &update);
 
-      pc.gen_lastclient = gen;
       for (_tplayer, tplupdates) in &mut g.updates {
         tplupdates.log.push_back(update.clone());
         tplupdates.cv.notify_all();
index f5a413b240c626aa360de32919fe15b408cc1d23..25ab0af4c033413179a1767f2edb08bd03ddbf36 100644 (file)
@@ -51,8 +51,8 @@ pub struct PieceRecord {
   pub p : Box<dyn Piece>,
   pub face : FaceId,
   pub held : Option<PlayerId>,
+  pub gen : Generation,
   pub lastclient : ClientId,
-  pub gen_lastclient : Generation,
   pub gen_before_lastclient : Generation,
 }
 
@@ -119,7 +119,7 @@ pub fn xxx_gamestate_init() -> GameState {
       face : 0.into(),
       held : None,
       lastclient : Default::default(),
-      gen_lastclient : Generation(0),
+      gen : Generation(0),
       gen_before_lastclient : Generation(0),
     };
     pieces.insert(pr);
index ff65bd9ac9b0d11ebf8f70af20317509d9a9c69f..67151ec750f292c25f8128253e228a4622333f63 100644 (file)
@@ -260,6 +260,13 @@ pieceops.Modify = function (piece, info) {
   console.log('MODIFY DONE');
 }
 
+pieceops.Move = function (piece, info) {
+  // xxx do something aboiut conflict
+  var uelem = document.getElementById('use'+piece);
+  uelem.setAttributeNS(null, "x", info[0]);
+  uelem.setAttributeNS(null, "y", info[1]);
+}
+
 messages.Recorded = function(j) {
   var pelem = document.getElementById('piece'+j.piece);
   if (j.cseq >= pelem.dataset.cseq) {