diff options
| author | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-11-29 00:25:58 +0100 | 
|---|---|---|
| committer | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-11-29 00:26:36 +0100 | 
| commit | 3111e83d416d0bbba278759ae095040c7994f949 (patch) | |
| tree | 46174537f12e00abd0d1e1e565b4636db9bb827d | |
| parent | 3a9d89c2abf1fb2eb2cc465a91f2cd3a1ea0750d (diff) | |
Wait for Ready from client before starting a new round.
| -rw-r--r-- | server/client.cpp | 7 | ||||
| -rw-r--r-- | server/client.h | 2 | ||||
| -rw-r--r-- | server/game.cpp | 10 | 
3 files changed, 13 insertions, 6 deletions
diff --git a/server/client.cpp b/server/client.cpp index 3977b53..af2c55d 100644 --- a/server/client.cpp +++ b/server/client.cpp @@ -88,8 +88,13 @@ void Client::round_state(const PlayerState& pl_d, const PlayerState& pl_r, const  	connection->send(make_shared<Message::RoundState>(pl_d, pl_r, pl_u, pl_l, d, a));  } -void Client::round_end() { +void Client::round_end(boost::function<void ()> callback) {  	connection->send(make_shared<Message::RoundEnd>()); +	 +	// Check if we're waiting for ready. +	if(callback) { +		connection->recv(boost::bind(&Client::handle_ready, shared_from_this(), _1, callback)); +	}  }  void Client::get_action(boost::function<void (Action)> callback, Actions expected_actions) { diff --git a/server/client.h b/server/client.h index b8e11c2..4ba36d7 100644 --- a/server/client.h +++ b/server/client.h @@ -52,7 +52,7 @@ class Client : public boost::enable_shared_from_this<Client> {  		void round_state(const PlayerState& pl_d, const PlayerState& pl_r, const PlayerState& pl_u, const PlayerState& pl_l, const Tiles& d, const Actions& a);  		//! Send round end. -		void round_end(); +		void round_end(boost::function<void ()> callback);  		//! Get action. Upon connection error, last element of expected_actions will be provided.  		void get_action(boost::function<void (Action)> callback, Actions expected_actions); diff --git a/server/game.cpp b/server/game.cpp index 407df34..f4d5dec 100644 --- a/server/game.cpp +++ b/server/game.cpp @@ -297,10 +297,12 @@ void Game::handle_action_discard(Action action, int player) {  }  void Game::round_end() { -	players[0].client->round_end(); -	players[1].client->round_end(); -	players[2].client->round_end(); -	players[3].client->round_end(); +	awaiting_players = 4; +	 +	players[0].client->round_end(boost::bind(&Game::handle_ready, shared_from_this())); +	players[1].client->round_end(boost::bind(&Game::handle_ready, shared_from_this())); +	players[2].client->round_end(boost::bind(&Game::handle_ready, shared_from_this())); +	players[3].client->round_end(boost::bind(&Game::handle_ready, shared_from_this()));  	// Flere runder? round_start()  	// Ferdig? game_end()  | 
