mirror of
https://github.com/SWG-Source/src.git
synced 2026-07-31 00:15:55 -04:00
and more
This commit is contained in:
@@ -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<const GameNetworkMessage &>(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<const GameNetworkMessage &>(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<const PlanetServerConnection *>(&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<const PlanetServerConnection *>(&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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-4
@@ -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<int>(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."));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<TransferCharacterData> 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<std::pair<unsigned int, unsigned int> > const request(ri);
|
||||
// disconnect any clients with a connection to SWG services
|
||||
GenericValueTypeMessage<unsigned int> kickSource("TransferKickConnectedClients", request.getValue().first);
|
||||
GenericValueTypeMessage<unsigned int> 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<TransferCharacterData> 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<TransferCharacterData> 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<TransferCharacterData> 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<TransferCharacterData> 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<TransferCharacterData> 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<std::pair<unsigned int, unsigned int> > const request(ri);
|
||||
// disconnect any clients with a connection to SWG services
|
||||
GenericValueTypeMessage<unsigned int> kickSource("TransferKickConnectedClients", request.getValue().first);
|
||||
GenericValueTypeMessage<unsigned int> 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<TransferCharacterData> 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<TransferCharacterData> 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<TransferCharacterData> 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<TransferCharacterData> 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<TransferCharacterData> 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<TransferCharacterData> 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<TransferAccountData> 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<TransferCharacterData> 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<TransferCharacterData> 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<unsigned int> closeRequest(ri);
|
||||
CentralServer::getInstance().sendToAllConnectionServers(closeRequest, true);
|
||||
break;
|
||||
}
|
||||
case constcrc("ConGenericMessage") :
|
||||
{
|
||||
ConGenericMessage con(ri);
|
||||
ConsoleConnection::onCommandComplete(con.getMsg(), static_cast<int>(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<TransferCharacterData> 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<TransferCharacterData> 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<TransferAccountData> 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<TransferCharacterData> 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<TransferCharacterData> 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<unsigned int> closeRequest(ri);
|
||||
CentralServer::getInstance().sendToAllConnectionServers(closeRequest, true);
|
||||
}
|
||||
else if(msg.isType("ConGenericMessage"))
|
||||
{
|
||||
ConGenericMessage con(ri);
|
||||
ConsoleConnection::onCommandComplete(con.getMsg(), static_cast<int>(con.getMsgId()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<const GameNetworkMessage &>(message).getByteStream().begin();
|
||||
CentralGameServerDbProcessServerProcessId d(ri);
|
||||
|
||||
const GameServerConnection * g = static_cast<const GameServerConnection *>(&source); //lint !e826 Suspicious pointer-to-pointer conversion
|
||||
NOT_NULL(g);
|
||||
onDatabaseProcessConnect(*g);
|
||||
}
|
||||
else if (message.isType("CreateDynamicRegionCircleMessage"))
|
||||
{
|
||||
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(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<const GameNetworkMessage &>(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<const GameNetworkMessage &>(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<const GameNetworkMessage &>(message).getByteStream().begin();
|
||||
ChangeUniverseProcessMessage msg(ri);
|
||||
uint32 processId = static_cast<uint32>(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<const GameNetworkMessage &>(message).getByteStream().begin();
|
||||
CentralGameServerDbProcessServerProcessId d(ri);
|
||||
|
||||
SetUniverseAuthoritativeMessage authMsg(m_universeProcess);
|
||||
CentralServer::getInstance().sendToAllGameServers(authMsg,true);
|
||||
const GameServerConnection * g = static_cast<const GameServerConnection *>(&source); //lint !e826 Suspicious pointer-to-pointer conversion
|
||||
NOT_NULL(g);
|
||||
onDatabaseProcessConnect(*g);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (message.isType("GameServerUniverseLoadedMessage"))
|
||||
{
|
||||
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(message).getByteStream().begin();
|
||||
GameServerUniverseLoadedMessage d(ri);
|
||||
UNREF(d);
|
||||
case constcrc("CreateDynamicRegionCircleMessage") :
|
||||
{
|
||||
Archive::ReadIterator ri = static_cast<const GameNetworkMessage &>(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<const GameNetworkMessage &>(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<const GameNetworkMessage &>(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<const GameNetworkMessage &>(message).getByteStream().begin();
|
||||
ChangeUniverseProcessMessage msg(ri);
|
||||
uint32 processId = static_cast<uint32>(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<const GameServerConnection *>(&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<const GameNetworkMessage &>(message).getByteStream().begin();
|
||||
GameServerUniverseLoadedMessage d(ri);
|
||||
UNREF(d);
|
||||
|
||||
const GameServerConnection * g = static_cast<const GameServerConnection *>(&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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user