diff --git a/engine/server/application/CentralServer/src/shared/PlanetManager.cpp b/engine/server/application/CentralServer/src/shared/PlanetManager.cpp index 33d47cbd..27e0b398 100755 --- a/engine/server/application/CentralServer/src/shared/PlanetManager.cpp +++ b/engine/server/application/CentralServer/src/shared/PlanetManager.cpp @@ -17,6 +17,8 @@ #include "serverNetworkMessages/TaskSpawnProcess.h" #include "sharedNetwork/NetworkHandler.h" +#include "sharedFoundation/CrcConstexpr.hpp" + // ====================================================================== PlanetManager::PlanetRec::PlanetRec() : @@ -85,48 +87,55 @@ void PlanetManager::addGameServerForScene(const std::string &sceneId, GameServer void PlanetManager::receiveMessage(const MessageDispatch::Emitter &source , const MessageDispatch::MessageBase & message) { - if(message.isType("PlanetObjectIdMessage")) //@todo: Is this message actually used anymore? - { - Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); - PlanetObjectIdMessage msg(ri); - - // Message identifies the PlanetObject that belongs to a particular planet - ServerListType::iterator i=m_servers.find(msg.getSceneId()); - if (i==m_servers.end()) + const uint32 messageType = message.getType(); + + switch (messageType) { + case constcrc("PlanetObjectIdMessage") : //@todo: Is this message actually used anymore? { - WARNING_STRICT_FATAL(true,("Got unexpected PlanetObjectIdMessage for %s.\n",msg.getSceneId().c_str())); - return; - } + Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); + PlanetObjectIdMessage msg(ri); - (*i).second.m_planetObjectId=msg.getPlanetObject(); - - // Not needed because all UniverseObjects are proxied. -// CentralServer::getInstance().proxyOnAllServersForScene(msg.getPlanetObject(),msg.getSceneId()); - } - else if(message.isType("PlanetServerConnectionClosed")) - { - const PlanetServerConnection * c = static_cast(&source); //lint !e826 Suspiscious pointer-to-pointer conversion (area too small) - ServerListType::iterator i = m_servers.begin(); - for (; i != m_servers.end(); ++i) - { - if (i->second.m_connection == c) + // Message identifies the PlanetObject that belongs to a particular planet + ServerListType::iterator i=m_servers.find(msg.getSceneId()); + if (i==m_servers.end()) { - m_servers.erase(i); - break; + WARNING_STRICT_FATAL(true,("Got unexpected PlanetObjectIdMessage for %s.\n",msg.getSceneId().c_str())); + return; } - } - if (ConfigCentralServer::getRequestDbSaveOnPlanetServerCrash()) + (*i).second.m_planetObjectId=msg.getPlanetObject(); + + // Not needed because all UniverseObjects are proxied. + // CentralServer::getInstance().proxyOnAllServersForScene(msg.getPlanetObject(),msg.getSceneId()); + break; + } + case constcrc("PlanetServerConnectionClosed") : { - GameNetworkMessage const msg("CentralRequestSave"); - CentralServer::getInstance().sendToDBProcess(msg, true); - } + const PlanetServerConnection * c = static_cast(&source); //lint !e826 Suspiscious pointer-to-pointer conversion (area too small) + ServerListType::iterator i = m_servers.begin(); + for (; i != m_servers.end(); ++i) + { + if (i->second.m_connection == c) + { + m_servers.erase(i); + break; + } + } - CentralServer::getInstance().startPlanetServer(CentralServer::getInstance().getHostForScene(c->getSceneId()), c->getSceneId(), ConfigCentralServer::getPlanetServerRestartDelayTimeSeconds()); - } - else - { - WARNING_STRICT_FATAL(true,("Planet Manager got unexpected message.\n")); + if (ConfigCentralServer::getRequestDbSaveOnPlanetServerCrash()) + { + GameNetworkMessage const msg("CentralRequestSave"); + CentralServer::getInstance().sendToDBProcess(msg, true); + } + + CentralServer::getInstance().startPlanetServer(CentralServer::getInstance().getHostForScene(c->getSceneId()), c->getSceneId(), ConfigCentralServer::getPlanetServerRestartDelayTimeSeconds()); + break; + } + default : + { + WARNING_STRICT_FATAL(true,("Planet Manager got unexpected message.\n")); + break; + } } } diff --git a/engine/server/application/CentralServer/src/shared/StationPlayersCollectorConnection.cpp b/engine/server/application/CentralServer/src/shared/StationPlayersCollectorConnection.cpp index 2a9c88a9..ee5b5a01 100755 --- a/engine/server/application/CentralServer/src/shared/StationPlayersCollectorConnection.cpp +++ b/engine/server/application/CentralServer/src/shared/StationPlayersCollectorConnection.cpp @@ -15,6 +15,8 @@ #include "sharedNetworkMessages/GenericValueTypeMessage.h" #include "StationPlayersCollectorConnection.h" +#include "sharedFoundation/CrcConstexpr.hpp" + //----------------------------------------------------------------------- StationPlayersCollectorConnection::StationPlayersCollectorConnection(const std::string & a, const unsigned short p) : @@ -55,13 +57,19 @@ void StationPlayersCollectorConnection::onReceive(const Archive::ByteStream & me const GameNetworkMessage msg(ri); ri = message.begin(); - if(msg.isType("OnSPCharacterProfileMessage")) - { - } - else if(msg.isType("ConGenericMessage")) + const uint32 messageType = msg.getType(); + + if(messageType == constcrc("ConGenericMessage")) { ConGenericMessage con(ri); ConsoleConnection::onCommandComplete(con.getMsg(), static_cast(con.getMsgId())); + } else { + if(messageType == constcrc("OnSPCharacterProfileMessage")) + { + DEBUG_WARNING(true, ("StationPlayersCollectorConnection called with unimplemented message type OnSPCharacterProfileMessage.")); + } else { + DEBUG_WARNING(true, ("StationPlayersCollectorConnection called with unknown/unused message type.")); + } } } diff --git a/engine/server/application/CentralServer/src/shared/TransferServerConnection.cpp b/engine/server/application/CentralServer/src/shared/TransferServerConnection.cpp index 0c8b7998..ca5ffddc 100755 --- a/engine/server/application/CentralServer/src/shared/TransferServerConnection.cpp +++ b/engine/server/application/CentralServer/src/shared/TransferServerConnection.cpp @@ -24,6 +24,8 @@ #include "sharedNetworkMessages/GenericValueTypeMessage.h" #include "TransferServerConnection.h" +#include "sharedFoundation/CrcConstexpr.hpp" + //----------------------------------------------------------------------- TransferServerConnection::TransferServerConnection(const std::string & a, const unsigned short p) : @@ -65,132 +67,153 @@ void TransferServerConnection::onReceive(const Archive::ByteStream & message) Archive::ReadIterator ri = message.begin(); const GameNetworkMessage msg(ri); ri = message.begin(); + + const uint32 messageType = msg.getType(); - if(msg.isType("UploadCharacterMessage")) - { - const UploadCharacterMessage ucm(ri); - CentralServer::getInstance().sendToGameServer(ucm.getFromGameServerId(), ucm, true); - LOG("TransferServerConnection", ("Received character data for SUID %lu for character object %s on game server %d", ucm.getStationId(), ucm.getFromCharacterId().getValueString().c_str(), ucm.getFromGameServerId())); - } - else if(msg.isType("CharacterTransferStatusMessage")) - { - const CharacterTransferStatusMessage ctsm(ri); - CentralServer::getInstance().sendToGameServer(ctsm.getGameServerId(), ctsm, true); - } - else if(msg.isType("TransferRequestCharacterList")) - { - // simply forward the request to any available login server - const GenericValueTypeMessage request(ri); - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(request)); - } - else if(msg.isType("TransferRequestMoveValidation")) - { - const TransferRequestMoveValidation request(ri); - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(request)); - LOG("CustomerService", ("CharacterTransfer: Received TransferRequestMoveValidation : %s on %s to %s on %s. Forwarding request to LoginServer.", request.getSourceCharacter().c_str(), request.getSourceGalaxy().c_str(), request.getDestinationCharacter().c_str(), request.getDestinationGalaxy().c_str())); - } - else if(msg.isType("TransferRequestKickConnectedClients")) - { - GenericValueTypeMessage > const request(ri); - // disconnect any clients with a connection to SWG services - GenericValueTypeMessage kickSource("TransferKickConnectedClients", request.getValue().first); - GenericValueTypeMessage kickDestination("TransferKickConnectedClients", request.getValue().second); - CentralServer::getInstance().sendToAllLoginServers(kickSource); - CentralServer::getInstance().sendToAllLoginServers(kickDestination); - CentralServer::getInstance().sendToAllConnectionServers(kickSource, true); - CentralServer::getInstance().sendToAllConnectionServers(kickDestination, true); - } - else if(msg.isType("TransferGetCharacterDataFromLoginServer")) - { - const GenericValueTypeMessage getCharacterData(ri); - - // The transfer server has received a move request. The request doesn't - // contain the source id of the character, character's container or scene - // information. The LoginServer can retrieve the character ID for the - // source station id + character name contained in character data. - // Forward the request to the login server. It will respond and the - // message can be routed back to the transfer server for further - // processing - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(getCharacterData)); - LOG("CustomerService", ("CharacterTransfer: ***CentralServer: received TransferGetCharacterDataFromLoginServer : %s)", getCharacterData.getValue().toString().c_str())); - } - else if(msg.isType("TransferGetLoginLocationData")) - { - GenericValueTypeMessage getLoginData(ri); - CentralServer::getInstance().sendToDBProcess(getLoginData, true); - LOG("CustomerService", ("CharacterTransfer: ***CentralServer: Received TransferGetLoginLocationData for %s\n", getLoginData.getValue().getSourceCharacterName().c_str())); - } - else if(msg.isType("TransferLoginCharacterToSourceServer")) - { - const GenericValueTypeMessage loginCharacter(ri); - ConnectionServerConnection * connectionServer = CentralServer::getInstance().getAnyConnectionServer(); - if(connectionServer) + switch(msgType) { + case constcrc("UploadCharacterMessage") : { - connectionServer->send(loginCharacter, true); - LOG("CustomerService", ("CharacterTransfer: ***CentralServer: Received TransferLoginCharacterToSourceServer request from Transfer Server. Sendint request to ConnectionServer : %s\n", loginCharacter.getValue().toString().c_str())); + const UploadCharacterMessage ucm(ri); + CentralServer::getInstance().sendToGameServer(ucm.getFromGameServerId(), ucm, true); + LOG("TransferServerConnection", ("Received character data for SUID %lu for character object %s on game server %d", ucm.getStationId(), ucm.getFromCharacterId().getValueString().c_str(), ucm.getFromGameServerId())); + break; } - else + case constcrc("CharacterTransferStatusMessage") : { - LOG("CustomerService", ("CharacterTransfer: ***CentralServer: Couldn't find a connection server to satisfy the transfer request for %s\n", loginCharacter.getValue().toString().c_str())); + const CharacterTransferStatusMessage ctsm(ri); + CentralServer::getInstance().sendToGameServer(ctsm.getGameServerId(), ctsm, true); + break; } - } - else if(msg.isType("TransferLoginCharacterToDestinationServer")) - { - const GenericValueTypeMessage loginCharacter(ri); - LOG("CustomerService", ("CharacterTransfer: ***CentralServer: Received TransferLoginCharacterToDestinationServer request from Transfer Server for %s\n", loginCharacter.getValue().toString().c_str())); - ConnectionServerConnection * connectionServer = CentralServer::getInstance().getAnyConnectionServer(); - if(connectionServer) + case constcrc("TransferRequestCharacterList") : { - connectionServer->send(loginCharacter, true); + // simply forward the request to any available login server + const GenericValueTypeMessage request(ri); + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(request)); + break; + } + case constcrc("TransferRequestMoveValidation") : + { + const TransferRequestMoveValidation request(ri); + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(request)); + LOG("CustomerService", ("CharacterTransfer: Received TransferRequestMoveValidation : %s on %s to %s on %s. Forwarding request to LoginServer.", request.getSourceCharacter().c_str(), request.getSourceGalaxy().c_str(), request.getDestinationCharacter().c_str(), request.getDestinationGalaxy().c_str())); + break; + } + case constcrc("TransferRequestKickConnectedClients") : + { + GenericValueTypeMessage > const request(ri); + // disconnect any clients with a connection to SWG services + GenericValueTypeMessage kickSource("TransferKickConnectedClients", request.getValue().first); + GenericValueTypeMessage kickDestination("TransferKickConnectedClients", request.getValue().second); + CentralServer::getInstance().sendToAllLoginServers(kickSource); + CentralServer::getInstance().sendToAllLoginServers(kickDestination); + CentralServer::getInstance().sendToAllConnectionServers(kickSource, true); + CentralServer::getInstance().sendToAllConnectionServers(kickDestination, true); + break; + } + case constcrc("TransferGetCharacterDataFromLoginServer") : + { + const GenericValueTypeMessage getCharacterData(ri); + + // The transfer server has received a move request. The request doesn't + // contain the source id of the character, character's container or scene + // information. The LoginServer can retrieve the character ID for the + // source station id + character name contained in character data. + // Forward the request to the login server. It will respond and the + // message can be routed back to the transfer server for further + // processing + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(getCharacterData)); + LOG("CustomerService", ("CharacterTransfer: ***CentralServer: received TransferGetCharacterDataFromLoginServer : %s)", getCharacterData.getValue().toString().c_str())); + break; + } + case constcrc("TransferGetLoginLocationData") : + { + GenericValueTypeMessage getLoginData(ri); + CentralServer::getInstance().sendToDBProcess(getLoginData, true); + LOG("CustomerService", ("CharacterTransfer: ***CentralServer: Received TransferGetLoginLocationData for %s\n", getLoginData.getValue().getSourceCharacterName().c_str())); + break; + } + case constcrc("TransferLoginCharacterToSourceServer") : + { + const GenericValueTypeMessage loginCharacter(ri); + ConnectionServerConnection * connectionServer = CentralServer::getInstance().getAnyConnectionServer(); + if(connectionServer) + { + connectionServer->send(loginCharacter, true); + LOG("CustomerService", ("CharacterTransfer: ***CentralServer: Received TransferLoginCharacterToSourceServer request from Transfer Server. Sendint request to ConnectionServer : %s\n", loginCharacter.getValue().toString().c_str())); + } + else + { + LOG("CustomerService", ("CharacterTransfer: ***CentralServer: Couldn't find a connection server to satisfy the transfer request for %s\n", loginCharacter.getValue().toString().c_str())); + } + break; + } + case constcrc("TransferLoginCharacterToDestinationServer") : + { + const GenericValueTypeMessage loginCharacter(ri); + LOG("CustomerService", ("CharacterTransfer: ***CentralServer: Received TransferLoginCharacterToDestinationServer request from Transfer Server for %s\n", loginCharacter.getValue().toString().c_str())); + ConnectionServerConnection * connectionServer = CentralServer::getInstance().getAnyConnectionServer(); + if(connectionServer) + { + connectionServer->send(loginCharacter, true); + } + break; + } + case constcrc("ToggleAvatarLoginStatus") : + { + ToggleAvatarLoginStatus toggle(ri); + LOG("CustomerService", ("CharacterTransfer: Received ToggleAvatarLoginStatus for station ID %d, Character Object %s", toggle.getStationId(), toggle.getCharacterId().getValueString().c_str())); + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(toggle)); + break; + } + case constcrc("TransferRequestNameValidation") : + { + GenericValueTypeMessage request(ri); + LOG("CustomerService", ("CharacterTransfer: Received TransferRequestNameValidation from TransferServer. Forwarding request to a random GameServer. %s", request.getValue().toString().c_str())); + IGNORE_RETURN(CentralServer::getInstance().sendToRandomGameServer(request)); + break; + } + case constcrc("TransferRenameCharacter") : + { + GenericValueTypeMessage renameRequest(ri); + LOG("CustomerService", ("CharacterTransfer: Received TransferRenameCharacter. Sending rename request to game database. %s", renameRequest.getValue().toString().c_str())); + // send first portion of request to DBProcess , wait for response + CentralServer::getInstance().sendToDBProcess(renameRequest, true); + break; + } + case constcrc("TransferAccountRequestLoginServer") : + { + // got message to transfer a character from one account to another - have to update in loginServer + GenericValueTypeMessage accountTransferRequest(ri); + LOG("CustomerService", ("CharacterTransfer: Received TransferAccountRequestLoginServer from station ID %d to station ID %d", accountTransferRequest.getValue().getSourceStationId(), accountTransferRequest.getValue().getDestinationStationId())); + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(accountTransferRequest)); + break; + } + case constcrc("RequestChatTransferAvatar") : + { + GenericValueTypeMessage chatTransferAvatar(ri); + LOG("CustomerService", ("CharacterTransfer: Received RequestChatTransferAvatar from TransferServer. Forward request to ChatServer. %s", chatTransferAvatar.getValue().toString().c_str())); + CentralServer::getInstance().broadcastToChatServers(chatTransferAvatar); + break; + } + case constcrc("DeleteFailedTransfer") : + { + GenericValueTypeMessage deleteCharacter(ri); + LOG("CustomerService", ("CharacterTransfer: received request to delete a character for a failed transfer. %s", deleteCharacter.getValue().toString().c_str())); + IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(deleteCharacter)); + break; + } + case constcrc("TransferClosePseudoClientConnection") : + { + GenericValueTypeMessage closeRequest(ri); + CentralServer::getInstance().sendToAllConnectionServers(closeRequest, true); + break; + } + case constcrc("ConGenericMessage") : + { + ConGenericMessage con(ri); + ConsoleConnection::onCommandComplete(con.getMsg(), static_cast(con.getMsgId())); + break; } - } - else if(msg.isType("ToggleAvatarLoginStatus")) - { - ToggleAvatarLoginStatus toggle(ri); - LOG("CustomerService", ("CharacterTransfer: Received ToggleAvatarLoginStatus for station ID %d, Character Object %s", toggle.getStationId(), toggle.getCharacterId().getValueString().c_str())); - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(toggle)); - } - else if(msg.isType("TransferRequestNameValidation")) - { - GenericValueTypeMessage request(ri); - LOG("CustomerService", ("CharacterTransfer: Received TransferRequestNameValidation from TransferServer. Forwarding request to a random GameServer. %s", request.getValue().toString().c_str())); - IGNORE_RETURN(CentralServer::getInstance().sendToRandomGameServer(request)); - } - else if(msg.isType("TransferRenameCharacter")) - { - GenericValueTypeMessage renameRequest(ri); - LOG("CustomerService", ("CharacterTransfer: Received TransferRenameCharacter. Sending rename request to game database. %s", renameRequest.getValue().toString().c_str())); - // send first portion of request to DBProcess , wait for response - CentralServer::getInstance().sendToDBProcess(renameRequest, true); - } - else if(msg.isType("TransferAccountRequestLoginServer")) - { - // got message to transfer a character from one account to another - have to update in loginServer - GenericValueTypeMessage accountTransferRequest(ri); - LOG("CustomerService", ("CharacterTransfer: Received TransferAccountRequestLoginServer from station ID %d to station ID %d", accountTransferRequest.getValue().getSourceStationId(), accountTransferRequest.getValue().getDestinationStationId())); - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(accountTransferRequest)); - } - else if(msg.isType("RequestChatTransferAvatar")) - { - GenericValueTypeMessage chatTransferAvatar(ri); - LOG("CustomerService", ("CharacterTransfer: Received RequestChatTransferAvatar from TransferServer. Forward request to ChatServer. %s", chatTransferAvatar.getValue().toString().c_str())); - CentralServer::getInstance().broadcastToChatServers(chatTransferAvatar); - } - else if(msg.isType("DeleteFailedTransfer")) - { - GenericValueTypeMessage deleteCharacter(ri); - LOG("CustomerService", ("CharacterTransfer: received request to delete a character for a failed transfer. %s", deleteCharacter.getValue().toString().c_str())); - IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(deleteCharacter)); - } - else if(msg.isType("TransferClosePseudoClientConnection")) - { - GenericValueTypeMessage closeRequest(ri); - CentralServer::getInstance().sendToAllConnectionServers(closeRequest, true); - } - else if(msg.isType("ConGenericMessage")) - { - ConGenericMessage con(ri); - ConsoleConnection::onCommandComplete(con.getMsg(), static_cast(con.getMsgId())); } } diff --git a/engine/server/application/CentralServer/src/shared/UniverseManager.cpp b/engine/server/application/CentralServer/src/shared/UniverseManager.cpp index f298a7e4..5473f31b 100755 --- a/engine/server/application/CentralServer/src/shared/UniverseManager.cpp +++ b/engine/server/application/CentralServer/src/shared/UniverseManager.cpp @@ -18,6 +18,8 @@ #include "serverNetworkMessages/SetUniverseAuthoritativeMessage.h" #include "sharedLog/Log.h" +#include "sharedFoundation/CrcConstexpr.hpp" + // ====================================================================== UniverseManager::UniverseManager() : @@ -47,62 +49,72 @@ UniverseManager::~UniverseManager() void UniverseManager::receiveMessage(const MessageDispatch::Emitter & source, const MessageDispatch::MessageBase & message) { - if(message.isType("CentralGameServerDbProcessServerProcessId")) - { - DEBUG_REPORT_LOG(true, ("dbProcess connected\n")); - Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); - CentralGameServerDbProcessServerProcessId d(ri); - - const GameServerConnection * g = static_cast(&source); //lint !e826 Suspicious pointer-to-pointer conversion - NOT_NULL(g); - onDatabaseProcessConnect(*g); - } - else if (message.isType("CreateDynamicRegionCircleMessage")) - { - Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); - CreateDynamicRegionCircleMessage msg(ri); - if (!m_databaseAuthoritative) - CentralServer::getInstance().sendToGameServer(m_universeProcess, msg, true); - } - else if (message.isType("CreateDynamicRegionRectangleMessage")) - { - Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); - CreateDynamicRegionRectangleMessage msg(ri); - if (!m_databaseAuthoritative) - CentralServer::getInstance().sendToGameServer(m_universeProcess, msg, true); - } - else if (message.isType("CreateGroupMessage")) - { - Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); - CreateGroupMessage msg(ri); - if (!m_databaseAuthoritative) - CentralServer::getInstance().sendToGameServer(m_universeProcess, msg, true); - } - else if (message.isType("ChangeUniverseProcessMessage")) - { - Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); - ChangeUniverseProcessMessage msg(ri); - uint32 processId = static_cast(msg.getId()); - if (!m_databaseAuthoritative && CentralServer::getInstance().getGameServer(processId)) + const uint32 messageType = mesage.getType(); + + switch(messageType) { + case constcrc("CentralGameServerDbProcessServerProcessId") : { - m_universeProcess = processId; - DEBUG_REPORT_LOG(true, ("Changing our Universe process to %lu\n",m_universeProcess)); - LOG("Universe", ("Changing our Universe process to %i\n",m_universeProcess)); + DEBUG_REPORT_LOG(true, ("dbProcess connected\n")); + Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); + CentralGameServerDbProcessServerProcessId d(ri); - SetUniverseAuthoritativeMessage authMsg(m_universeProcess); - CentralServer::getInstance().sendToAllGameServers(authMsg,true); + const GameServerConnection * g = static_cast(&source); //lint !e826 Suspicious pointer-to-pointer conversion + NOT_NULL(g); + onDatabaseProcessConnect(*g); + break; } - } - else if (message.isType("GameServerUniverseLoadedMessage")) - { - Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); - GameServerUniverseLoadedMessage d(ri); - UNREF(d); + case constcrc("CreateDynamicRegionCircleMessage") : + { + Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); + CreateDynamicRegionCircleMessage msg(ri); + if (!m_databaseAuthoritative) + CentralServer::getInstance().sendToGameServer(m_universeProcess, msg, true); + break; + } + case constcrc("CreateDynamicRegionRectangleMessage") : + { + Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); + CreateDynamicRegionRectangleMessage msg(ri); + if (!m_databaseAuthoritative) + CentralServer::getInstance().sendToGameServer(m_universeProcess, msg, true); + break; + } + case constcrc("CreateGroupMessage") : + { + Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); + CreateGroupMessage msg(ri); + if (!m_databaseAuthoritative) + CentralServer::getInstance().sendToGameServer(m_universeProcess, msg, true); + break; + } + case constcrc("ChangeUniverseProcessMessage") : + { + Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); + ChangeUniverseProcessMessage msg(ri); + uint32 processId = static_cast(msg.getId()); + if (!m_databaseAuthoritative && CentralServer::getInstance().getGameServer(processId)) + { + m_universeProcess = processId; + DEBUG_REPORT_LOG(true, ("Changing our Universe process to %lu\n",m_universeProcess)); + LOG("Universe", ("Changing our Universe process to %i\n",m_universeProcess)); - const GameServerConnection * g = static_cast(&source); //lint !e826 Suspicious pointer-to-pointer conversion - NOT_NULL(g); -// DEBUG_REPORT_LOG(true,("m_serversLoadingUniverse->erase(%lu);\n",g->getProcessId())); - IGNORE_RETURN(m_serversLoadingUniverse->erase(g->getProcessId())); + SetUniverseAuthoritativeMessage authMsg(m_universeProcess); + CentralServer::getInstance().sendToAllGameServers(authMsg,true); + } + break; + } + case constcrc("GameServerUniverseLoadedMessage") : + { + Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); + GameServerUniverseLoadedMessage d(ri); + UNREF(d); + + const GameServerConnection * g = static_cast(&source); //lint !e826 Suspicious pointer-to-pointer conversion + NOT_NULL(g); + // DEBUG_REPORT_LOG(true,("m_serversLoadingUniverse->erase(%lu);\n",g->getProcessId())); + IGNORE_RETURN(m_serversLoadingUniverse->erase(g->getProcessId())); + break; + } } }