diff --git a/client/src/components/game.component.jsx b/client/src/components/game.component.jsx index ae6bf0b8..fbe614d1 100644 --- a/client/src/components/game.component.jsx +++ b/client/src/components/game.component.jsx @@ -19,6 +19,7 @@ function GamePanel(props) { setActiveCryp, selectSkillTarget, sendInstanceState, + sendGameReady, activeCryp, account, showLog, @@ -69,6 +70,11 @@ function GamePanel(props) { onClick={() => toggleLog(!showLog)}> Log + ); diff --git a/client/src/components/game.container.jsx b/client/src/components/game.container.jsx index e2be7224..9241ea09 100644 --- a/client/src/components/game.container.jsx +++ b/client/src/components/game.container.jsx @@ -23,6 +23,10 @@ const addState = connect( return false; } + function sendGameReady() { + ws.sendGameReady(game.id); + } + function sendInstanceState(instanceId) { if (!instanceId) return false; return ws.sendInstanceState(instanceId); @@ -42,6 +46,7 @@ const addState = connect( activeCryp, selectSkillTarget, sendInstanceState, + sendGameReady, }; }, diff --git a/client/src/socket.jsx b/client/src/socket.jsx index 9cbc225c..e7716740 100644 --- a/client/src/socket.jsx +++ b/client/src/socket.jsx @@ -74,8 +74,8 @@ function createSocket(events) { send({ method: 'game_state', params: { id } }); } - function sendGameJoin(gameId, crypIds) { - send({ method: 'game_join', params: { game_id: gameId, cryp_ids: crypIds } }); + function sendGameReady(id) { + send({ method: 'game_ready', params: { id } }); } function sendSpecForget(id, spec) { @@ -331,7 +331,7 @@ function createSocket(events) { sendAccountInstances, sendAccountZone, sendGameState, - sendGameJoin, + sendGameReady, sendGameSkill, sendGameTarget, sendCrypSpawn, diff --git a/server/src/game.rs b/server/src/game.rs index 2dfd5755..dcb146a0 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -558,7 +558,7 @@ impl Game { { let winner = self.players.iter().find(|t| t.cryps.iter().any(|c| !c.is_ko())); match winner { - Some(w) => self.log.push(format!("Winner: {:}", w.id)), + Some(w) => self.log.push(format!("Winner: {:}", w.name)), None => self.log.push(format!("Game was drawn.")), }; } @@ -585,6 +585,7 @@ impl Game { player.add_warning(); if player.warnings >= 3 { player.forfeit(); + self.log.push(format!("{:?} forfeited.", player.name)); } } } @@ -818,8 +819,8 @@ pub fn game_skill(params: GameSkillParams, tx: &mut Transaction, account: &Accou Ok(game) } -pub fn game_ready(params: GameSkillParams, tx: &mut Transaction, account: &Account) -> Result { - let mut game = game_get(tx, params.game_id)?; +pub fn game_ready(params: GameStateParams, tx: &mut Transaction, account: &Account) -> Result { + let mut game = game_get(tx, params.id)?; game.player_ready(account.id)?; diff --git a/server/src/rpc.rs b/server/src/rpc.rs index d802c936..47a8b989 100644 --- a/server/src/rpc.rs +++ b/server/src/rpc.rs @@ -16,7 +16,7 @@ use failure::err_msg; use net::Db; use cryp::{Cryp, cryp_spawn}; -use game::{Game, game_state, game_skill}; +use game::{Game, game_state, game_skill, game_ready}; use account::{Account, account_create, account_login, account_from_token, account_cryps, account_instances}; use skill::{Skill}; // use zone::{Zone, zone_create, zone_join, zone_close}; @@ -71,6 +71,7 @@ impl Rpc { "game_state" => Rpc::game_state(data, &mut tx, account.unwrap(), client), "game_skill" => Rpc::game_skill(data, &mut tx, account.unwrap(), client), + "game_ready" => Rpc::game_ready(data, &mut tx, account.unwrap(), client), "instance_join" => Rpc::instance_join(data, &mut tx, account.unwrap(), client), "instance_ready" => Rpc::instance_ready(data, &mut tx, account.unwrap(), client), @@ -140,6 +141,18 @@ impl Rpc { return Ok(game_response); } + fn game_ready(data: Vec, tx: &mut Transaction, account: Account, _client: &mut WebSocket) -> Result { + let msg = from_slice::(&data).or(Err(err_msg("invalid params")))?; + + let game_response = RpcResponse { + method: "game_state".to_string(), + params: RpcResult::GameState(game_ready(msg.params, tx, &account)?) + }; + + return Ok(game_response); + } + + fn cryp_spawn(data: Vec, tx: &mut Transaction, account: Account, client: &mut WebSocket) -> Result { let msg = from_slice::(&data).or(Err(err_msg("invalid params")))?;