summaryrefslogtreecommitdiff
path: root/server/player.cpp
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2010-11-19 17:52:44 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2010-11-19 17:52:44 +0100
commitcad0ae2d88e74cc48bf62f872128d737013bbac2 (patch)
treecafe222d173658235f3f56e4f43faaa65f886682 /server/player.cpp
parenta5fbbe1c51968d330f1621efb5bf5d3b3c4ddf4d (diff)
Add game state and action functions to Player class.
Diffstat (limited to 'server/player.cpp')
-rw-r--r--server/player.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/server/player.cpp b/server/player.cpp
index 1901da7..cb84c9a 100644
--- a/server/player.cpp
+++ b/server/player.cpp
@@ -49,11 +49,23 @@ void Player::handle_ready(Message::p msg) {
ready_callback();
}
+void Player::handle_action(Message::p msg) {
+ if(msg->type != Message::Types::RoundAction) {
+ return;
+ }
+
+ Message::RoundAction::p action_msg = dynamic_pointer_cast<Message::RoundAction>(msg);
+
+ action_callback(action_msg->action);
+}
+
std::string Player::nick() {
return nick_;
}
void Player::game_start(boost::function<void ()> callback, std::vector<Player::p> players) {
+ ready_callback = callback;
+
Message::GameStart::p msg = make_shared<Message::GameStart>();
for(std::vector<Player::p>::iterator i = players.begin(); i != players.end(); i++) {
@@ -61,4 +73,20 @@ void Player::game_start(boost::function<void ()> callback, std::vector<Player::p
}
connection->send(msg);
+
+ connection->recv(boost::bind(&Player::handle_ready, shared_from_this(), _1));
+}
+
+void Player::round_start() {
+ connection->send(make_shared<Message::RoundStart>());
+}
+
+void Player::round_state(State::p state) {
+ connection->send(make_shared<Message::RoundState>(state));
+}
+
+void Player::get_action(boost::function<void (Action)> callback) {
+ action_callback = callback;
+
+ connection->recv(boost::bind(&Player::handle_action, shared_from_this(), _1));
}