let's see how many typos i have

This commit is contained in:
DarthArgus
2016-09-30 19:57:14 -05:00
parent a67734af5f
commit 109d4234c9
15 changed files with 2505 additions and 2294 deletions
@@ -25,6 +25,8 @@
#include "Unicode.h"
#include "UnicodeUtils.h"
#include "sharedFoundation/CrcConstexpr.hpp"
// ======================================================================
CentralServerConnection::CentralServerConnection(const std::string & a, const unsigned short p) :
@@ -65,31 +67,39 @@ void CentralServerConnection::onReceive(const Archive::ByteStream & message)
const GameNetworkMessage msg(ri);
ri = message.begin();
if(msg.isType("TransferRenameCharacter"))
{
const GenericValueTypeMessage<TransferCharacterData> request(ri);
const TransferCharacterData & requestData = request.getValue();
LOG("CustomerService", ("CharacterTransfer: Received TransferRenameCharacter, starting game database name change. %s", requestData.toString().c_str()));
Persister::getInstance().renameCharacter(0, static_cast<int8>(RenameCharacterMessageEx::RCMS_cts_rename), request.getValue().getSourceStationId(), request.getValue().getCharacterId(), Unicode::narrowToWide(request.getValue().getDestinationCharacterName()), Unicode::narrowToWide(request.getValue().getSourceCharacterName()), false, NetworkId::cms_invalid, &requestData);
}
else if(msg.isType("ConGenericMessage"))
{
const ConGenericMessage cm(ri);
std::string result;
ConsoleManager::processString(cm.getMsg(), cm.getMsgId(), result);
const ConGenericMessage response(result, cm.getMsgId());
send(response, true);
}
else if(msg.isType("TransferAccountRequestCentralDatabase"))
{
const GenericValueTypeMessage<TransferAccountData> request(ri);
const TransferAccountData & requestData = request.getValue();
LOG("CustomerService", ("CharacterTransfer: Received TransferAccountRequestCentralDatabase, starting game database change from station ID %d to station ID %d", request.getValue().getSourceStationId(), request.getValue().getDestinationStationId()));
Persister::getInstance().changeStationId(&requestData);
}
else
{
ServerConnection::onReceive(message);
const uint32 messageType = msg.getType();
switch(messageType) {
case constcrc("TransferRenameCharacter") :
{
const GenericValueTypeMessage<TransferCharacterData> request(ri);
const TransferCharacterData & requestData = request.getValue();
LOG("CustomerService", ("CharacterTransfer: Received TransferRenameCharacter, starting game database name change. %s", requestData.toString().c_str()));
Persister::getInstance().renameCharacter(0, static_cast<int8>(RenameCharacterMessageEx::RCMS_cts_rename), request.getValue().getSourceStationId(), request.getValue().getCharacterId(), Unicode::narrowToWide(request.getValue().getDestinationCharacterName()), Unicode::narrowToWide(request.getValue().getSourceCharacterName()), false, NetworkId::cms_invalid, &requestData);
break;
}
case constcrc("ConGenericMessage") :
{
const ConGenericMessage cm(ri);
std::string result;
ConsoleManager::processString(cm.getMsg(), cm.getMsgId(), result);
const ConGenericMessage response(result, cm.getMsgId());
send(response, true);
break;
}
case constcrc("TransferAccountRequestCentralDatabase") :
{
const GenericValueTypeMessage<TransferAccountData> request(ri);
const TransferAccountData & requestData = request.getValue();
LOG("CustomerService", ("CharacterTransfer: Received TransferAccountRequestCentralDatabase, starting game database change from station ID %d to station ID %d", request.getValue().getSourceStationId(), request.getValue().getDestinationStationId()));
Persister::getInstance().changeStationId(&requestData);
break;
}
default :
{
ServerConnection::onReceive(message);
break;
}
}
}
@@ -28,6 +28,8 @@
#include "sharedNetworkMessages/NameErrors.h"
#include "unicodeArchive/UnicodeArchive.h"
#include "sharedFoundation/CrcConstexpr.hpp"
//-----------------------------------------------------------------------
DataLookup *DataLookup::ms_theInstance = nullptr;
@@ -93,59 +95,71 @@ void DataLookup::receiveMessage(const MessageDispatch::Emitter &source, const Me
{
UNREF(source);
if (message.isType("VerifyNameRequest"))
{
const GameServerConnection * g = safe_cast<const GameServerConnection *>(&source);
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
VerifyNameRequest * vnr = new VerifyNameRequest(ri);
LOG("TraceCharacterCreation", ("%d received VerifyNameRequest", vnr->getStationId()));
verifyName(g->getProcessId(), vnr);
}
else if (message.isType("ReleaseNameMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ReleaseNameMessage rnm(ri);
const uint32 messageType = message.getType();
switch(messageType) {
case constcrc("VerifyNameRequest") :
{
const GameServerConnection * g = safe_cast<const GameServerConnection *>(&source);
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
VerifyNameRequest * vnr = new VerifyNameRequest(ri);
LOG("TraceCharacterCreation", ("%d received VerifyNameRequest", vnr->getStationId()));
verifyName(g->getProcessId(), vnr);
break;
}
case constcrc("ReleaseNameMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ReleaseNameMessage rnm(ri);
LOG("TraceCharacterCreation", ("%d received ReleaseNameMessage", rnm.getStationId()));
LOG("TraceCharacterCreation", ("%d received ReleaseNameMessage", rnm.getStationId()));
releaseName(rnm.getStationId(), rnm.getCharacterId());
}
else if (message.isType("RequestBiographyMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
RequestBiographyMessage msg(ri);
releaseName(rnm.getStationId(), rnm.getCharacterId());
break;
}
case constcrc("RequestBiographyMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
RequestBiographyMessage msg(ri);
const GameServerConnection *conn = dynamic_cast<const GameServerConnection*>(&source);
if (conn)
getBiography(msg.getOwner(),conn->getProcessId());
else
DEBUG_WARNING(true,("Got RequestBiographyMessage from something that wasn't a GameServerConnection.\n"));
}
else if (message.isType("BiographyMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
BiographyMessage msg(ri);
const GameServerConnection *conn = dynamic_cast<const GameServerConnection*>(&source);
if (conn)
getBiography(msg.getOwner(),conn->getProcessId());
else
DEBUG_WARNING(true,("Got RequestBiographyMessage from something that wasn't a GameServerConnection.\n"));
break;
}
case constcrc("BiographyMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
BiographyMessage msg(ri);
setBiography(msg.getOwner(),msg.getBio());
}
else if (message.isType("PurgeStructuresForAccountMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<StationId> msg(ri);
setBiography(msg.getOwner(),msg.getBio());
break;
}
case constcrc("PurgeStructuresForAccountMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<StationId> msg(ri);
getStructuresForPurge(msg.getValue(), false);
}
else if (message.isType("WarnStructuresAboutPurgeMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<StationId> msg(ri);
getStructuresForPurge(msg.getValue(), false);
break;
}
case constcrc("WarnStructuresAboutPurgeMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<StationId> msg(ri);
getStructuresForPurge(msg.getValue(), true);
}
else
{
DEBUG_REPORT_LOG(true,("Unrecognized message recieved by DataLookup.\n"));
getStructuresForPurge(msg.getValue(), true);
break;
}
default :
{
DEBUG_REPORT_LOG(true,("Unrecognized message recieved by DataLookup.\n"));
break;
}
}
}
@@ -454,32 +468,6 @@ const Unicode::String DataLookup::normalizeName(const Unicode::String &name) con
return result;
}
//--------------------------------------------------------------------
/*
const std::string DataLookup::getNameByStationId(uint32 stationId) const
{
std::map<uint32, reservation>::const_iterator i=m_reservations.find(stationId);
if (i == m_reservations.end())
{
WARNING_STRICT_FATAL(true, ("asked for name that wasn't in the reservation list"));
return std::string();
}
return Unicode::wideToNarrow(i->second.originalName);
}
//--------------------------------------------------------------------
const std::string DataLookup::getNormalizedNameByStationId(uint32 stationId) const
{
std::map<uint32, reservation>::const_iterator i=m_reservations.find(stationId);
if (i == m_reservations.end())
{
WARNING_STRICT_FATAL(true, ("asked for name that wasn't in the reservation list"));
return std::string();
}
return Unicode::wideToNarrow(i->second.name);
}
//--------------------------------------------------------------------
*/
DataLookup::reservationList * DataLookup::getReservationList(uint32 stationId)
@@ -44,6 +44,8 @@
#include "sharedNetworkMessages/FrameEndMessage.h"
#include "UnicodeUtils.h"
#include "sharedFoundation/CrcConstexpr.hpp"
// ----------------------------------------------------------------------
DatabaseProcess *DatabaseProcess::ms_theInstance = nullptr;
@@ -418,143 +420,162 @@ void DatabaseProcess::gameServerGoByeBye(uint32 processId)
void DatabaseProcess::receiveMessage(const MessageDispatch::Emitter & source, const MessageDispatch::MessageBase & message)
{
UNREF(source);
const uint32 messageType = message.getType();
//---
// Connection info messages
//
if(message.isType("CentralConnectionOpened"))
{
DEBUG_REPORT_LOG(true, ("Connection with Central server opened\n"));
DEBUG_FATAL(centralServerConnection != &source,("Got CentralConnectionOpened from something other than our CentralServer connection.\n"));
//TODO: Make a DatabaseProcessConnect version of this message, perhaps ?
CentralGameServerConnect c("database", "127.0.0.1", 0, gameService->getBindAddress(), gameService->getBindPort());
centralServerConnection->send(c, true);
}
else if(message.isType("GameConnectionOpened"))
{
DEBUG_REPORT_LOG(true, ("Connection with Game server opened\n"));
}
else if(message.isType("TaskConnectionOpened"))
{
DEBUG_REPORT_LOG(true, ("Connection with Task manager opened\n"));
// get cluster name
std::string clusterName;
ConfigFile::Section const * const sec = ConfigFile::getSection("TaskManager");
if (sec)
switch(messageType) {
case constcrc("CentralConnectionOpened") :
{
ConfigFile::Key const * const ky = sec->findKey("clusterName");
if (ky)
DEBUG_REPORT_LOG(true, ("Connection with Central server opened\n"));
DEBUG_FATAL(centralServerConnection != &source,("Got CentralConnectionOpened from something other than our CentralServer connection.\n"));
//TODO: Make a DatabaseProcessConnect version of this message, perhaps ?
CentralGameServerConnect c("database", "127.0.0.1", 0, gameService->getBindAddress(), gameService->getBindPort());
centralServerConnection->send(c, true);
break;
}
case constcrc("GameConnectionOpened") :
{
DEBUG_REPORT_LOG(true, ("Connection with Game server opened\n"));
break;
}
case constcrc("TaskConnectionOpened") :
{
DEBUG_REPORT_LOG(true, ("Connection with Task manager opened\n"));
// get cluster name
std::string clusterName;
ConfigFile::Section const * const sec = ConfigFile::getSection("TaskManager");
if (sec)
{
clusterName = ky->getAsString(ky->getCount()-1, "");
ConfigFile::Key const * const ky = sec->findKey("clusterName");
if (ky)
{
clusterName = ky->getAsString(ky->getCount()-1, "");
}
}
TaskConnectionIdMessage tid(TaskConnectionIdMessage::Database, "", clusterName);
taskService->send(tid, true);
break;
}
TaskConnectionIdMessage tid(TaskConnectionIdMessage::Database, "", clusterName);
taskService->send(tid, true);
}
else if(message.isType("CommoditiesConnectionOpened"))
{
DEBUG_REPORT_LOG(true, ("Connection with Commodities Server opened\n"));
CommoditiesServerConnection * con = const_cast<CommoditiesServerConnection *>(static_cast<const CommoditiesServerConnection *>(&source));
if (commoditiesConnection)
LOG("CommoditiesConnectionOpened",("Connection Opened while another connection already exists."));
commoditiesConnection = con;
}
else if(message.isType("CentralConnectionClosed"))
{
DEBUG_REPORT_LOG(true, ("Central server closed its connection, we must die a tragicly heroic death.\n"));
setDone("CentralConnectionClosed : %s", centralServerConnection->getDisconnectReason().c_str());
centralServerConnection = 0;
WARNING(true,("Database lost connection to central."));
}
else if(message.isType("GameConnectionClosed"))
{
DEBUG_REPORT_LOG(true, ("a Game server closed its connection\n"));
}
else if(message.isType("TaskConnectionClosed"))
{
DEBUG_REPORT_LOG(true, ("Task manager closed its connection\n"));
taskService=0;
}
else if(message.isType("CommoditiesConnectionClosed"))
{
DEBUG_REPORT_LOG(true, ("Commodities Server closed its connection\n"));
commoditiesService = 0;
commoditiesConnection = 0;
}
// end connection info messages
//---
else if(message.isType("CentralGameServerSetProcessId"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
CentralGameServerSetProcessId id(ri);
setProcessId(id.getProcessId());
clusterName = id.getClusterName();
Loader::getInstance().checkVersionNumber(ConfigServerDatabase::getExpectedDBVersion(), ConfigServerDatabase::isCorrectDBVersionRequired());
Loader::getInstance().loadClock();
}
else if(message.isType("GameSetProcessId") || message.isType("GameGameServerConnect"))
{
GameServerConnection * g = const_cast<GameServerConnection *>(static_cast<const GameServerConnection *>(&source));
gameServerConnections[g->getProcessId()] = g;
GameServerConnectAck reply;
g->send(reply,true);
}
else if(message.isType("ProfilerOperationMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ProfilerOperationMessage m(ri);
uint32 processId = m.getProcessId();
if (processId == 0 || processId == getProcessId())
Profiler::handleOperation(m.getOperation().c_str());
}
else if(message.isType("ChatServerOnline"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ChatServerOnline cso(ri);
// establish a connection with the chat server if one doesn't already exist
if (!chatServerConnection)
case constcrc("CommoditiesConnectionOpened") :
{
REPORT_LOG(true, ("New chat server connection active\n"));
chatServerConnection = new ChatServerConnection(cso.getAddress(), cso.getPort());
DEBUG_REPORT_LOG(true, ("Connection with Commodities Server opened\n"));
CommoditiesServerConnection * con = const_cast<CommoditiesServerConnection *>(static_cast<const CommoditiesServerConnection *>(&source));
if (commoditiesConnection)
LOG("CommoditiesConnectionOpened",("Connection Opened while another connection already exists."));
commoditiesConnection = con;
break;
}
}
else if(message.isType("ChatServerConnectionClosed"))
{
REPORT_LOG(true, ("DatabaseProcess: Chat Server connection closed\n"));
chatServerConnection = 0;
}
else if(message.isType("FrameEndMessage"))
{
// TODO: handle this game server's frame ending
}
else if (message.isType("CentralPingMessage"))
{
CentralPingMessage reply;
sendToCentralServer(reply,true);
}
else if (message.isType("ExcommunicateGameServerMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ExcommunicateGameServerMessage msg(ri);
LOG("GameGameConnect",("Database Process was told to drop connection to %lu by Central",msg.getServerId()));
FATAL (msg.getServerId() == getProcessId(),("Crashing because Central told us to (probably indicates we weren't responding to pings)"));
GameServerConnection *conn =getConnectionByProcess(msg.getServerId());
if (conn)
case constcrc("CentralConnectionClosed") :
{
conn->setDisconnectReason("Told to excommunicate by central");
conn->disconnect();
DEBUG_REPORT_LOG(true, ("Central server closed its connection, we must die a tragicly heroic death.\n"));
setDone("CentralConnectionClosed : %s", centralServerConnection->getDisconnectReason().c_str());
centralServerConnection = 0;
WARNING(true,("Database lost connection to central."));
break;
}
}
case constcrc("GameConnectionClosed") :
{
DEBUG_REPORT_LOG(true, ("a Game server closed its connection\n"));
break;
}
case constcrc("TaskConnectionClosed") :
{
DEBUG_REPORT_LOG(true, ("Task manager closed its connection\n"));
taskService = 0;
break;
}
case constcrc("CommoditiesConnectionClosed") :
{
DEBUG_REPORT_LOG(true, ("Commodities Server closed its connection\n"));
commoditiesService = 0;
commoditiesConnection = 0;
break;
}
// end connection info messages
case constcrc("CentralGameServerSetProcessId") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
CentralGameServerSetProcessId id(ri);
setProcessId(id.getProcessId());
clusterName = id.getClusterName();
Loader::getInstance().checkVersionNumber(ConfigServerDatabase::getExpectedDBVersion(), ConfigServerDatabase::isCorrectDBVersionRequired());
Loader::getInstance().loadClock();
break;
}
case constcrc("GameSetProcessId") :
case constcrc("GameGameServerConnect") :
{
GameServerConnection * g = const_cast<GameServerConnection *>(static_cast<const GameServerConnection *>(&source));
gameServerConnections[g->getProcessId()] = g;
GameServerConnectAck reply;
g->send(reply,true);
break;
}
case constcrc("ProfilerOperationMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ProfilerOperationMessage m(ri);
uint32 processId = m.getProcessId();
if (processId == 0 || processId == getProcessId())
Profiler::handleOperation(m.getOperation().c_str());
break;
}
case constcrc("ChatServerOnline") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ChatServerOnline cso(ri);
// establish a connection with the chat server if one doesn't already exist
if (!chatServerConnection)
{
REPORT_LOG(true, ("New chat server connection active\n"));
chatServerConnection = new ChatServerConnection(cso.getAddress(), cso.getPort());
}
break;
}
case constcrc("ChatServerConnectionClosed") :
{
REPORT_LOG(true, ("DatabaseProcess: Chat Server connection closed\n"));
chatServerConnection = 0;
break;
}
case constcrc("FrameEndMessage") :
{
// TODO: handle this game server's frame ending
break;
}
case constcrc("CentralPingMessage") :
{
CentralPingMessage reply;
sendToCentralServer(reply,true);
break;
}
case constcrc("ExcommunicateGameServerMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ExcommunicateGameServerMessage msg(ri);
LOG("GameGameConnect",("Database Process was told to drop connection to %lu by Central",msg.getServerId()));
FATAL (msg.getServerId() == getProcessId(),("Crashing because Central told us to (probably indicates we weren't responding to pings)"));
GameServerConnection *conn =getConnectionByProcess(msg.getServerId());
if (conn)
{
conn->setDisconnectReason("Told to excommunicate by central");
conn->disconnect();
}
break;
}
}
}
// ----------------------------------------------------------------------
@@ -51,6 +51,8 @@
#include "sharedNetworkMessages/GenericValueTypeMessage.h"
#include "unicodeArchive/UnicodeArchive.h"
#include "sharedFoundation/CrcConstexpr.hpp"
#include <algorithm>
// ======================================================================
@@ -411,135 +413,160 @@ void Loader::queueOutgoingSnapshot(LoaderSnapshotGroup *outgoingSnapshot)
void Loader::receiveMessage(const MessageDispatch::Emitter & source, const MessageDispatch::MessageBase & message)
{
UNREF(source);
if(message.isType("LoadObjectMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LoadObjectMessage lom(ri);
DEBUG_FATAL(true,("LoadObjectMessage is deprecated on the database process.\n"));
// requestObject(lom.getId(),lom.getProcess());
}
else if(message.isType("RequestChunkMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
RequestChunkMessage m(ri);
std::vector<RequestChunkMessage::Chunk> const & chunks = m.getChunks();
for (std::vector<RequestChunkMessage::Chunk>::const_iterator i=chunks.begin(); i!=chunks.end(); ++i)
requestChunk(i->m_process, i->m_nodeX, i->m_nodeZ, m.getSceneId());
}
else if(message.isType("RequestOIDsMessage"))
{
// DEBUG_REPORT_LOG(true,("Got RequestOIDsMessage.\n"));
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
RequestOIDsMessage m(ri);
switch (messageType) {
case constcrc("LoadObjectMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LoadObjectMessage lom(ri);
DEBUG_FATAL(true,("LoadObjectMessage is deprecated on the database process.\n"));
// requestObject(lom.getId(),lom.getProcess());
break;
}
case constcrc("RequestChunkMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
RequestChunkMessage m(ri);
std::vector<RequestChunkMessage::Chunk> const & chunks = m.getChunks();
for (std::vector<RequestChunkMessage::Chunk>::const_iterator i=chunks.begin(); i!=chunks.end(); ++i)
requestChunk(i->m_process, i->m_nodeX, i->m_nodeZ, m.getSceneId());
break;
}
case constcrc("RequestOIDsMessage") :
{
// DEBUG_REPORT_LOG(true,("Got RequestOIDsMessage.\n"));
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
RequestOIDsMessage m(ri);
if (m.getLogRequest())
LOG("ObjectIdManager", ("Received RequestOIDsMessage for %lu more object ids for pid %lu", m.getHowMany(), m.getServerId()));
if (m.getLogRequest())
LOG("ObjectIdManager", ("Received RequestOIDsMessage for %lu more object ids for pid %lu", m.getHowMany(), m.getServerId()));
getObjectIds(static_cast<int>(m.getServerId()),static_cast<int>(m.getHowMany()), m.getLogRequest());
}
else if(message.isType("ValidateCharacterForLoginMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ValidateCharacterForLoginMessage msg(ri);
verifyCharacter(msg.getSuid(), msg.getCharacterId(), nullptr);
}
else if(message.isType("TransferGetLoginLocationData"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<TransferCharacterData> request(ri);
TransferCharacterData * transferData = new TransferCharacterData(request.getValue());
verifyCharacter(transferData->getSourceStationId(), transferData->getCharacterId(), transferData);
}//lint !e429 not freed : suppressed because verifyCharacter will own this copy of the data
else if(message.isType("LoadUniverseMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LoadUniverseMessage m(ri);
DEBUG_REPORT_LOG(true,("Got LoadUniverseMessage\n"));
loadUniverse(m.getProcess());
}
else if(message.isType("PlanetLoadCharacterMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
PlanetLoadCharacterMessage m(ri);
DEBUG_REPORT_LOG(true,("Got PlanetLoadCharacterMessage\n"));
requestCharacter(m.getCharacterId(), m.getGameServerId());
}
else if(message.isType("LoadContainedObjectMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LoadContainedObjectMessage msg(ri);
getObjectIds(static_cast<int>(m.getServerId()),static_cast<int>(m.getHowMany()), m.getLogRequest());
break;
}
case constcrc("ValidateCharacterForLoginMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ValidateCharacterForLoginMessage msg(ri);
verifyCharacter(msg.getSuid(), msg.getCharacterId(), nullptr);
break;
}
case constcrc("TransferGetLoginLocationData") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<TransferCharacterData> request(ri);
TransferCharacterData * transferData = new TransferCharacterData(request.getValue());
verifyCharacter(transferData->getSourceStationId(), transferData->getCharacterId(), transferData);
break;
}//lint !e429 not freed : suppressed because verifyCharacter will own this copy of the data
case constcrc("LoadUniverseMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LoadUniverseMessage m(ri);
DEBUG_REPORT_LOG(true,("Got LoadUniverseMessage\n"));
loadUniverse(m.getProcess());
break;
}
case constcrc("PlanetLoadCharacterMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
PlanetLoadCharacterMessage m(ri);
DEBUG_REPORT_LOG(true,("Got PlanetLoadCharacterMessage\n"));
requestCharacter(m.getCharacterId(), m.getGameServerId());
break;
}
case constcrc("LoadContainedObjectMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LoadContainedObjectMessage msg(ri);
const GameServerConnection * g = dynamic_cast<const GameServerConnection *>(&source);
if (g)
loadContainedObject(msg.getContainerId(), msg.getObjectId(), g->getProcessId());
else
WARNING_STRICT_FATAL(true,("Got LoadContainedObjectMessage for %s, but sender was not a GameServerConnection.\n",msg.getObjectId().getValueString().c_str()));
}
else if(message.isType("LoadContentsMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LoadContentsMessage msg(ri);
const GameServerConnection * g = dynamic_cast<const GameServerConnection *>(&source);
if (g)
loadContainedObject(msg.getContainerId(), msg.getObjectId(), g->getProcessId());
else
WARNING_STRICT_FATAL(true,("Got LoadContainedObjectMessage for %s, but sender was not a GameServerConnection.\n",msg.getObjectId().getValueString().c_str()));
break;
}
case constcrc("LoadContentsMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LoadContentsMessage msg(ri);
const GameServerConnection * g = dynamic_cast<const GameServerConnection *>(&source);
if (g)
loadContents(msg.getContainerId(), g->getProcessId());
else
WARNING_STRICT_FATAL(true,("Got LoadContentsMessage for container %s, but sender was not a GameServerConnection.\n",msg.getContainerId().getValueString().c_str()));
}
else if(message.isType("LocateStructureMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LocateStructureMessage msg(ri);
const GameServerConnection * g = dynamic_cast<const GameServerConnection *>(&source);
if (g)
loadContents(msg.getContainerId(), g->getProcessId());
else
WARNING_STRICT_FATAL(true,("Got LoadContentsMessage for container %s, but sender was not a GameServerConnection.\n",msg.getContainerId().getValueString().c_str()));
break;
}
case constcrc("LocateStructureMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
LocateStructureMessage msg(ri);
const GameServerConnection * g = dynamic_cast<const GameServerConnection *>(&source);
if (g)
locateStructure(msg.getStructureId(), msg.getWhoRequested());
else
WARNING_STRICT_FATAL(true,("Got LocateStructureMessage for %s, but sender was not a GameServerConnection.\n",msg.getStructureId().getValueString().c_str()));
}
else if(message.isType("PreloadRequestCompleteMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
PreloadRequestCompleteMessage msg(ri);
const GameServerConnection * g = dynamic_cast<const GameServerConnection *>(&source);
if (g)
locateStructure(msg.getStructureId(), msg.getWhoRequested());
else
WARNING_STRICT_FATAL(true,("Got LocateStructureMessage for %s, but sender was not a GameServerConnection.\n",msg.getStructureId().getValueString().c_str()));
break;
}
case constcrc("PreloadRequestCompleteMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
PreloadRequestCompleteMessage msg(ri);
preloadRequestComplete(msg.getGameServerId(), msg.getPreloadAreaId());
}
else if(message.isType("LoadAckMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<int> msg(ri);
const GameServerConnection * g = dynamic_cast<const GameServerConnection *>(&source);
if (g)
handleLoadAck(g->getProcessId(), msg.getValue());
else
WARNING_STRICT_FATAL(true,("Got LoadAckMessage, but sender was not a GameServerConnection."));
}
else if( message.isType("CSGetCharactersRequestMessage") )
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
CSGetCharactersRequestMessage const msg( ri );
handleCSGetCharacters( msg );
}
else if( message.isType("CSGetDeletedItemsRequestMessage") )
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
CSGetDeletedItemsRequestMessage const msg( ri );
handleCSGetDeletedItems( msg );
}
else if( message.isType("DBCSRequestMessage" ) )
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
DBCSRequestMessage const msg( ri );
handleCSRequest( msg );
preloadRequestComplete(msg.getGameServerId(), msg.getPreloadAreaId());
break;
}
case constcrc("LoadAckMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<int> msg(ri);
const GameServerConnection * g = dynamic_cast<const GameServerConnection *>(&source);
if (g)
handleLoadAck(g->getProcessId(), msg.getValue());
else
WARNING_STRICT_FATAL(true,("Got LoadAckMessage, but sender was not a GameServerConnection."));
break;
}
case constcrc("CSGetCharactersRequestMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
CSGetCharactersRequestMessage const msg( ri );
handleCSGetCharacters( msg );
break;
}
case constcrc("CSGetDeletedItemsRequestMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
CSGetDeletedItemsRequestMessage const msg( ri );
handleCSGetDeletedItems( msg );
break;
}
case constcrc("DBCSRequestMessage" ) :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
DBCSRequestMessage const msg( ri );
handleCSRequest( msg );
break;
}
}
}
void Loader::handleCSRequest( const DBCSRequestMessage & msg )
{
DEBUG_REPORT_LOG( true, ( "Message:%s\n", msg.getCommand().c_str() ) );
if( msg.getCommand() == "get_characters" )
// TODO : maybe constexpr this one sometime
if( == "get_characters" )
{
handleCSGetCharacters( msg );
}
@@ -65,6 +65,8 @@
#include "sharedNetworkMessages/GenericValueTypeMessage.h"
#include "sharedNetworkMessages/ObjectChannelMessages.h"
#include "sharedFoundation/CrcConstexpr.hpp"
#include <utility>
#include <algorithm>
@@ -650,243 +652,282 @@ void Persister::receiveMessage(const MessageDispatch::Emitter & source, const Me
if (gameConnection)
sourceGameServer = gameConnection->getProcessId();
if(message.isType("FlagObjectForDeleteMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
FlagObjectForDeleteMessage m(ri);
handleDeleteMessage(sourceGameServer, m.getId(),m.getReason(),m.getImmediate(),m.getDemandLoadedContainer(),m.getCascadeReason());
}
else if(message.isType("CreateObjectByCrcMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
CreateObjectByCrcMessage t(ri);
// DEBUG_REPORT_LOG(true,("Got CreateObjectByCrcMessage for %s\n", t.getId().getValueString().c_str()));
newObject(sourceGameServer, t.getId(), t.getCrc(), t.getObjectType(), t.getContainer());
}
else if(message.isType("EndBaselinesMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
EndBaselinesMessage t(ri);
endBaselines(t.getId(),sourceGameServer);
}
else if(message.isType("DeltasMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
DeltasMessage msg(ri);
handleDeltasMessage(sourceGameServer,msg);
}
else if(message.isType("BaselinesMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
BaselinesMessage msg(ri);
handleBaselinesMessage(sourceGameServer,msg);
}
else if(message.isType("UpdateObjectPositionMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
UpdateObjectPositionMessage msg(ri);
getSnapshotForObject(msg.getNetworkId(), sourceGameServer).handleUpdateObjectPosition(msg);
}
else if(message.isType("AddCharacterMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
AddCharacterMessage ocm(ri);
DEBUG_REPORT_LOG(true, ("Got AddCharacterMessage for object %s.\n",ocm.getObjectId().getValueString().c_str()));
addCharacter(ocm.getAccountNumber(), ocm.getObjectId(), ocm.getProcess(), ocm.getName(), ocm.getSpecial());
}
else if (message.isType("UnloadObjectMessage"))
{
// TODO: keep track of when it's done saving so we know when we can reload it
}
else if (message.isType("MessageToMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
MessageToMessage m(ri);
handleMessageTo (sourceGameServer, m.getData());
}
else if (message.isType("MessageToAckMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
MessageToAckMessage m(ri);
handleMessageToAck (sourceGameServer, m.getMessageId());
}
else if (message.isType("ServerDeleteCharacterMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ServerDeleteCharacterMessage m(ri);
deleteCharacter(m.getStationId(), m.getCharacterId());
}
else if (message.isType("RenameCharacterMessageEx"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
RenameCharacterMessageEx msg(ri);
renameCharacter(sourceGameServer, static_cast<int8>(msg.getRenameCharacterMessageSource()), msg.getStationId(), msg.getCharacterId(), msg.getNewName(), msg.getOldName(), msg.getLastNameChangeOnly(), msg.getRequestedBy(), nullptr);
}
else if (message.isType("UnloadedPlayerMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
UnloadedPlayerMessage msg(ri);
unloadCharacter(msg.getPlayerId(),sourceGameServer);
}
else if (message.isType("MoveToPlayer"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, NetworkId> > msg(ri);
moveToPlayer(sourceGameServer, msg.getValue().first, msg.getValue().second, -1, false, false);
}
else if (message.isType("MoveToPlayerBankMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, NetworkId> > msg(ri);
moveToPlayer(sourceGameServer, msg.getValue().first, msg.getValue().second, -1, true, false);
}
else if (message.isType("MoveToPlayerDatapadMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<std::pair<NetworkId, NetworkId>, int> > msg(ri);
moveToPlayer(sourceGameServer, msg.getValue().first.first, msg.getValue().first.second, msg.getValue().second, false, true);
}
else if (message.isType("FixLoadWith"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<std::pair<NetworkId, NetworkId>, int> > msg(ri);
fixLoadWith(sourceGameServer, msg.getValue().first.first, msg.getValue().first.second, msg.getValue().second);
}
else if (message.isType("ClusterShutdownMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<bool> msg(ri);
m_clusterShuttingDown = msg.getValue();
}
else if (message.isType("StartSaveMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<NetworkId > msg(ri);
userRequestedSave(sourceGameServer, msg.getValue());
}
else if (message.isType("RestoreHouseMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, std::string> > msg(ri);
restoreHouse(msg.getValue().first, msg.getValue().second);
}
else if (message.isType("RestoreCharacterMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, std::string> > msg(ri);
restoreCharacter(msg.getValue().first, msg.getValue().second);
}
else if (message.isType("UndeleteItemMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, std::string> > msg(ri);
LOG("CustomerService", ("undeleteItem %s request from %s", msg.getValue().first.getValueString().c_str(), msg.getValue().second.c_str()));
undeleteItem(msg.getValue().first, msg.getValue().second);
}
else if (message.isType("MoveToPlayerMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<std::pair<NetworkId, NetworkId>, std::string> > msg(ri);
LOG("CustomerService", ("moveToPlayer %s, %s request from %s", msg.getValue().first.first.getValueString().c_str(), msg.getValue().first.second.getValueString().c_str(), msg.getValue().second.c_str()));
moveToPlayer(msg.getValue().first.first, msg.getValue().first.second, msg.getValue().second);
}
else if (message.isType("CentralRequestSave"))
{
centralRequestedSave();
}
else if (message.isType("PlanetRequestSave"))
{
planetRequestedSave();
}
else if (message.isType("AddResourceTypeMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
AddResourceTypeMessage msg(ri);
handleAddResourceTypeMessage(sourceGameServer, msg);
}
else if (message.isType("BountyHunterTargetMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
BountyHunterTargetMessage msg(ri);
getSnapshotForServer(sourceGameServer).handleBountyHunterTargetMessage(msg);
}
else if ( (message.isType("CMCreateAuctionMessage")) ||
(message.isType("CMCreateAuctionBidMessage")) ||
(message.isType("CMCreateLocationMessage")) ||
(message.isType("CMUpdateAuctionMessage")) ||
(message.isType("CMUpdateLocationMessage")) ||
(message.isType("CMDeleteAuctionMessage")) ||
(message.isType("CMDeleteLocationMessage")) )
{
const CommoditiesServerConnection * commConnection = dynamic_cast<const CommoditiesServerConnection *>(&source);
uint32 commServerId = 0;
if (commConnection)
commServerId = commConnection->getProcessId();
getCommoditiesSnapshot(commServerId).handleCommoditiesDataMessage(message);
}
else if (message.isType("LoadCommodities"))
{
if (m_commoditiesSnapshot)
const uint32 messageType = message.getType();
switch(messageType) {
case constcrc("FlagObjectForDeleteMessage") :
{
m_commoditiesSnapshot->startLoadAfterSaveComplete();
if (!isSaveInProgress())
m_startSaveWhenPossible = true;
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
FlagObjectForDeleteMessage m(ri);
handleDeleteMessage(sourceGameServer, m.getId(),m.getReason(),m.getImmediate(),m.getDemandLoadedContainer(),m.getCascadeReason());
break;
}
else
case constcrc("CreateObjectByCrcMessage") :
{
startLoadCommodities();
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
CreateObjectByCrcMessage t(ri);
// DEBUG_REPORT_LOG(true,("Got CreateObjectByCrcMessage for %s\n", t.getId().getValueString().c_str()));
newObject(sourceGameServer, t.getId(), t.getCrc(), t.getObjectType(), t.getContainer());
break;
}
case constcrc("EndBaselinesMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
EndBaselinesMessage t(ri);
endBaselines(t.getId(),sourceGameServer);
break;
}
case constcrc("DeltasMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
DeltasMessage msg(ri);
handleDeltasMessage(sourceGameServer,msg);
break;
}
case constcrc("BaselinesMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
BaselinesMessage msg(ri);
handleBaselinesMessage(sourceGameServer,msg);
break;
}
case constcrc("UpdateObjectPositionMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
UpdateObjectPositionMessage msg(ri);
getSnapshotForObject(msg.getNetworkId(), sourceGameServer).handleUpdateObjectPosition(msg);
break;
}
case constcrc("AddCharacterMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
AddCharacterMessage ocm(ri);
DEBUG_REPORT_LOG(true, ("Got AddCharacterMessage for object %s.\n",ocm.getObjectId().getValueString().c_str()));
addCharacter(ocm.getAccountNumber(), ocm.getObjectId(), ocm.getProcess(), ocm.getName(), ocm.getSpecial());
break;
}
case constcrc("UnloadObjectMessage") :
{
// TODO: keep track of when it's done saving so we know when we can reload it
break;
}
case constcrc("MessageToMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
MessageToMessage m(ri);
handleMessageTo (sourceGameServer, m.getData());
break;
}
case constcrc("MessageToAckMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
MessageToAckMessage m(ri);
handleMessageToAck (sourceGameServer, m.getMessageId());
break;
}
case constcrc("ServerDeleteCharacterMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
ServerDeleteCharacterMessage m(ri);
deleteCharacter(m.getStationId(), m.getCharacterId());
break;
}
case constcrc("RenameCharacterMessageEx") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
RenameCharacterMessageEx msg(ri);
renameCharacter(sourceGameServer, static_cast<int8>(msg.getRenameCharacterMessageSource()), msg.getStationId(), msg.getCharacterId(), msg.getNewName(), msg.getOldName(), msg.getLastNameChangeOnly(), msg.getRequestedBy(), nullptr);
break;
}
case constcrc("UnloadedPlayerMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
UnloadedPlayerMessage msg(ri);
unloadCharacter(msg.getPlayerId(),sourceGameServer);
break;
}
case constcrc("MoveToPlayer") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, NetworkId> > msg(ri);
moveToPlayer(sourceGameServer, msg.getValue().first, msg.getValue().second, -1, false, false);
break;
}
case constcrc("MoveToPlayerBankMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, NetworkId> > msg(ri);
moveToPlayer(sourceGameServer, msg.getValue().first, msg.getValue().second, -1, true, false);
break;
}
case constcrc("MoveToPlayerDatapadMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<std::pair<NetworkId, NetworkId>, int> > msg(ri);
moveToPlayer(sourceGameServer, msg.getValue().first.first, msg.getValue().first.second, msg.getValue().second, false, true);
break;
}
case constcrc("FixLoadWith") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<std::pair<NetworkId, NetworkId>, int> > msg(ri);
fixLoadWith(sourceGameServer, msg.getValue().first.first, msg.getValue().first.second, msg.getValue().second);
break;
}
case constcrc("ClusterShutdownMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<bool> msg(ri);
m_clusterShuttingDown = msg.getValue();
break;
}
case constcrc("StartSaveMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<NetworkId > msg(ri);
userRequestedSave(sourceGameServer, msg.getValue());
break;
}
case constcrc("RestoreHouseMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, std::string> > msg(ri);
restoreHouse(msg.getValue().first, msg.getValue().second);
break;
}
case constcrc("RestoreCharacterMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, std::string> > msg(ri);
restoreCharacter(msg.getValue().first, msg.getValue().second);
break;
}
case constcrc("UndeleteItemMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<NetworkId, std::string> > msg(ri);
LOG("CustomerService", ("undeleteItem %s request from %s", msg.getValue().first.getValueString().c_str(), msg.getValue().second.c_str()));
undeleteItem(msg.getValue().first, msg.getValue().second);
break;
}
case constcrc("MoveToPlayerMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<std::pair<NetworkId, NetworkId>, std::string> > msg(ri);
LOG("CustomerService", ("moveToPlayer %s, %s request from %s", msg.getValue().first.first.getValueString().c_str(), msg.getValue().first.second.getValueString().c_str(), msg.getValue().second.c_str()));
moveToPlayer(msg.getValue().first.first, msg.getValue().first.second, msg.getValue().second);
break;
}
case constcrc("CentralRequestSave") :
{
centralRequestedSave();
break;
}
case constcrc("PlanetRequestSave") :
{
planetRequestedSave();
break;
}
case constcrc("AddResourceTypeMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
AddResourceTypeMessage msg(ri);
handleAddResourceTypeMessage(sourceGameServer, msg);
break;
}
case constcrc("BountyHunterTargetMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
BountyHunterTargetMessage msg(ri);
getSnapshotForServer(sourceGameServer).handleBountyHunterTargetMessage(msg);
break;
}
case constcrc("CMCreateAuctionMessage") :
case constcrc("CMCreateAuctionBidMessage") :
case constcrc("CMCreateLocationMessage") :
case constcrc("CMUpdateAuctionMessage") :
case constcrc("CMUpdateLocationMessage") :
case constcrc("CMDeleteAuctionMessage") :
case constcrc("CMDeleteLocationMessage") :
{
const CommoditiesServerConnection * commConnection = dynamic_cast<const CommoditiesServerConnection *>(&source);
uint32 commServerId = 0;
if (commConnection)
commServerId = commConnection->getProcessId();
getCommoditiesSnapshot(commServerId).handleCommoditiesDataMessage(message);
break;
}
case constcrc("LoadCommodities") :
{
if (m_commoditiesSnapshot)
{
m_commoditiesSnapshot->startLoadAfterSaveComplete();
if (!isSaveInProgress())
m_startSaveWhenPossible = true;
}
else
{
startLoadCommodities();
}
break;
}
case constcrc("GetMoneyFromOfflineObjectMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GetMoneyFromOfflineObjectMessage msg(ri);
getMoneyFromOfflineObject(sourceGameServer, msg.getSourceObject(), msg.getAmount(), msg.getReplyTo(), msg.getSuccessCallback(), msg.getFailCallback(), msg.getPackedDictionary());
break;
}
case constcrc("PurgeCompleteMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<StationId> msg(ri);
handlePurgeCompleteMessage(sourceGameServer, msg.getValue());
break;
}
case constcrc("DBCSRequestMessage" ) :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
DBCSRequestMessage const msg( ri );
handleCSRequest( msg );
break;
}
case constcrc("UndeleteItemForCsMessage") :
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<std::pair<std::pair<NetworkId, NetworkId>, std::string>, bool> > undeleteRequest(ri);
handleCsUndelete(undeleteRequest.getValue().first.first.first,
undeleteRequest.getValue().first.first.second,
undeleteRequest.getValue().first.second,
undeleteRequest.getValue().second);
break;
}
default :
{
DEBUG_REPORT_LOG(true,("Unrecognized message recieved by Persister.\n"));
break;
}
}
else if (message.isType("GetMoneyFromOfflineObjectMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GetMoneyFromOfflineObjectMessage msg(ri);
getMoneyFromOfflineObject(sourceGameServer, msg.getSourceObject(), msg.getAmount(), msg.getReplyTo(), msg.getSuccessCallback(), msg.getFailCallback(), msg.getPackedDictionary());
}
else if (message.isType("PurgeCompleteMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<StationId> msg(ri);
handlePurgeCompleteMessage(sourceGameServer, msg.getValue());
}
else if( message.isType("DBCSRequestMessage" ) )
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
DBCSRequestMessage const msg( ri );
handleCSRequest( msg );
}
else if (message.isType("UndeleteItemForCsMessage"))
{
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
GenericValueTypeMessage<std::pair<std::pair<std::pair<NetworkId, NetworkId>, std::string>, bool> > undeleteRequest(ri);
handleCsUndelete(undeleteRequest.getValue().first.first.first,
undeleteRequest.getValue().first.first.second,
undeleteRequest.getValue().first.second,
undeleteRequest.getValue().second);
}
else
{
DEBUG_REPORT_LOG(true,("Unrecognized message recieved by Persister.\n"));
}
}