From: Ian Jackson Date: Sat, 11 Jul 2020 23:57:46 +0000 (+0100) Subject: dataload X-Git-Tag: otter-0.2.0~1373 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=0599c8b4744ecd54b00951c41cb7bb71334444da;p=otter.git dataload --- diff --git a/src/gamestate.rs b/src/gamestate.rs index 48cb4752..242a39f8 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -3,6 +3,8 @@ use crate::imports::*; // ---------- newtypes and type aliases ---------- +visible_slotmap_key!{ PlayerId('#') } + slotmap::new_key_type!{ pub struct PieceId; } diff --git a/src/global.rs b/src/global.rs index c12eccd9..e57e2ce9 100644 --- a/src/global.rs +++ b/src/global.rs @@ -5,7 +5,6 @@ use lazy_static::lazy_static; // ---------- newtypes and type aliases ---------- visible_slotmap_key!{ ClientId('C') } -visible_slotmap_key!{ PlayerId('#') } #[derive(Clone,Debug,Eq,PartialEq,Ord,PartialOrd,Hash)] pub struct RawToken (pub String); diff --git a/src/keydata.rs b/src/keydata.rs index 35889d22..65158c29 100644 --- a/src/keydata.rs +++ b/src/keydata.rs @@ -38,7 +38,7 @@ pub fn slotkey_write(k : SKD, sep : char, f : &mut fmt::Formatter) { macro_rules! visible_slotmap_key { ( $x:ident($sep:expr) ) => { - #[derive(Copy,Default,Clone,Eq,PartialEq,Ord,PartialOrd,Serialize,Deserialize)] + #[derive(Copy,Default,Clone,Eq,PartialEq,Ord,PartialOrd,Serialize,Deserialize,Hash)] #[serde(into="String")] #[serde(try_from="&str")] pub struct $x(pub slotmap::KeyData); diff --git a/src/session.rs b/src/session.rs index bd91f5f7..03729b04 100644 --- a/src/session.rs +++ b/src/session.rs @@ -10,7 +10,7 @@ struct SessionRenderContext { uses : Vec, defs : Vec<(VisiblePieceId,String)>, nick : String, - data : String, + load : String, } #[derive(Serialize,Debug)] @@ -31,7 +31,7 @@ struct SessionPieceLoadJson<'r> { struct DataLoad { players : HashMap, } -#[derive(Serialize,Debug] +#[derive(Serialize,Debug)] struct DataLoadPlayer { } @@ -47,7 +47,6 @@ fn session(form : Json) -> Result { let c = { let mut ig = iad.g.lock()?; let ig = &mut *ig; - let pl = ig.gs.players.byid_mut(player)?; let cl = Client { player }; let client = ig.clients.insert(cl); @@ -60,6 +59,13 @@ fn session(form : Json) -> Result { let mut uses = vec![]; let mut alldefs = vec![]; + let mut load_players = HashMap::new(); + for (player, _pl) in &ig.gs.players { + load_players.insert(player, DataLoadPlayer { + }); + } + + let pl = ig.gs.players.byid_mut(player)?; let mut pieces : Vec<_> = ig.gs.pieces.iter().collect(); pieces.sort_by_key(|(_,pr)| &pr.zlevel); @@ -86,11 +92,6 @@ fn session(form : Json) -> Result { uses.push(for_piece); } - let load_players = players.map(|player, pl { - DataLoadPlayer { - }; - }); - let src = SessionRenderContext { ctoken : ctoken.0, gen : ig.gs.gen, @@ -98,9 +99,9 @@ fn session(form : Json) -> Result { defs : alldefs, uses, nick : pl.nick.clone(), - dataload : DataLoad { + load : serde_json::to_string(&DataLoad { players : load_players, - }, + })?, }; eprintln!("SRC {:?}", &src); src diff --git a/templates/script.ts b/templates/script.ts index 031d6826..a999dfe7 100644 --- a/templates/script.ts +++ b/templates/script.ts @@ -441,6 +441,8 @@ function startup() { status_node = document.getElementById('status')!; status_node.innerHTML = 'js-done'; logdiv = document.getElementById("log")!; + let dataload = body.dataset.load; + delete body.dataset.load; space = svg_element('space')!; pieces_marker = svg_element("pieces_marker")!; diff --git a/templates/session.tera b/templates/session.tera index fe1d5f2c..953fe443 100644 --- a/templates/session.tera +++ b/templates/session.tera @@ -2,6 +2,7 @@ data-ctoken="{{ctoken}}" data-us="{{player}}" data-gen="{{gen}}" + data-load="{{ load | escape }}" >

Hi {{nick}}!

@@ -12,7 +13,6 @@