Files
src-1.2/engine/server/application/LoginServer/src/shared/ConfigLoginServer.cpp
T
2016-04-18 03:56:57 +00:00

207 lines
6.4 KiB
C++
Executable File

// ConfigLoginServer.cpp
// copyright 2000 Verant Interactive
// Author: Justin Randall
//-----------------------------------------------------------------------
#include "FirstLoginServer.h"
#include "serverUtility/ConfigServerUtility.h"
#include "Session/LoginAPI/Client.h"
#include "sharedFoundation/ConfigFile.h"
#include "sharedNetwork/SetupSharedNetwork.h"
#include "ConfigLoginServer.h"
//-----------------------------------------------------------------------
ConfigLoginServer::Data * ConfigLoginServer::data = 0;
#define KEY_INT(a,b) (data->a = ConfigFile::getKeyInt("LoginServer", #a, b))
#define KEY_BOOL(a,b) (data->a = ConfigFile::getKeyBool("LoginServer", #a, b))
// #define KEY_REAL(a,b) (data->a = ConfigFile::getKeyReal("LoginServer", #a, b))
#define KEY_FLOAT(a,b) (data->a = ConfigFile::getKeyFloat("LoginServer", #a, b))
#define KEY_STRING(a,b) (data->a = ConfigFile::getKeyString("LoginServer", #a, b))
//-----------------------------------------------------------------------
namespace ConfigLoginServerNamespace
{
typedef std::vector<char const *> StringPtrArray;
StringPtrArray ms_privateIpMasks; // ConfigFile owns the pointer
StringPtrArray ms_sessionServer; // ConfigFile owns the pointer
int const ms_numPurgePhases=5;
int ms_purgePhaseAdvanceDays[ms_numPurgePhases]={0,30,60,90,120};
// disable character creation for these clusters through config option
std::set<std::string> ms_clusterCharacterCreationDisable;
}
using namespace ConfigLoginServerNamespace;
// ======================================================================
int ConfigLoginServer::getNumberOfSessionServers()
{
return static_cast<int>(ms_sessionServer.size());
}
// ----------------------------------------------------------------------
char const * ConfigLoginServer::getSessionServer(int index)
{
VALIDATE_RANGE_INCLUSIVE_EXCLUSIVE(0, index, getNumberOfSessionServers());
return ms_sessionServer[static_cast<size_t>(index)];
}
// ----------------------------------------------------------------------
void ConfigLoginServer::install(void)
{
ConfigServerUtility::install();
SetupSharedNetwork::SetupData networkSetupData;
SetupSharedNetwork::getDefaultServerSetupData(networkSetupData);
SetupSharedNetwork::install(networkSetupData);
data = new ConfigLoginServer::Data;
KEY_INT (centralServicePort, 44452);
KEY_INT (clientServicePort, 44453);
KEY_INT (clientOverflowLimit, 1024 * 8);
KEY_INT (maxClients, 250);
KEY_INT (taskServicePort, 44459);
KEY_INT (pingServicePort, 44460);
KEY_INT (httpServicePort, 44490);
KEY_STRING (DSN, "loginserver");
KEY_STRING (privateIpMask, "127.0.0.1");
KEY_STRING (databaseUID, "loginserver");
KEY_STRING (schemaOwner, "");
KEY_STRING (databasePWD, "loginserver");
KEY_STRING (databaseProtocol, "OCI");
KEY_BOOL (enableQueryProfile,false);
KEY_BOOL (verboseQueryMode,false);
KEY_BOOL(logWorkerThreads, false);
KEY_INT (maxPlayersPerCluster, 2500);
KEY_INT (maxCharactersPerCluster, 10000);
KEY_INT (maxCharactersPerAccount, 20);
KEY_BOOL (validateClientVersion, true);
KEY_BOOL (validateStationKey, false);
KEY_BOOL (doSessionLogin, false);
KEY_BOOL (doConsumption, false);
KEY_STRING (sessionServers, "localhost:3004");
KEY_INT (sessionType, SESSION_TYPE_STARWARS);
KEY_BOOL (developmentMode, true);
KEY_INT (databaseThreads, 1);
KEY_BOOL (compressClientNetworkTraffic, true);
KEY_INT (metricsListenerPort, 2201);
KEY_FLOAT (defaultDBQueueUpdateTimeLimit, 0.25f);
KEY_INT (disconnectSleepTime, 30000);
KEY_INT (clusterGroup,1);
KEY_INT(maxSimultaneousPurgeAccounts,1000);
KEY_INT(purgeSleepTime,600);
KEY_BOOL(enableStructurePurge,true);
KEY_BOOL(enableCharacterPurge,true);
KEY_INT (updatePurgeAccountListTime, 0);
KEY_STRING (purgeAccountSourceTable,"account_extract");
KEY_STRING (adminAccountDataTable, "datatables/admin/us_admin.iff");
KEY_BOOL(allowSkipTutorialToAll,true);
KEY_BOOL(internalBypassOnlineLimit,true);
KEY_INT (populationExtremelyHeavyThresholdPercent, 50);
KEY_INT (populationVeryHeavyThresholdPercent, 40);
KEY_INT (populationHeavyThresholdPercent, 32);
KEY_INT (populationMediumThresholdPercent, 16);
KEY_INT (populationLightThresholdPercent, 8);
KEY_INT (csToolPort, 10666);
KEY_BOOL(requireSecureLoginForCsTool, true);
KEY_BOOL(useExternalAuth, false);
KEY_STRING(externalAuthURL, "");
int index = 0;
char const * result = 0;
do
{
result = ConfigFile::getKeyString("LoginServer", "privateIpMask", index++, 0);
if (result != 0)
{
ms_privateIpMasks.push_back(result);
}
}
while (result);
index = 0;
result = 0;
do
{
result = ConfigFile::getKeyString("LoginServer", "sessionServer", index++, 0);
if (result != 0)
{
ms_sessionServer.push_back(result);
}
}
while (result);
index = 0;
result = 0;
do
{
result = ConfigFile::getKeyString("LoginServer", "disableCharacterCreation", index++, 0);
if (result != 0)
{
ms_clusterCharacterCreationDisable.insert(result);
}
}
while (result);
if (!ms_clusterCharacterCreationDisable.empty())
{
for (std::set<std::string>::const_iterator iter = ms_clusterCharacterCreationDisable.begin(); iter != ms_clusterCharacterCreationDisable.end(); ++iter)
{
DEBUG_REPORT_LOG(true, ("Character creation for cluster (%s) has been disabled through config option.\n", iter->c_str()));
}
}
{
char keyName[500];
for (int index=0; index < ms_numPurgePhases; index++)
{
snprintf(keyName,sizeof(keyName),"purgePhaseAdvanceDays%i",index);
ms_purgePhaseAdvanceDays[index] = ConfigFile::getKeyInt("LoginServer", keyName, 0, ms_purgePhaseAdvanceDays[index]);
}
}
}
//-----------------------------------------------------------------------
void ConfigLoginServer::remove(void)
{
delete data;
data = 0;
ConfigServerUtility::remove();
}
// ----------------------------------------------------------------------
int ConfigLoginServer::getPurgePhaseAdvanceDays(int purgePhase)
{
VALIDATE_RANGE_INCLUSIVE_EXCLUSIVE(0, purgePhase, ms_numPurgePhases);
return ms_purgePhaseAdvanceDays[purgePhase];
}
// ----------------------------------------------------------------------
bool ConfigLoginServer::isCharacterCreationDisabled(std::string const & cluster)
{
return (ms_clusterCharacterCreationDisable.count(cluster) >= 1);
}
// ----------------------------------------------------------------------
std::set<std::string> const & ConfigLoginServer::getCharacterCreationDisabledClusterList()
{
return ms_clusterCharacterCreationDisable;
}
// ======================================================================