From: Ian Jackson Date: Sun, 5 Jul 2020 12:37:37 +0000 (+0100) Subject: much renaming etc. X-Git-Tag: otter-0.2.0~1450 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=a1a2758921366c50d9f7e47043593e6ead1b56e2;p=otter.git much renaming etc. --- diff --git a/src/bin/server.rs b/src/bin/server.rs index aa14a22d..353c4962 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -104,7 +104,7 @@ fn session(form : Json) -> Result { defs.push(pr.p.svg_x_defs(&pri)); uses.push(format!( - r##""##, + r##""##, pri.id_piece(), pri.id, pr.pos[0], pr.pos[1])); @@ -124,15 +124,15 @@ fn session(form : Json) -> Result { #[derive(Debug,Serialize,Deserialize)] struct ApiGrab { - t : String, - p : VisiblePieceId, - g : Generation, - s : ClientSequence, + ctoken : String, + piece : VisiblePieceId, + gen : Generation, + cseq : ClientSequence, } #[post("/_/api/grab", format="json", data="
")] #[throws(OE)] fn api_grab(form : Json) -> impl response::Responder<'static> { - let iad = lookup_token(&form.t)?; + let iad = lookup_token(&form.ctoken)?; let client = iad.ident; let mut g = iad.g.lock()?; let g = &mut *g; @@ -140,10 +140,10 @@ fn api_grab(form : Json) -> impl response::Responder<'static> { // ^ can only fail if we raced let player = cl.player; let r : Result<(),GameError> = (||{ - let piece = decode_visible_pieceid(form.p); + let piece = decode_visible_pieceid(form.piece); let gs = &mut g.gs; let p = gs.pieces.byid_mut(piece)?; - let q_gen = form.g; + let q_gen = form.gen; let u_gen = if client == p.lastclient { p.gen_lastclient } else { p.gen_before_lastclient }; @@ -162,7 +162,7 @@ fn api_grab(form : Json) -> impl response::Responder<'static> { gen, client, piece, - client_seq : form.s, + cseq : form.cseq, json, }; let update = Arc::new(update); diff --git a/src/global.rs b/src/global.rs index 199a2703..8c22f6c5 100644 --- a/src/global.rs +++ b/src/global.rs @@ -29,7 +29,7 @@ pub struct PreparedUpdate { pub gen : Generation, pub client : ClientId, pub piece : PieceId, - pub client_seq : ClientSequence, + pub cseq : ClientSequence, pub json : String, } diff --git a/src/sse.rs b/src/sse.rs index 19637ce3..5f764aee 100644 --- a/src/sse.rs +++ b/src/sse.rs @@ -90,7 +90,7 @@ impl Read for UpdateReader { serde_json::to_writer(&mut buf, &RecordedConfirmation { gen : next.gen, piece : next.piece, - cseq : next.client_seq, + cseq : next.cseq, })?; write!(buf, "\n\n")?; } else { diff --git a/templates/script.js b/templates/script.js index 0c5a25b9..8a8350ca 100644 --- a/templates/script.js +++ b/templates/script.js @@ -9,6 +9,7 @@ api_queue = []; api_posting = false; var us; var gen = 0; +var cseq = 0; function xhr_post_then(url,data,good) { var xhr = new XMLHttpRequest(); @@ -63,8 +64,9 @@ function api_posted() { // ----- clicking/dragging pieces ----- // dataset -// delt.p piece id (static) -// delt.g grabbed user (player id string, or "") +// delt.pice piece id (static) +// delt.gplayer grabbed user (player id string, or "") +// delt.cseq client sequence (see PROTOCOL.md) const DRAGGING = { // bitmask NO : 0, @@ -78,27 +80,30 @@ var dragging = DRAGGING.NO; function drag_mousedown(e) { console.log('mousedown', e); - if (!e.target.dataset.p) { return; } + var piece = e.target.dataset.piece; + if (!piece) { return; } drag_cancel(); delt = e.target; - var g =delt.dataset.g; - if (g != "" && g != us) { return; } + var gplayer = delt.dataset.gplayer; + if (gplayer != "" && gplayer != us) { return; } dcx = e.clientX; dcy = e.clientY; dox = parseFloat(delt.getAttributeNS(null,"x")); doy = parseFloat(delt.getAttributeNS(null,"y")); - //console.log('mousedown ...', delt.dataset.g, !!delt.dataset.g); - if (g == us) { + if (gplayer == us) { dragging = DRAGGING.MAYBE_UNGRAB; } else { + cseq += 1; + delt.dataset.cseq = cseq; + dragging = DRAGGING.MAYBE_GRAB; - set_grab(delt, us); + set_grab(delt, piece, us); api('grab', { - t : ctoken, - g : gen, - p : delt.dataset.p, - s : 0, + ctoken : ctoken, + piece : piece, + gen : gen, + cseq : cseq, }) } @@ -106,24 +111,25 @@ function drag_mousedown(e) { window.addEventListener('mouseup', drag_mouseup, true); } -function set_grab(elt, owner) { - elt.dataset.g = owner; - var [p, piece] = piece_cleanup_grab(elt); +function set_grab(elem, piece, owner) { + elem.dataset.gplayer = owner; +// var [p, piece] = + piece_cleanup_grab(elem); var nelem = document.createElementNS(svg_ns,'use'); - nelem.setAttributeNS(null,'href','#select'+p); - piece.appendChild(nelem); -} -function set_ungrab(elt) { - elt.dataset.g = ""; - piece_cleanup_grab(elt); -} -function piece_cleanup_grab(elt) { - var p = elt.dataset.p; - var piece = document.getElementById('piece'+p); - while (piece.children.length > 1) { - piece.lastElementChild.remove(); + nelem.setAttributeNS(null,'href','#select'+piece); + elem.appendChild(nelem); +} +function set_ungrab(elem) { + elem.dataset.gplayer = ""; + piece_cleanup_grab(elem); +} +function piece_cleanup_grab(elem) { +// var piece = elem.dataset.piece; +// var elem = document.getElementById('piece'+piece); + while (elem.children.length > 1) { + elem.lastElementChild.remove(); } - return [p, piece]; +// return [p, elem]; } function drag_mousemove(e) { @@ -145,7 +151,7 @@ function drag_mousemove(e) { //console.log(delt); api_delay('m',{ t : token, - p : delt.dataset.p, + p : delt.dataset.piece, l : [x, y], }); } @@ -159,8 +165,8 @@ function drag_mouseup(e) { dragging == (DRAGGING.MAYBE_GRAB | DRAGGING.YES)) { set_ungrab(delt); api('ungrab', { - t : token, - p : delt.dataset.p, + ctoken : token, + piece : delt.dataset.piece, }); } drag_cancel(e); @@ -202,8 +208,10 @@ function startup() { status_node.innerHTML = event.data; }); es.addEventListener('recorded', function(event) { -// var j = JSON.parse(event.data); - xxx_recorded(); + var j = JSON.parse(event.data); + var elem = document.getElementById('piece'+j.piece); + if (j.cseq >= elem.dataset.cseq) { elem.dataset.cseq = 0 } + gen = j.gen; }); es.onerror = function(e) { console.log('FOO',e,es);