#include "player.h" #include Player::p Player::create(Connection::p c, boost::function f) { Player::p p(new Player(c, f)); p->start(); return p; } Player::Player(Connection::p c, boost::function f) : connection(c), timer(c->socket.get_io_service()), lobby_callback(f) { } void Player::start() { // Send Hello. connection->send(make_shared("aotenjoud git")); // Wait for Login. connection->recv(boost::bind(&Player::handle_login, shared_from_this(), _1)); } void Player::handle_login(Message::p msg) { if(msg->type != Message::Types::Login) { return; } Message::Login::p login_msg = dynamic_pointer_cast(msg); // Check if nick is invalid. if(login_msg->nick.size() == 0) { connection->send(make_shared(false)); connection->recv(boost::bind(&Player::handle_login, shared_from_this(), _1)); return; } connection->send(make_shared(true)); nick_ = login_msg->nick; lobby_callback(shared_from_this()); } void Player::handle_ready(Message::p msg) { if(msg->type != Message::Types::Ready) { return; } ready_callback(); } std::string Player::nick() { return nick_; } void Player::game_start(boost::function callback, std::vector players) { Message::GameStart::p msg = make_shared(); for(std::vector::iterator i = players.begin(); i != players.end(); i++) { msg->players.push_back((*i)->nick()); } connection->send(msg); }