summaryrefslogtreecommitdiff
path: root/server/player.cpp
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2010-11-15 08:24:55 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2010-11-15 08:24:55 +0100
commitc6a83f89ea55ba2071611513ac85b64134ac8f7b (patch)
treeecb2b4380931da4404d0af927f6645dcc51e81a9 /server/player.cpp
parent5c664afc0a91654ec2bd0be1e67995e7f61d27c7 (diff)
Added Player class.
Diffstat (limited to 'server/player.cpp')
-rw-r--r--server/player.cpp47
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_;
}