summaryrefslogtreecommitdiff
path: root/server/player.cpp
diff options
context:
space:
mode:
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));
}