From 86184acc454c7032b67ac6d3ac915612501c8392 Mon Sep 17 00:00:00 2001 From: DarthArgus Date: Fri, 30 Sep 2016 10:12:20 -0500 Subject: [PATCH] and another one gone --- .../src/shared/GameServerConnection.cpp | 578 ++++++++++-------- 1 file changed, 311 insertions(+), 267 deletions(-) diff --git a/engine/server/application/CentralServer/src/shared/GameServerConnection.cpp b/engine/server/application/CentralServer/src/shared/GameServerConnection.cpp index f3194b97..f2cb16fd 100755 --- a/engine/server/application/CentralServer/src/shared/GameServerConnection.cpp +++ b/engine/server/application/CentralServer/src/shared/GameServerConnection.cpp @@ -36,6 +36,8 @@ #include "sharedNetworkMessages/GenericValueTypeMessage.h" #include "unicodeArchive/UnicodeArchive.h" +#include "sharedFoundation/CrcConstexpr.hpp" + // ====================================================================== GameServerConnection::GameServerConnection(UdpConnectionMT *u, TcpClient *t) : @@ -88,289 +90,331 @@ void GameServerConnection::onReceive(Archive::ByteStream const &message) Archive::ReadIterator ri = message.begin(); GameNetworkMessage const m(ri); ri = message.begin(); + + const uint32 messageType = m.getType(); - if (m.isType("CentralGameServerConnect")) - { - CentralGameServerConnect const c(ri); - setClientServiceAddress(c.getClientServiceAddress()); - setClientServicePort(c.getClientServicePort()); - setGameServiceAddress(c.getGameServiceAddress()); - setGameServicePort(c.getGameServicePort()); - setSceneId(c.getVolumeName()); - } - else if (m.isType("GameServerUniverseLoadedMessage")) - { - m_ready = true; - - if (ConfigCentralServer::getGameServerConnectionPendingAllocatedSizeLimit() != 0) - setTcpClientPendingSendAllocatedSizeLimit(0); - } - else if (m.isType("TaskSpawnProcess")) - { - TaskSpawnProcess const spawn(ri); - CentralServer::getInstance().sendTaskMessage(spawn); - } - else if (m.isType("ConGenericMessage")) - { - ConGenericMessage const con(ri); - ConsoleConnection::onCommandComplete(con.getMsg(), static_cast(con.getMsgId())); - } - else if (m.isType("TransferReplyNameValidation")) - { - GenericValueTypeMessage > const replyNameValidation(ri); - - if (replyNameValidation.getValue().second.getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) + switch(messageType) { + constcrc("CentralGameServerConnect") : { - LOG("CustomerService", ("CharacterTransfer: Received TransferReplyNameValidation from GameServer, forwarding to TransferServer : %s", replyNameValidation.getValue().second.toString().c_str())); - CentralServer::getInstance().sendToTransferServer(replyNameValidation); + CentralGameServerConnect const c(ri); + setClientServiceAddress(c.getClientServiceAddress()); + setClientServicePort(c.getClientServicePort()); + setGameServiceAddress(c.getGameServiceAddress()); + setGameServicePort(c.getGameServicePort()); + setSceneId(c.getVolumeName()); + break; } - else + case constcrc("GameServerUniverseLoadedMessage") : { - // pass reply back to the source galaxy for handling, which is to - // either display an error message to the user if the request failed, - // or to start the transfer process if the request succeeds - LOG("CustomerService", ("CharacterTransfer: Received TransferReplyNameValidation from GameServer, forwarding to source galaxy CentralServer : %s", replyNameValidation.getValue().second.toString().c_str())); - CentralServer::getInstance().sendToArbitraryLoginServer(replyNameValidation); + m_ready = true; - // if the request succeeded, also disconnect any clients with a connection to SWG services on this (the target) galaxy - if (replyNameValidation.getValue().second.getIsValidName() && (replyNameValidation.getValue().second.getTransferRequestSource() != TransferRequestMoveValidation::TRS_ingame_freects_command_validate) && (replyNameValidation.getValue().second.getTransferRequestSource() != TransferRequestMoveValidation::TRS_ingame_cts_command_validate)) + if (ConfigCentralServer::getGameServerConnectionPendingAllocatedSizeLimit() != 0) + setTcpClientPendingSendAllocatedSizeLimit(0); + break; + } + case constcrc("TaskSpawnProcess") : + { + TaskSpawnProcess const spawn(ri); + CentralServer::getInstance().sendTaskMessage(spawn); + break; + } + case constcrc("ConGenericMessage") : + { + ConGenericMessage const con(ri); + ConsoleConnection::onCommandComplete(con.getMsg(), static_cast(con.getMsgId())); + break; + } + case constcrc("TransferReplyNameValidation") : + { + GenericValueTypeMessage > const replyNameValidation(ri); + + if (replyNameValidation.getValue().second.getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) { - GenericValueTypeMessage kickSource("TransferKickConnectedClients", replyNameValidation.getValue().second.getSourceStationId()); - GenericValueTypeMessage kickDestination("TransferKickConnectedClients", replyNameValidation.getValue().second.getDestinationStationId()); - CentralServer::getInstance().sendToAllLoginServers(kickSource); - CentralServer::getInstance().sendToAllLoginServers(kickDestination); - CentralServer::getInstance().sendToAllConnectionServers(kickSource, true); - CentralServer::getInstance().sendToAllConnectionServers(kickDestination, true); + LOG("CustomerService", ("CharacterTransfer: Received TransferReplyNameValidation from GameServer, forwarding to TransferServer : %s", replyNameValidation.getValue().second.toString().c_str())); + CentralServer::getInstance().sendToTransferServer(replyNameValidation); } + else + { + // pass reply back to the source galaxy for handling, which is to + // either display an error message to the user if the request failed, + // or to start the transfer process if the request succeeds + LOG("CustomerService", ("CharacterTransfer: Received TransferReplyNameValidation from GameServer, forwarding to source galaxy CentralServer : %s", replyNameValidation.getValue().second.toString().c_str())); + CentralServer::getInstance().sendToArbitraryLoginServer(replyNameValidation); + + // if the request succeeded, also disconnect any clients with a connection to SWG services on this (the target) galaxy + if (replyNameValidation.getValue().second.getIsValidName() && (replyNameValidation.getValue().second.getTransferRequestSource() != TransferRequestMoveValidation::TRS_ingame_freects_command_validate) && (replyNameValidation.getValue().second.getTransferRequestSource() != TransferRequestMoveValidation::TRS_ingame_cts_command_validate)) + { + GenericValueTypeMessage kickSource("TransferKickConnectedClients", replyNameValidation.getValue().second.getSourceStationId()); + GenericValueTypeMessage kickDestination("TransferKickConnectedClients", replyNameValidation.getValue().second.getDestinationStationId()); + CentralServer::getInstance().sendToAllLoginServers(kickSource); + CentralServer::getInstance().sendToAllLoginServers(kickDestination); + CentralServer::getInstance().sendToAllConnectionServers(kickSource, true); + CentralServer::getInstance().sendToAllConnectionServers(kickDestination, true); + } + } + break; } - } - else if (m.isType("TransferReplyCharacterList")) - { - // forward the message to the TransferServer - TransferReplyCharacterList const reply(ri); - CentralServer::getInstance().sendToTransferServer(reply); - } - else if (m.isType("TransferRenameCharacterReplyFromDatabase")) - { - GenericValueTypeMessage const renameReplyFromDatabase(ri); - LOG("CustomerService", ("CharacterTransfer: Received TransferRenameCharacterReplyFromDatabase %s", renameReplyFromDatabase.getValue().toString().c_str())); - if (renameReplyFromDatabase.getValue().getIsValidName()) + case constcrc("TransferReplyCharacterList") : { - // forward to LoginServer - LOG("CustomerService", ("CharacterTransfer: Sending TransferRenameCharacterInLoginDatabase request to Login Database")); - GenericValueTypeMessage const request("TransferRenameCharacterInLoginDatabase", renameReplyFromDatabase.getValue()); - CentralServer::getInstance().sendToArbitraryLoginServer(request); + // forward the message to the TransferServer + TransferReplyCharacterList const reply(ri); + CentralServer::getInstance().sendToTransferServer(reply); + break; } - else + case constcrc("TransferRenameCharacterReplyFromDatabase") : { - // send failure back to TransferServer - LOG("CustomerService", ("CharacterTransfer: Character rename request failed in the game database. %s", renameReplyFromDatabase.getValue().toString().c_str())); - GenericValueTypeMessage const transferRenameCharacterReply("TransferRenameCharacterReply", renameReplyFromDatabase.getValue()); + GenericValueTypeMessage const renameReplyFromDatabase(ri); + LOG("CustomerService", ("CharacterTransfer: Received TransferRenameCharacterReplyFromDatabase %s", renameReplyFromDatabase.getValue().toString().c_str())); + if (renameReplyFromDatabase.getValue().getIsValidName()) + { + // forward to LoginServer + LOG("CustomerService", ("CharacterTransfer: Sending TransferRenameCharacterInLoginDatabase request to Login Database")); + GenericValueTypeMessage const request("TransferRenameCharacterInLoginDatabase", renameReplyFromDatabase.getValue()); + CentralServer::getInstance().sendToArbitraryLoginServer(request); + } + else + { + // send failure back to TransferServer + LOG("CustomerService", ("CharacterTransfer: Character rename request failed in the game database. %s", renameReplyFromDatabase.getValue().toString().c_str())); + GenericValueTypeMessage const transferRenameCharacterReply("TransferRenameCharacterReply", renameReplyFromDatabase.getValue()); + } + break; } - } - else if (m.isType("LocateObject")) - { - GenericValueTypeMessage > > const msg(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); - } - else if (m.isType("LocateObjectByTemplateName")) - { - GenericValueTypeMessage > > const msg(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); - } - else if (m.isType("LocateObjectResponseMessage")) - { - LocateObjectResponseMessage const msg(ri); - CentralServer::getInstance().sendToGameServer(msg.getResponsePid(), msg, true); - } - else if (m.isType("LocatePlayerByPartialName")) - { - GenericValueTypeMessage > > const msg(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); - } - else if (m.isType("LocateWarden")) - { - GenericValueTypeMessage > const msg(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); - } - else if (m.isType("LocateCreatureByCreatureName")) - { - GenericValueTypeMessage > > const msg(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); - } - else if (m.isType("LocatePlayerResponseMessage")) - { - LocatePlayerResponseMessage const msg(ri); - CentralServer::getInstance().sendToGameServer(msg.getResponsePid(), msg, true); - } - else if (m.isType("LSBOIReq")) - { - GenericValueTypeMessage, std::pair, NetworkId> > > const locateStructureByOwnerIdReq(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(locateStructureByOwnerIdReq, true); - } - else if (m.isType("LSBOIRsp")) - { - GenericValueTypeMessage, std::vector > > const locateStructureByOwnerIdRsp(ri); - CentralServer::getInstance().sendToGameServer(locateStructureByOwnerIdRsp.getValue().first.first, locateStructureByOwnerIdRsp, true); - } - else if (m.isType("ReportSystemClockTime")) - { - GenericValueTypeMessage > const msg(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); - } - else if (m.isType("ReportSystemClockTimeResponse")) - { - GenericValueTypeMessage > > const msg(ri); - CentralServer::getInstance().sendToGameServer(msg.getValue().first, msg, true); - } - else if (m.isType("ReportPlanetaryTime")) - { - GenericValueTypeMessage > const msg(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); - } - else if (m.isType("ReportPlanetaryTimeResponse")) - { - GenericValueTypeMessage > > const msg(ri); - CentralServer::getInstance().sendToGameServer(msg.getValue().first, msg, true); - } - else if (m.isType("TeleportToMessage")) - { - TeleportToMessage const msg(ri); - CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); - } - else if (m.isType("LoginToggleCompletedTutorial")) - { - GenericValueTypeMessage< std::pair > const msg(ri); - CentralServer::getInstance().sendToArbitraryLoginServer(msg); - } - else if( m.isType( "GameServerCSResponse" ) ) - { - GameServerCSResponseMessage const msg( ri ); - CSToolResponse rmsg( msg.getAccountId(), - msg.getResponse(), - msg.getToolId() ); - CentralServer::getInstance().sendToLoginServer( msg.getLoginServerID(), rmsg ); - } - else if( m.isType( "GetCharactersForAccountCSReplyMsg" ) ) - { - GetCharactersForAccountCSReplyMsg const msg( ri ); - // send repsonse to tool. - char buf[ 256 ]; - snprintf( buf, 255, "Character search for %lu\r\n", msg.getTargetAccountId() ); - std::string response = buf; - response = response + msg.getResponse(); - - CSToolResponse rmsg( msg.getAccountId(), - response, - msg.getToolId() ); - CentralServer::getInstance().sendToLoginServer( msg.getLoginServerId(), rmsg ); - } - else if( m.isType( "GetDeletedItemsReplyMessage" ) ) - { - GetDeletedItemsReplyMessage const msg( ri ); - char buf[ 256 ]; - snprintf( buf, 255, "Deleted items for %s\r\n", msg.getCharacterId().getValueString().c_str() ); - std::string response = buf; - response = response + msg.getResponse(); - CSToolResponse rmsg( msg.getAccountId(), - response, - msg.getToolId() ); - CentralServer::getInstance().sendToLoginServer( msg.getLoginServerId(), rmsg ); - - } - else if( m.isType( "GetCharacterIdReplyMessage" ) ) - { - GetCharacterIdReplyMessage const msg( ri ); - std::string response = "Character id for "; - response = response + msg.getCharacterName() + "\r\n"; - response = response + "character id:" + msg.getCharacterId().getValueString() + "\r\n"; - char buf[ 64 ]; - - snprintf( buf, 64, "%lu", msg.getAccountId() ); - - response = response + "account id:" + buf + "\r\n"; - - CSToolResponse rmsg( msg.getAccountId(), response, msg.getToolId() ); - CentralServer::getInstance().sendToLoginServer( msg.getLoginServerId(), rmsg ); - - } - else if( m.isType( "CSFindAuthObjectReply" ) ) - { - GenericValueTypeMessage< std::pair< unsigned int, bool > > const msg( ri ); - CentralCSHandler::getInstance().handleFindObjectResponse( msg.getValue().first, msg.getValue().second ); - } - else if(m.isType("StructureListMessage")) - { - StructureListMessage msg(ri); - CentralCSHandler::getInstance().handleStructureListResponse(msg); - } - else if (m.isType("SPCharacterProfileMessage")) - { - SPCharacterProfileMessage const msg(ri); - CentralServer::getInstance().sendToStationPlayersCollector(msg); - } - else if (m.isType("OccupyUnlockedSlotReq")) - { - GenericValueTypeMessage, uint32> > const occupyUnlockedSlotReq(ri); - CentralServer::getInstance().sendToArbitraryLoginServer(occupyUnlockedSlotReq); - } - else if (m.isType("VacateUnlockedSlotReq")) - { - GenericValueTypeMessage, uint32> > const vacateUnlockedSlotReq(ri); - CentralServer::getInstance().sendToArbitraryLoginServer(vacateUnlockedSlotReq); + case constcrc("LocateObject") : + { + GenericValueTypeMessage > > const msg(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); + break; + } + case constcrc("LocateObjectByTemplateName") : + { + GenericValueTypeMessage > > const msg(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); + break; + } + case constcrc("LocateObjectResponseMessage") : + { + LocateObjectResponseMessage const msg(ri); + CentralServer::getInstance().sendToGameServer(msg.getResponsePid(), msg, true); + break; + } + case constcrc("LocatePlayerByPartialName") : + { + GenericValueTypeMessage > > const msg(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); + break; + } + case constcrc("LocateWarden") : + { + GenericValueTypeMessage > const msg(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); + break; + } + case constcrc("LocateCreatureByCreatureName") : + { + GenericValueTypeMessage > > const msg(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); + break; + } + case constcrc("LocatePlayerResponseMessage") : + { + LocatePlayerResponseMessage const msg(ri); + CentralServer::getInstance().sendToGameServer(msg.getResponsePid(), msg, true); + break; + } + case constcrc("LSBOIReq") : + { + GenericValueTypeMessage, std::pair, NetworkId> > > const locateStructureByOwnerIdReq(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(locateStructureByOwnerIdReq, true); + break; + } + case constcrc("LSBOIRsp") : + { + GenericValueTypeMessage, std::vector > > const locateStructureByOwnerIdRsp(ri); + CentralServer::getInstance().sendToGameServer(locateStructureByOwnerIdRsp.getValue().first.first, locateStructureByOwnerIdRsp, true); + break; + } + case constcrc("ReportSystemClockTime") : + { + GenericValueTypeMessage > const msg(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); + break; + } + case constcrc("ReportSystemClockTimeResponse") : + { + GenericValueTypeMessage > > const msg(ri); + CentralServer::getInstance().sendToGameServer(msg.getValue().first, msg, true); + break; + } + case constcrc("ReportPlanetaryTime") : + { + GenericValueTypeMessage > const msg(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); + break; + } + case constcrc("ReportPlanetaryTimeResponse") : + { + GenericValueTypeMessage > > const msg(ri); + CentralServer::getInstance().sendToGameServer(msg.getValue().first, msg, true); + break; + } + case constcrc("TeleportToMessage") : + { + TeleportToMessage const msg(ri); + CentralServer::getInstance().sendToAllGameServersExceptDBProcess(msg, true); + break; + } + case constcrc("LoginToggleCompletedTutorial") : + { + GenericValueTypeMessage< std::pair > const msg(ri); + CentralServer::getInstance().sendToArbitraryLoginServer(msg); + break; + } + case constcrc("GameServerCSResponse" ) : + { + GameServerCSResponseMessage const msg( ri ); + CSToolResponse rmsg( msg.getAccountId(), + msg.getResponse(), + msg.getToolId() ); + CentralServer::getInstance().sendToLoginServer( msg.getLoginServerID(), rmsg ); + break; + } + case constcrc("GetCharactersForAccountCSReplyMsg" ) : + { + GetCharactersForAccountCSReplyMsg const msg( ri ); + // send repsonse to tool. + char buf[ 256 ]; + snprintf( buf, 255, "Character search for %lu\r\n", msg.getTargetAccountId() ); + std::string response = buf; + response = response + msg.getResponse(); + + CSToolResponse rmsg( msg.getAccountId(), + response, + msg.getToolId() ); + CentralServer::getInstance().sendToLoginServer( msg.getLoginServerId(), rmsg ); + break; + } + case constcrc("GetDeletedItemsReplyMessage" ) : + { + GetDeletedItemsReplyMessage const msg( ri ); + char buf[ 256 ]; + snprintf( buf, 255, "Deleted items for %s\r\n", msg.getCharacterId().getValueString().c_str() ); + std::string response = buf; + response = response + msg.getResponse(); + CSToolResponse rmsg( msg.getAccountId(), + response, + msg.getToolId() ); + CentralServer::getInstance().sendToLoginServer( msg.getLoginServerId(), rmsg ); + break; + + } + case constcrc("GetCharacterIdReplyMessage" ) : + { + GetCharacterIdReplyMessage const msg( ri ); + std::string response = "Character id for "; + response = response + msg.getCharacterName() + "\r\n"; + response = response + "character id:" + msg.getCharacterId().getValueString() + "\r\n"; + char buf[ 64 ]; + + snprintf( buf, 64, "%lu", msg.getAccountId() ); + + response = response + "account id:" + buf + "\r\n"; + + CSToolResponse rmsg( msg.getAccountId(), response, msg.getToolId() ); + CentralServer::getInstance().sendToLoginServer( msg.getLoginServerId(), rmsg ); + break; + + } + case constcrc("CSFindAuthObjectReply" ) : + { + GenericValueTypeMessage< std::pair< unsigned int, bool > > const msg( ri ); + CentralCSHandler::getInstance().handleFindObjectResponse( msg.getValue().first, msg.getValue().second ); + break; + } + case constcrc("StructureListMessage") : + { + StructureListMessage msg(ri); + CentralCSHandler::getInstance().handleStructureListResponse(msg); + break; + } + case constcrc("SPCharacterProfileMessage") : + { + SPCharacterProfileMessage const msg(ri); + CentralServer::getInstance().sendToStationPlayersCollector(msg); + break; + } + case constcrc("OccupyUnlockedSlotReq") : + { + GenericValueTypeMessage, uint32> > const occupyUnlockedSlotReq(ri); + CentralServer::getInstance().sendToArbitraryLoginServer(occupyUnlockedSlotReq); + break; + } + case constcrc("VacateUnlockedSlotReq") : + { + GenericValueTypeMessage, uint32> > const vacateUnlockedSlotReq(ri); + CentralServer::getInstance().sendToArbitraryLoginServer(vacateUnlockedSlotReq); - // to safeguard against any sort of timing exploit to create another normal - // slot character while this one is being converted to normal, thus allowing - // the account to have more normal slot characters on this cluster than is - // allowed, set the "creating characters too rapidly" flag to prevent any - // character creation on the account on this cluster for a while - CharacterCreationTracker::getInstance().setFastCreationLock(vacateUnlockedSlotReq.getValue().first.first); - } - else if (m.isType("SwapUnlockedSlotReq")) - { - GenericValueTypeMessage, std::pair > > const swapUnlockedSlotReq(ri); - CentralServer::getInstance().sendToArbitraryLoginServer(swapUnlockedSlotReq); - } - else if (m.isType("FeatureIdTransactionRequest")) - { - FeatureIdTransactionRequest const fitr(ri); - CentralServer::getInstance().sendToArbitraryLoginServer(fitr); - } - else if (m.isType("FeatureIdTransactionSyncUpdate")) - { - FeatureIdTransactionSyncUpdate const fitsu(ri); - CentralServer::getInstance().sendToArbitraryLoginServer(fitsu); - } - else if (m.isType("AllCluserGlobalChannel")) - { - typedef std::pair, bool> PayloadType; - GenericValueTypeMessage msg(ri); + // to safeguard against any sort of timing exploit to create another normal + // slot character while this one is being converted to normal, thus allowing + // the account to have more normal slot characters on this cluster than is + // allowed, set the "creating characters too rapidly" flag to prevent any + // character creation on the account on this cluster for a while + CharacterCreationTracker::getInstance().setFastCreationLock(vacateUnlockedSlotReq.getValue().first.first); + break; + } + case constcrc("SwapUnlockedSlotReq") : + { + GenericValueTypeMessage, std::pair > > const swapUnlockedSlotReq(ri); + CentralServer::getInstance().sendToArbitraryLoginServer(swapUnlockedSlotReq); + break; + } + case constcrc("FeatureIdTransactionRequest") : + { + FeatureIdTransactionRequest const fitr(ri); + CentralServer::getInstance().sendToArbitraryLoginServer(fitr); + break; + } + case constcrc("FeatureIdTransactionSyncUpdate") : + { + FeatureIdTransactionSyncUpdate const fitsu(ri); + CentralServer::getInstance().sendToArbitraryLoginServer(fitsu); + break; + } + case constcrc("AllCluserGlobalChannel") : + { + typedef std::pair, bool> PayloadType; + GenericValueTypeMessage msg(ri); - PayloadType const & payload = msg.getValue(); - std::string const & channelName = payload.first.first; - std::string const & messageText = payload.first.second; - bool const & isRemove = payload.second; + PayloadType const & payload = msg.getValue(); + std::string const & channelName = payload.first.first; + std::string const & messageText = payload.first.second; + bool const & isRemove = payload.second; - LOG("CustomerService", ("BroadcastVoiceChannel: CentralServer got AllCluserGlobalChannel from GameServer, sending to LoginServer chan(%s) text(%s) remove(%d)", - channelName.c_str(), messageText.c_str(), (isRemove?1:0) )); + LOG("CustomerService", ("BroadcastVoiceChannel: CentralServer got AllCluserGlobalChannel from GameServer, sending to LoginServer chan(%s) text(%s) remove(%d)", + channelName.c_str(), messageText.c_str(), (isRemove?1:0) )); - CentralServer::getInstance().sendToArbitraryLoginServer(msg); - } - else if (m.isType("TransferRequestMoveValidation")) - { - TransferRequestMoveValidation const request(ri); - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(request)); - LOG("CustomerService", ("CharacterTransfer: Received TransferRequestMoveValidation from GameServer (%u) : [%u, %s, %s (%s)] to [%u, %s, %s]. Forwarding request to LoginServer.", request.getTrack(), request.getSourceStationId(), request.getSourceGalaxy().c_str(), request.getSourceCharacter().c_str(), request.getSourceCharacterId().getValueString().c_str(), request.getDestinationStationId(), request.getDestinationGalaxy().c_str(), request.getDestinationCharacter().c_str())); - } - else if (m.isType("GcwScoreStatRaw")) - { - GenericValueTypeMessage >, std::map > > > > const msg(ri); - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(msg)); - } - else if (m.isType("GcwScoreStatPct")) - { - GenericValueTypeMessage, std::map > > > const msg(ri); - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(msg)); + CentralServer::getInstance().sendToArbitraryLoginServer(msg); + break; + } + case constcrc("TransferRequestMoveValidation") : + { + TransferRequestMoveValidation const request(ri); + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(request)); + LOG("CustomerService", ("CharacterTransfer: Received TransferRequestMoveValidation from GameServer (%u) : [%u, %s, %s (%s)] to [%u, %s, %s]. Forwarding request to LoginServer.", request.getTrack(), request.getSourceStationId(), request.getSourceGalaxy().c_str(), request.getSourceCharacter().c_str(), request.getSourceCharacterId().getValueString().c_str(), request.getDestinationStationId(), request.getDestinationGalaxy().c_str(), request.getDestinationCharacter().c_str())); + break; + } + case constcrc("GcwScoreStatRaw") : + { + GenericValueTypeMessage >, std::map > > > > const msg(ri); + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(msg)); + break; + } + case constcrc("GcwScoreStatPct") : + { + GenericValueTypeMessage, std::map > > > const msg(ri); + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(msg)); + break; + } } ServerConnection::onReceive(message);