diff options
author | Rogier Polak <rogier.l.a.polak@gmail.com> | 2007-03-05 03:32:59 +0000 |
---|---|---|
committer | Rogier Polak <rogier.l.a.polak@gmail.com> | 2007-03-05 03:32:59 +0000 |
commit | d811a539474a6eeb4439a4204f3d96551a5b7c1e (patch) | |
tree | 66b2482085965598845a0e58fa04d1bcdb6dd5a1 /src/account-server/serverhandler.cpp | |
parent | f0d969eba1840362daad9debc93907c270b22ea5 (diff) | |
download | manaserv-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.cpp | 36 |
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); |