Browse Source

Fix server & add logs

new_protocol
ThePerkinrex 5 years ago
parent
commit
f29bfb88b5
No known key found for this signature in database GPG Key ID: 1F45A7C4BFB41607
  1. 24
      server/src/server/game.rs
  2. 12
      server/src/server/lobby.rs
  3. 2
      unity/Assets/Scripts/Client.cs
  4. 2
      unity/Assets/Scripts/MainMenuController.cs

24
server/src/server/game.rs

@ -145,6 +145,7 @@ impl GameService {
} }
async fn get_default_status(&self, uuid: uuid::Uuid) -> Result<Option<MessageStatus>, Status> { async fn get_default_status(&self, uuid: uuid::Uuid) -> Result<Option<MessageStatus>, Status> {
log::info!("Creating a new status for {}", uuid);
let lobby = { let lobby = {
let mut conn = self.conn.write().await; let mut conn = self.conn.write().await;
let lobby: u32 = match conn.get_lobby_for_user(uuid).await { let lobby: u32 = match conn.get_lobby_for_user(uuid).await {
@ -153,6 +154,7 @@ impl GameService {
}; };
lobby lobby
}; };
let r =
Ok(self Ok(self
.running_games .running_games
.read() .read()
@ -165,7 +167,9 @@ impl GameService {
.await .await
.2 .2
.get() .get()
.clone()) .clone());
log::info!("Created a new status for {}", uuid);
r
} }
} }
@ -175,6 +179,8 @@ impl game_server::Game for GameService {
&self, &self,
request: tonic::Request<CardKind>, request: tonic::Request<CardKind>,
) -> Result<tonic::Response<Image>, Status> { ) -> Result<tonic::Response<Image>, Status> {
log::info!("Getting image location");
let time = std::time::Instant::now();
let uuid = client_id::get(request.metadata()).map_err(|x| match x { let uuid = client_id::get(request.metadata()).map_err(|x| match x {
client_id::Error::NotSet => Status::failed_precondition("client_id must be set"), client_id::Error::NotSet => Status::failed_precondition("client_id must be set"),
client_id::Error::MalformedUuid => Status::failed_precondition("malformed client_id"), client_id::Error::MalformedUuid => Status::failed_precondition("malformed client_id"),
@ -194,16 +200,20 @@ impl game_server::Game for GameService {
}; };
let game = &self.games[game_id as usize]; let game = &self.games[game_id as usize];
let (face, back) = game.get_card_paths(&request.into_inner().kind); let (face, back) = game.get_card_paths(&request.into_inner().kind);
log::info!("Loading face image [{:?}]", time.elapsed()); // TODO Create a cache for loaded images, so that they don't have to be parsed and reformatted each time
let mut face_buf = Vec::new(); let mut face_buf = Vec::new();
image::open(&face) image::open(&face)
.expect(&format!("Error loading the image in {:?}", face)) .expect(&format!("Error loading the image in {:?}", face))
.write_to(&mut face_buf, image::ImageOutputFormat::Png) .write_to(&mut face_buf, image::ImageOutputFormat::Png)
.unwrap(); .unwrap();
log::info!("Loading back image [{:?}]", time.elapsed());
let mut back_buf = Vec::new(); let mut back_buf = Vec::new();
image::open(&back) image::open(&back)
.expect(&format!("Error loading the image in {:?}", back)) .expect(&format!("Error loading the image in {:?}", back))
.write_to(&mut back_buf, image::ImageOutputFormat::Png) .write_to(&mut back_buf, image::ImageOutputFormat::Png)
.unwrap(); .unwrap();
log::info!("Loaded images [{:?}]", time.elapsed());
Ok(Response::new(Image { Ok(Response::new(Image {
face: face_buf, face: face_buf,
back: back_buf, back: back_buf,
@ -263,9 +273,10 @@ impl game_server::Game for GameService {
})?; })?;
Ok(Response::new( Ok(Response::new(
self.get_default_status(uuid) self.get_default_status(uuid).await?.unwrap_or({
.await? self.update_status(uuid).await?;
.ok_or(Status::internal("No status has been set"))?, self.get_default_status(uuid).await?.unwrap()
}),
)) ))
} }
@ -286,7 +297,8 @@ impl game_server::Game for GameService {
lobby lobby
}; };
use std::convert::TryInto; use std::convert::TryInto;
let has_changed = self.running_games let has_changed = self
.running_games
.read() .read()
.await .await
.get(&lobby) .get(&lobby)
@ -304,6 +316,6 @@ impl game_server::Game for GameService {
.try_into() .try_into()
.unwrap(), .unwrap(),
); );
Ok(Response::new(HasNewStatus {value: has_changed})) Ok(Response::new(HasNewStatus { value: has_changed }))
} }
} }

12
server/src/server/lobby.rs

@ -5,9 +5,9 @@ use tokio::sync::{mpsc, RwLock};
use std::{collections::HashMap, convert::TryInto, sync::Arc}; use std::{collections::HashMap, convert::TryInto, sync::Arc};
use super::grpc::common::{HasNewStatus, LastStatusTimestamp, Name}; use super::grpc::common::{HasNewStatus, LastStatusTimestamp, Name};
use super::grpc::game::MessageStatus;
use super::grpc::lobby::lobby_server::Lobby; use super::grpc::lobby::lobby_server::Lobby;
use super::grpc::lobby::{LobbyStatus, SingleVote, Vote}; use super::grpc::lobby::{LobbyStatus, SingleVote, Vote};
use super::grpc::game::MessageStatus;
pub use super::grpc::lobby::lobby_server::LobbyServer; pub use super::grpc::lobby::lobby_server::LobbyServer;
@ -21,7 +21,8 @@ pub struct LobbyService {
conn: RwLock<db::DbClient>, conn: RwLock<db::DbClient>,
games: Arc<Vec<crate::games::Game>>, games: Arc<Vec<crate::games::Game>>,
voting: votes::VotingSystem, voting: votes::VotingSystem,
running_games: Arc<RwLock<HashMap<u32, RwLock<(u32, RunningGame, Modifiable<Option<MessageStatus>>)>>>>, running_games:
Arc<RwLock<HashMap<u32, RwLock<(u32, RunningGame, Modifiable<Option<MessageStatus>>)>>>>,
} }
impl LobbyService { impl LobbyService {
@ -29,7 +30,9 @@ impl LobbyService {
conn: db::DbClient, conn: db::DbClient,
voting: votes::VotingSystem, voting: votes::VotingSystem,
games: Arc<Vec<crate::games::Game>>, games: Arc<Vec<crate::games::Game>>,
running_games: Arc<RwLock<HashMap<u32, RwLock<(u32, RunningGame, Modifiable<Option<MessageStatus>>)>>>>, running_games: Arc<
RwLock<HashMap<u32, RwLock<(u32, RunningGame, Modifiable<Option<MessageStatus>>)>>>,
>,
) -> Self { ) -> Self {
Self { Self {
conn: RwLock::new(conn), conn: RwLock::new(conn),
@ -67,7 +70,10 @@ impl Lobby for LobbyService {
.write() .write()
.await .await
.insert(lobby, RwLock::new((winner, game, Modifiable::new(None)))); .insert(lobby, RwLock::new((winner, game, Modifiable::new(None))));
log::info!("[{}] Started a game ({})", lobby, winner);
} }
log::info!("Player {} is ready", uuid);
Ok(Response::new(())) Ok(Response::new(()))
} }

2
unity/Assets/Scripts/Client.cs

@ -103,7 +103,7 @@ public static class Client
}, },
new Metadata { new Metadata.Entry("client_id", connId) } new Metadata { new Metadata.Entry("client_id", connId) }
).Value; ).Value;
// Debug.Log("HasNewStatus: " + hasNew); Debug.Log("HasNewStatus: " + hasNew);
if (hasNew) { if (hasNew) {
lobby_status.Set(lobby_client.getStatus(new Google.Protobuf.WellKnownTypes.Empty(), new Metadata { new Metadata.Entry("client_id", connId) })); lobby_status.Set(lobby_client.getStatus(new Google.Protobuf.WellKnownTypes.Empty(), new Metadata { new Metadata.Entry("client_id", connId) }));
hasChanged = true; hasChanged = true;

2
unity/Assets/Scripts/MainMenuController.cs

@ -70,7 +70,7 @@ public class MainMenuController : MonoBehaviour {
} }
} }
void FixedUpdate() { void Update() {
var conn = Client.GetConnection(); var conn = Client.GetConnection();
if (conn != null) { if (conn != null) {
if(SceneManager.GetActiveScene().buildIndex == 0) { if(SceneManager.GetActiveScene().buildIndex == 0) {

Loading…
Cancel
Save