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. 22
      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

22
server/src/server/game.rs

@ -145,6 +145,7 @@ impl GameService {
}
async fn get_default_status(&self, uuid: uuid::Uuid) -> Result<Option<MessageStatus>, Status> {
log::info!("Creating a new status for {}", uuid);
let lobby = {
let mut conn = self.conn.write().await;
let lobby: u32 = match conn.get_lobby_for_user(uuid).await {
@ -153,6 +154,7 @@ impl GameService {
};
lobby
};
let r =
Ok(self
.running_games
.read()
@ -165,7 +167,9 @@ impl GameService {
.await
.2
.get()
.clone())
.clone());
log::info!("Created a new status for {}", uuid);
r
}
}
@ -175,6 +179,8 @@ impl game_server::Game for GameService {
&self,
request: tonic::Request<CardKind>,
) -> 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 {
client_id::Error::NotSet => Status::failed_precondition("client_id must be set"),
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 (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();
image::open(&face)
.expect(&format!("Error loading the image in {:?}", face))
.write_to(&mut face_buf, image::ImageOutputFormat::Png)
.unwrap();
log::info!("Loading back image [{:?}]", time.elapsed());
let mut back_buf = Vec::new();
image::open(&back)
.expect(&format!("Error loading the image in {:?}", back))
.write_to(&mut back_buf, image::ImageOutputFormat::Png)
.unwrap();
log::info!("Loaded images [{:?}]", time.elapsed());
Ok(Response::new(Image {
face: face_buf,
back: back_buf,
@ -263,9 +273,10 @@ impl game_server::Game for GameService {
})?;
Ok(Response::new(
self.get_default_status(uuid)
.await?
.ok_or(Status::internal("No status has been set"))?,
self.get_default_status(uuid).await?.unwrap_or({
self.update_status(uuid).await?;
self.get_default_status(uuid).await?.unwrap()
}),
))
}
@ -286,7 +297,8 @@ impl game_server::Game for GameService {
lobby
};
use std::convert::TryInto;
let has_changed = self.running_games
let has_changed = self
.running_games
.read()
.await
.get(&lobby)

12
server/src/server/lobby.rs

@ -5,9 +5,9 @@ use tokio::sync::{mpsc, RwLock};
use std::{collections::HashMap, convert::TryInto, sync::Arc};
use super::grpc::common::{HasNewStatus, LastStatusTimestamp, Name};
use super::grpc::game::MessageStatus;
use super::grpc::lobby::lobby_server::Lobby;
use super::grpc::lobby::{LobbyStatus, SingleVote, Vote};
use super::grpc::game::MessageStatus;
pub use super::grpc::lobby::lobby_server::LobbyServer;
@ -21,7 +21,8 @@ pub struct LobbyService {
conn: RwLock<db::DbClient>,
games: Arc<Vec<crate::games::Game>>,
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 {
@ -29,7 +30,9 @@ impl LobbyService {
conn: db::DbClient,
voting: votes::VotingSystem,
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 {
conn: RwLock::new(conn),
@ -67,7 +70,10 @@ impl Lobby for LobbyService {
.write()
.await
.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(()))
}

2
unity/Assets/Scripts/Client.cs

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

2
unity/Assets/Scripts/MainMenuController.cs

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

Loading…
Cancel
Save