summaryrefslogtreecommitdiff
path: root/src/account-server/serverhandler.cpp
diff options
context:
space:
mode:
authorRogier Polak <rogier.l.a.polak@gmail.com>2007-03-05 03:32:59 +0000
committerRogier Polak <rogier.l.a.polak@gmail.com>2007-03-05 03:32:59 +0000
commitd811a539474a6eeb4439a4204f3d96551a5b7c1e (patch)
tree66b2482085965598845a0e58fa04d1bcdb6dd5a1 /src/account-server/serverhandler.cpp
parentf0d969eba1840362daad9debc93907c270b22ea5 (diff)
downloadmanaserv-d811a539474a6eeb4439a4204f3d96551a5b7c1e.tar.gz
manaserv-d811a539474a6eeb4439a4204f3d96551a5b7c1e.tar.bz2
manaserv-d811a539474a6eeb4439a4204f3d96551a5b7c1e.tar.xz
manaserv-d811a539474a6eeb4439a4204f3d96551a5b7c1e.zip
Added an abstrart base class for characterdata, in order to use the same serialize and deserialize functions on both the accountserver and the gameserver.
Diffstat (limited to 'src/account-server/serverhandler.cpp')
-rw-r--r--src/account-server/serverhandler.cpp36
1 files changed, 16 insertions, 20 deletions
diff --git a/src/account-server/serverhandler.cpp b/src/account-server/serverhandler.cpp
index e4ec218f..9a6dd667 100644
--- a/src/account-server/serverhandler.cpp
+++ b/src/account-server/serverhandler.cpp
@@ -24,6 +24,7 @@
#include <cassert>
#include <sstream>
+#include "account-server/characterdata.hpp"
#include "account-server/serverhandler.hpp"
#include "account-server/storage.hpp"
#include "net/messagein.hpp"
@@ -73,14 +74,14 @@ bool ServerHandler::getGameServerFromMap(unsigned mapId, std::string &address,
return true;
}
-void ServerHandler::registerGameClient(std::string const &token, PlayerPtr ptr)
+void ServerHandler::registerGameClient(std::string const &token, CharacterPtr ptr)
{
- unsigned mapId = ptr->getMap();
+ unsigned mapId = ptr->getMapId();
+
MessageOut msg(AGMSG_PLAYER_ENTER);
- msg.writeLong(ptr->getDatabaseID());
- msg.writeString(ptr->getName());
msg.writeString(token, 32);
- ptr->serialize(msg);
+ ptr->serialize(msg); //Characterdata
+
Servers::const_iterator i = servers.find(mapId);
assert(i != servers.end());
i->second.server->send(msg);
@@ -123,19 +124,14 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
case GAMSG_PLAYER_DATA:
{
LOG_DEBUG("GAMSG_PLAYER_DATA");
- int id = msg.readLong();
+
Storage &store = Storage::instance("tmw");
- PlayerPtr ptr = store.getCharacter(id);
+ CharacterPtr ptr(new CharacterData(msg));
+
+ if (!store.updateCharacter(ptr))
+ LOG_ERROR("Received character data for non-existing" <<
+ " character " << ptr->getDatabaseID() << ".");
- if (ptr.get() != NULL)
- {
- ptr->deserialize(msg);
- }
- else
- {
- LOG_ERROR("Received player data for non-existing player " <<
- id << ".");
- }
} break;
case GAMSG_REDIRECT:
@@ -148,10 +144,10 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
magic_token[i] = 1 + (int)(127 * (rand() / (RAND_MAX + 1.0)));
}
Storage &store = Storage::instance("tmw");
- PlayerPtr ptr = store.getCharacter(id);
+ CharacterPtr ptr = store.getCharacter(id);
std::string address;
short port;
- if (serverHandler->getGameServerFromMap(ptr->getMap(), address,
+ if (serverHandler->getGameServerFromMap(ptr->getMapId(), address,
port))
{
registerGameClient(magic_token, ptr);
@@ -164,7 +160,7 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
else
{
LOG_ERROR("Server Change: No game server for map " <<
- ptr->getMap() << ".");
+ ptr->getMapId() << ".");
}
} break;
@@ -175,7 +171,7 @@ void ServerHandler::processMessage(NetComputer *comp, MessageIn &msg)
std::string magic_token = msg.readString(32);
Storage &store = Storage::instance("tmw");
- PlayerPtr ptr = store.getCharacter(characterID);
+ CharacterPtr ptr = store.getCharacter(characterID);
int accountID = ptr->getAccountID();
registerAccountReconnect(accountID, magic_token);