Ok(Template::render("loading",&c))
}
+#[derive(Serialize,Debug)]
+struct SessionRenderContext {
+ c : ClientId,
+}
+
#[derive(Deserialize)]
struct SessionForm {
token : String,
#[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))
}
}
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)]
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(
pub use crate::global;
pub use crate::global::{lookup_token,InstanceAccess,InstanceAccessDetails};
+pub use crate::global::{Client,ClientId};
pub type E = anyhow::Error;