#[derive(Debug,Clone)]
pub struct InstanceRef (Arc<Mutex<InstanceContainer>>);
+type LinksTable = HashMap<LinkKind, Html>;
+
pub struct Instance {
pub name: Arc<InstanceName>,
pub gs: GameState,
pub tokens_players: TokenRegistry<PlayerId>,
pub tokens_clients: TokenRegistry<ClientId>,
pub acl: LoadedAcl<TablePermission>,
+ pub links: LinksTable,
+}
+
+#[derive(Copy,Clone,Debug,Eq,PartialEq,Ord,PartialOrd,Hash)]
+#[derive(Serialize,Deserialize)]
+pub enum LinkKind {
+ Voice,
+ Info,
}
pub struct PlayerRecord {
tokens_players: Vec<(RawTokenStr, PlayerId)>,
aplayers: SecondarySlotMap<PlayerId, IPlayerState>,
acl: Acl<TablePermission>,
+ #[serde(default)] pub links: LinksTable,
}
display_as_debug!{InstanceLockError}
iplayers: default(),
tokens_players: default(),
tokens_clients: default(),
+ links: default(),
};
let cont = InstanceContainer {
(player, ipl.clone())
).collect();
let acl = s.c.g.acl.clone().into();
+ let links = s.c.g.links.clone();
let isa = InstanceSaveAccesses {
- ipieces, tokens_players, aplayers, acl
+ ipieces, tokens_players, aplayers, acl, links,
};
rmp_serde::encode::write_named(w, &isa)
})?;
games: &mut GamesGuard,
name: InstanceName) -> Option<InstanceRef> {
let InstanceSaveAccesses::<String,ActualPiecesLoaded>
- { tokens_players, mut ipieces, mut aplayers, acl }
+ { tokens_players, mut ipieces, mut aplayers, acl, links }
= match Self::load_something(&name, "a-") {
Ok(data) => data,
Err(e) => if (||{
};
let g = Instance {
- gs, iplayers,
+ gs, iplayers, links,
acl: acl.into(),
ipieces: PiecesLoaded(ipieces),
name: name.clone(),