From: Ian Jackson Date: Tue, 23 Jun 2020 19:00:20 +0000 (+0100) Subject: make client X-Git-Tag: otter-0.2.0~1565 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=2170a00bedb1f842cbf7006ba56dcd1433ae98e5;p=otter.git make client --- diff --git a/src/bin/server.rs b/src/bin/server.rs index b6601750..08f25ac5 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -47,6 +47,11 @@ fn loading(token : InstanceAccess) -> Result { Ok(Template::render("loading",&c)) } +#[derive(Serialize,Debug)] +struct SessionRenderContext { + c : ClientId, +} + #[derive(Deserialize)] struct SessionForm { token : String, @@ -54,8 +59,14 @@ struct SessionForm { #[post("/_/session", format="json", data="
")] fn session(form : Json) -> Result { // make session in this game, log a message to other players - let _i = lookup_token(&form.token).ok_or(anyhow!("unknown token"))?; - let c = TestRenderContext { }; + let iad = lookup_token(&form.token).ok_or_else(|| anyhow!("unknown token"))?; + let c = { + let mut g = iad.i.lock().map_err(|e| anyhow!("lock poison {:?}",&e))?; + let user = g.users.get_mut(iad.user).ok_or_else(|| anyhow!("user deletred"))?; + let client = Client { }; + let clientid = user.clients.insert(client); + SessionRenderContext { c : clientid } + }; Ok(Template::render("test",&c)) } diff --git a/src/global.rs b/src/global.rs index bbf0a9a5..7c38be3b 100644 --- a/src/global.rs +++ b/src/global.rs @@ -16,17 +16,16 @@ impl Borrow for RawToken { } pub struct Client { - user : UserId, } pub struct User { - nick : String, + pub nick : String, + pub clients : DenseSlotMap, } pub struct Instance { /* game state goes here */ - users : DenseSlotMap, - clients : DenseSlotMap, + pub users : DenseSlotMap, } #[derive(Clone)] @@ -75,12 +74,14 @@ impl<'r> FromParam<'r> for InstanceAccess<'r> { pub fn xxx_global_setup() { let i = Instance { users : Default::default(), - clients : Default::default(), }; let i = Arc::new(Mutex::new(i)); let mut ig = i.lock().unwrap(); for (token, nick) in XXX_USERS_TOKENS { - let nu = User { nick : nick.to_string() }; + let nu = User { + nick : nick.to_string(), + clients : Default::default(), + }; let user = ig.users.insert(nu); let ia = InstanceAccessDetails { i : i.clone(), user }; GLOBAL.tokens.write().unwrap().insert( diff --git a/src/imports.rs b/src/imports.rs index 21310580..9a1efe3e 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -28,6 +28,7 @@ pub use slotmap::dense::{DenseSlotMap}; pub use crate::global; pub use crate::global::{lookup_token,InstanceAccess,InstanceAccessDetails}; +pub use crate::global::{Client,ClientId}; pub type E = anyhow::Error;