diff options
author | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-11-15 08:24:55 +0100 |
---|---|---|
committer | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-11-15 08:24:55 +0100 |
commit | c6a83f89ea55ba2071611513ac85b64134ac8f7b (patch) | |
tree | ecb2b4380931da4404d0af927f6645dcc51e81a9 /server/player.cpp | |
parent | 5c664afc0a91654ec2bd0be1e67995e7f61d27c7 (diff) |
Added Player class.
Diffstat (limited to 'server/player.cpp')
-rw-r--r-- | server/player.cpp | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/server/player.cpp b/server/player.cpp index e1796d8..7243d81 100644 --- a/server/player.cpp +++ b/server/player.cpp @@ -1,9 +1,46 @@ #include "player.h" -Player::Player(){} -Player::~Player(){} +#include <boost/bind.hpp> -Player::Player(const Connection::p& connection, const std::string& nick){ - this->connection_pointer = connection; - this->nick = nick; +Player::p Player::create(Connection::p c, boost::function<void (Player::p)> f) { + Player::p p(new Player(c, f)); + p->start(); + return p; +} + +Player::Player(Connection::p c, boost::function<void (Player::p)> f) : connection(c), lobby_callback(f) { + +} + +void Player::start() { + // Send Hello. + connection->send(make_shared<Message::Hello>("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<Message::Login>(msg); + + // Check if nick is invalid. + if(login_msg->nick.size() == 0) { + connection->send(make_shared<Message::LoginResponse>(false)); + connection->recv(boost::bind(&Player::handle_login, shared_from_this(), _1)); + return; + } + + connection->send(make_shared<Message::LoginResponse>(true)); + + nick_ = login_msg->nick; + + lobby_callback(shared_from_this()); +} + +std::string Player::nick() { + return nick_; } |