chiark / gitweb /
conflict handling
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 7 Jul 2020 21:02:34 +0000 (22:02 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 7 Jul 2020 21:02:34 +0000 (22:02 +0100)
src/bin/server.rs
templates/script.js

index 285ce9fb578d8ba8600a2abfe045192899c55b06..332b5a74afe5930e23b09fb86168cd0cc3356be7 100644 (file)
@@ -161,6 +161,7 @@ impl Lens for TransparentLens {
 #[throws(OE)]
 fn api_piece_op<O: ApiPieceOp>(form : Json<ApiPiece<O>>)
                    -> impl response::Responder<'static> {
+//  thread::sleep(Duration::from_millis(2000));
   let iad = lookup_token(&form.ctoken)?;
   let client = iad.ident;
   let mut g = iad.g.lock()?;
index bc4abdf2b7006f026e5d44a07e4e53080e7fb9ac..903bf530da615ec63896a50b2ddd5893c2d08a67 100644 (file)
@@ -214,6 +214,10 @@ function drag_cancel() {
 // ----- logs -----
 
 messages.Log = function(j) {
+  add_log_message(j.html);
+}
+
+function add_log_message(msg_html) {
   lastent = logdiv.lastElementChild;
   in_scrollback =
     // inspired by
@@ -223,9 +227,9 @@ messages.Log = function(j) {
     lastent.getBoundingClientRect().bottom >
     logdiv.getBoundingClientRect().bottom;
 
-  console.log('LOG UPDATE ',in_scrollback, j);
+  console.log('ADD LOG MESSAGE ',in_scrollback, msg_html);
   var nelem = document.createElement('div');
-  nelem.innerHTML = j.html;
+  nelem.innerHTML = msg_html;
   logdiv.appendChild(nelem);
 
   if (!in_scrollback) {
@@ -251,7 +255,7 @@ pieceops.Modify = function (piece, info) {
   delem.innerHTML = info.svg;
   uelem.setAttributeNS(null, "x", info.pos[0]);
   uelem.setAttributeNS(null, "y", info.pos[1]);
-  // xxx do something about conflict
+  uelem_checkconflict(piece, uelem);
   if (info.held == null) {
     set_ungrab(uelem, piece);
   } else {
@@ -261,20 +265,26 @@ pieceops.Modify = function (piece, info) {
 }
 
 pieceops.Move = function (piece, info) {
-  // xxx do something aboiut conflict
   var uelem = document.getElementById('use'+piece);
+  uelem_checkconflict(piece, uelem);
   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) {
-    delete pelem.dataset.cseq;
+  var uelem = document.getElementById('use'+j.piece);
+  if (j.cseq >= uelem.dataset.cseq) {
+    delete uelem.dataset.cseq;
   }
   gen = j.gen;
 }
 
+function uelem_checkconflict(piece, uelem) {
+  if (uelem.dataset.cseq == null) { return; }
+  delete uelem.dataset.cseq;
+  add_log_message('Conflict! - simultaneous update');
+}
+
 function startup() {
   var body = document.getElementById("main-body");
   ctoken = body.dataset.ctoken;