From 22c18205bcb3702ddf60f41f77f6f06554202f35 Mon Sep 17 00:00:00 2001 From: Katharina Fey Date: Sun, 22 Mar 2020 19:44:26 +0100 Subject: Updating gameplay starting mechanics, adding quadtree to map --- src/server.rs | 45 +++++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 12 deletions(-) (limited to 'src/server.rs') diff --git a/src/server.rs b/src/server.rs index 6ddfb70a9d41..7a2fad27bb1f 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,10 +1,13 @@ use crate::{ _if::GameIf, + _match::Match, + data::Player, + lobby::LobbyList, map::Map, users::UserStore, wire::{ - Action, AuthErr, Lobby, LobbyId, Match, MatchErr, MatchId, MatchUser, RegErr, Response, - RoomErr, RoomUpdate, UpdateState, User, UserId, + Action, AuthErr, Lobby, LobbyErr, LobbyId, LobbyUpdate, MatchErr, MatchId, RegErr, + Response, UpdateState, User, UserId, }, }; use async_std::sync::{Arc, Mutex, RwLock}; @@ -27,6 +30,7 @@ pub enum ServerErr { pub struct Server { matches: BTreeMap>, users: UserStore, + lobbies: LobbyList, } impl Server { @@ -35,6 +39,7 @@ impl Server { Self { matches: Default::default(), users: UserStore::new(), + lobbies: LobbyList::new(), } } @@ -63,14 +68,14 @@ impl Server { F: Fn(&mut Map) -> ServerResult, { match self.matches.get(&id) { - Some(ref mut m) => m.lock().await.map.update(cb), + Some(ref m) => m.lock().await.map.update(cb), None => Err(ServerErr::NoSuchMatch), } } pub async fn update_players(self: Arc, id: MatchId, cb: F) -> ServerResult where - F: Fn(&mut Vec) -> ServerResult, + F: Fn(&mut Vec) -> ServerResult, { match self.matches.get(&id) { Some(ref mut m) => cb(&mut m.lock().await.players), @@ -98,20 +103,36 @@ impl GameIf for Server { Ok(auth) } - async fn join(self: Arc, user: User, lobby: LobbyId) -> Result { - unimplemented!() + async fn join(self: Arc, user: User, lobby: LobbyId) -> Result { + let mu = self.users.get(&user).await?; + self.lobbies.get_mut(lobby, |mut l| l.join(&mu)).await } - async fn leave(self: Arc, user: User, lobby: LobbyId) -> Result<(), RoomErr> { - unimplemented!() + async fn leave(self: Arc, user: User, lobby: LobbyId) -> Result<(), LobbyErr> { + let mu = self.users.get(&user).await?; + self.lobbies.get_mut(lobby, |mut l| l.leave(&mu)).await } - async fn ready(self: Arc, user: User, lobby: LobbyId, ready: bool) -> RoomUpdate { - unimplemented!() + async fn ready( + self: Arc, + user: User, + lobby: LobbyId, + ready: bool, + ) -> Result { + self.lobbies + .get_mut(lobby, |mut l| l.ready(user, ready)) + .await } - async fn start_req(self: Arc, user: User, lobby: LobbyId) -> DateTime { - unimplemented!() + /// A start request was received + async fn start_req( + self: Arc, + user: UserId, + lobby: LobbyId, + ) -> Result, LobbyErr> { + self.lobbies.get_mut(lobby, |mut l| l.start(user)).await?; + let lob = self.lobbies.consume(lobby).await?; + Ok(Utc::now()) } async fn perform_action( -- cgit v1.2.3