chiark / gitweb /
make client
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 23 Jun 2020 19:00:20 +0000 (20:00 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 23 Jun 2020 19:00:20 +0000 (20:00 +0100)
src/bin/server.rs
src/global.rs
src/imports.rs

index b6601750ec19567671359c67f3166cbc5400d9a0..08f25ac534b7674b6e002b4d0f34684c10adae39 100644 (file)
@@ -47,6 +47,11 @@ fn loading(token : InstanceAccess) -> Result<Template,RE> {
   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="<form>")]
 fn session(form : Json<SessionForm>) -> Result<Template,RE> {
   // 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))
 }
 
index bbf0a9a53cedd816c454cd47ec48f7471e65cd72..7c38be3b7d6d8963070f475a284a5770b3488f1f 100644 (file)
@@ -16,17 +16,16 @@ impl Borrow<str> for RawToken {
 }
 
 pub struct Client {
-  user : UserId,
 }
 
 pub struct User {
-  nick : String,
+  pub nick : String,
+  pub clients : DenseSlotMap<ClientId,Client>,
 }
 
 pub struct Instance {
   /* game state goes here */
-  users : DenseSlotMap<UserId,User>,
-  clients : DenseSlotMap<ClientId,Client>,
+  pub users : DenseSlotMap<UserId,User>,
 }
 
 #[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(
index 21310580f3b83efc34ccab4d3acae4cd29a671db..9a1efe3e0174e4da22436597265d9a5a101552ac 100644 (file)
@@ -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;