summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/client.cpp4
-rw-r--r--server/client.h4
-rw-r--r--server/game.cpp41
-rw-r--r--server/game.h8
4 files changed, 30 insertions, 27 deletions
diff --git a/server/client.cpp b/server/client.cpp
index 465da3b..3977b53 100644
--- a/server/client.cpp
+++ b/server/client.cpp
@@ -84,8 +84,8 @@ void Client::round_start() {
connection->send(make_shared<Message::RoundStart>());
}
-void Client::round_state(State state) {
- connection->send(make_shared<Message::RoundState>(state));
+void Client::round_state(const PlayerState& pl_d, const PlayerState& pl_r, const PlayerState& pl_u, const PlayerState& pl_l, const Tiles& d, const Actions& a) {
+ connection->send(make_shared<Message::RoundState>(pl_d, pl_r, pl_u, pl_l, d, a));
}
void Client::round_end() {
diff --git a/server/client.h b/server/client.h
index ec22e85..b8e11c2 100644
--- a/server/client.h
+++ b/server/client.h
@@ -46,8 +46,10 @@ class Client : public boost::enable_shared_from_this<Client> {
//! Notify client of a round start.
void round_start();
+ typedef Message::RoundState::Player PlayerState;
+
//! Send round state.
- void round_state(State state);
+ 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();
diff --git a/server/game.cpp b/server/game.cpp
index 1f43e9b..26d0ce4 100644
--- a/server/game.cpp
+++ b/server/game.cpp
@@ -101,18 +101,19 @@ void Game::round_update_draw() {
// Construct and send state to each client.
for(int i = 0; i < 4; i++) {
- State state;
+ Player::State state[4];
- state.players[0] = players[i].get_state();
- state.players[1] = players[(i + 1) % 4].get_state_filtered();
- state.players[2] = players[(i + 2) % 4].get_state_filtered();
- state.players[3] = players[(i + 3) % 4].get_state_filtered();
+ state[0] = players[i].get_state();
+ state[1] = players[(i + 1) % 4].get_state_filtered();
+ state[2] = players[(i + 2) % 4].get_state_filtered();
+ state[3] = players[(i + 3) % 4].get_state_filtered();
+ Actions a;
if(i == current_player) {
- state.possible_actions = possible_actions;
+ a = possible_actions;
}
- players[i].client->round_state(state);
+ players[i].client->round_state(state[0], state[1], state[2], state[3], Tiles(), a);
}
// Await action from client.
@@ -126,21 +127,21 @@ void Game::round_update_discard() {
// Construct and send state to each client.
for(int i = 0; i < 4; i++) {
- State state;
+ Player::State state[4];
- state.players[0] = players[i].get_state();
- state.players[1] = players[(i + 1) % 4].get_state_filtered();
- state.players[2] = players[(i + 2) % 4].get_state_filtered();
- state.players[3] = players[(i + 3) % 4].get_state_filtered();
+ state[0] = players[i].get_state();
+ state[1] = players[(i + 1) % 4].get_state_filtered();
+ state[2] = players[(i + 2) % 4].get_state_filtered();
+ state[3] = players[(i + 3) % 4].get_state_filtered();
+ Actions a;
if(i != current_player) {
- Actions a = players[i].get_actions_discard(discarded_tile);
- if(a) {
- state.possible_actions = possible_actions[i] = a;
+ if(a = players[i].get_actions_discard(discarded_tile)) {
+ possible_actions[i] = a;
}
}
- players[i].client->round_state(state);
+ players[i].client->round_state(state[0], state[1], state[2], state[3], Tiles(), a);
}
preceding_action = Action::Pass;
@@ -275,13 +276,13 @@ void Game::Player::round_start() {
client->round_start();
}
-State::Player Game::Player::get_state() {
- State::Player state = {hand, open, pond};
+Game::Player::State Game::Player::get_state() {
+ State state = {hand, open, pond};
return state;
}
-State::Player Game::Player::get_state_filtered() {
- State::Player state = {hand, open, pond};
+Game::Player::State Game::Player::get_state_filtered() {
+ State state = {hand, open, pond};
return state;
}
diff --git a/server/game.h b/server/game.h
index 3eaac77..5fd85fd 100644
--- a/server/game.h
+++ b/server/game.h
@@ -9,8 +9,6 @@
#include "wall.h"
#include "client.h"
#include "../common/action.h"
-#include "../common/state.h"
-
class Game : public boost::enable_shared_from_this<Game> {
public:
@@ -33,11 +31,13 @@ class Game : public boost::enable_shared_from_this<Game> {
//! Prepare for a new round.
void round_start();
+ typedef Client::PlayerState State;
+
//! Get a state snapshot.
- State::Player get_state();
+ State get_state();
//! Get a state snapshot, with concealed tiles filtered.
- State::Player get_state_filtered();
+ State get_state_filtered();
//! Get possible actions after a draw.
Actions get_actions_draw();