1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-30 16:17:46 +00:00

lobby works again with new config stuff

This commit is contained in:
NotAdam 2019-01-07 23:00:09 +11:00
parent 7666e84693
commit cd1d8f8126
16 changed files with 181 additions and 169 deletions

View file

@ -11,6 +11,7 @@ AsyncThreads = 2
ServerSecret = default
DataPath = C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack
WorldID = 67
DefaultGMRank = 255
[Network]
; Values definining how Users and other servers will access - these have to be set to your public IP when running a public server

View file

@ -1,7 +1,6 @@
[Lobby]
AllowNoSessionConnect = false
WorldName = Sapphire
DefaultGMRank = 255
[Network]
ListenIp = 0.0.0.0

View file

@ -51,16 +51,38 @@ void default_resource_send( const HttpServer& server, const shared_ptr< HttpServ
auto m_pConfig = std::make_shared< Sapphire::ConfigMgr >();
HttpServer server;
std::string configPath( "config.ini" );
std::string configPath( "api.ini" );
Sapphire::Common::Config::ApiConfig m_config;
void reloadConfig()
{
m_pConfig = std::make_shared< Sapphire::ConfigMgr >();
bool failedLoad = false;
// load global cfg first
if( !m_pConfig->loadGlobalConfig( m_config.global ) )
{
Logger::fatal( "Error loading config global.ini" );
failedLoad = true;
}
if( !m_pConfig->loadConfig( configPath ) )
{
Logger::fatal( "Error loading config {0}", configPath );
failedLoad = true;
}
if( failedLoad )
{
throw "Error loading config";
}
// setup api config
m_config.network.listenPort = m_pConfig->getValue< uint16_t >( "Network", "ListenPort", 80 );
m_config.network.listenIP = m_pConfig->getValue< std::string >( "Network", "ListenIp", "0.0.0.0" );
}
void print_request_info( shared_ptr< HttpServer::Request > request )
{
Logger::info( "Request from {0} ({1})", request->remote_endpoint_address, request->path );
@ -77,8 +99,6 @@ bool loadSettings( int32_t argc, char* argv[] )
return false;
}
auto pConfig = m_pConfig->getConfig();
std::vector< std::string > args( argv + 1, argv + argc );
for( size_t i = 0; i + 1 < args.size(); i += 2 )
{
@ -93,46 +113,7 @@ bool loadSettings( int32_t argc, char* argv[] )
// trim '-' from start of arg
arg = arg.erase( 0, arg.find_first_not_of( '-' ) );
if( arg == "ip" )
{
m_pConfig->setValue< std::string >( "RestNetwork.ListenIp", val );
}
else if( arg == "p" || arg == "port" )
{
m_pConfig->setValue< std::string >( "RestNetwork.ListenPort", val );
}
else if( arg == "exdpath" || arg == "datapath" )
{
m_pConfig->setValue< std::string >( "GlobalParameters.DataPath", val );
}
else if( arg == "h" || arg == "dbhost" )
{
m_pConfig->setValue< std::string >( "Database.Host", val );
}
else if( arg == "dbport" )
{
m_pConfig->setValue< std::string >( "Database.Port", val );
}
else if( arg == "u" || arg == "user" || arg == "dbuser" )
{
m_pConfig->setValue< std::string >( "Database.Username", val );
}
else if( arg == "pass" || arg == "dbpass" )
{
m_pConfig->setValue< std::string >( "Database.Password", val );
}
else if( arg == "d" || arg == "db" || arg == "database" )
{
m_pConfig->setValue< std::string >( "Database.Database", val );
}
else if( arg == "lobbyip" || arg == "lobbyhost" )
{
m_pConfig->setValue< std::string >( "GlobalNetwork.LobbyHost", val );
}
else if( arg == "lobbyport" )
{
m_pConfig->setValue< std::string >( "GlobalNetwork.LobbyPort", val );
}
}
catch( ... )
{
@ -142,7 +123,7 @@ bool loadSettings( int32_t argc, char* argv[] )
}
Logger::info( "Setting up generated EXD data" );
auto dataPath = m_pConfig->getConfig()->globalParameters.dataPath;
auto dataPath = m_config.global.parameters.dataPath;
if( !g_exdDataGen.init( dataPath ) )
{
Logger::fatal( "Error setting up generated EXD data. Make sure that DataPath is set correctly in config.ini" );
@ -153,20 +134,20 @@ bool loadSettings( int32_t argc, char* argv[] )
Sapphire::Db::DbLoader loader;
Sapphire::Db::ConnectionInfo info;
info.password = pConfig->database.password;
info.host = pConfig->database.host;
info.database = pConfig->database.database;
info.port = pConfig->database.port;
info.user = pConfig->database.username;
info.syncThreads = pConfig->database.syncThreads;
info.asyncThreads = pConfig->database.asyncThreads;
info.password = m_config.global.database.password;
info.host = m_config.global.database.host;
info.database = m_config.global.database.database;
info.port = m_config.global.database.port;
info.user = m_config.global.database.username;
info.syncThreads = m_config.global.database.syncThreads;
info.asyncThreads = m_config.global.database.asyncThreads;
loader.addDb( g_charaDb, info );
if( !loader.initDbs() )
return false;
server.config.port = pConfig->restNetwork.listenPort;
server.config.address = pConfig->restNetwork.listenIP;
server.config.port = m_config.network.listenPort;
server.config.address = m_config.network.listenIP;
Logger::info( "Database: Connected to {0}:{1}", info.host, info.port );
@ -268,9 +249,9 @@ void createAccount( shared_ptr< HttpServer::Response > response, shared_ptr< Htt
// todo: construct proper json object here
std::string json_string = "{\"sId\":\"" + sId +
"\", \"lobbyHost\":\"" +
m_pConfig->getConfig()->globalNetwork.lobbyHost +
m_config.global.network.lobbyHost +
"\", \"frontierHost\":\"" +
m_pConfig->getConfig()->globalNetwork.restHost + "\"}";
m_config.global.network.restHost + "\"}";
*response << buildHttpResponse( 200, json_string, JSON );
}
else
@ -301,9 +282,9 @@ void login( shared_ptr< HttpServer::Response > response, shared_ptr< HttpServer:
// todo: build proper json object and stringify it
std::string json_string = "{\"sId\":\"" + sId +
"\", \"lobbyHost\":\"" +
m_pConfig->getConfig()->globalNetwork.lobbyHost +
m_config.global.network.lobbyHost +
"\", \"frontierHost\":\"" +
m_pConfig->getConfig()->globalNetwork.restHost + "\"}";
m_config.global.network.restHost + "\"}";
*response << buildHttpResponse( 200, json_string, JSON );
}
else
@ -333,7 +314,7 @@ void deleteCharacter( shared_ptr< HttpServer::Response > response, shared_ptr< H
int32_t accountId = g_sapphireAPI.checkSession( sId );
if( m_pConfig->getConfig()->globalParameters.serverSecret != secret )
if( m_config.global.parameters.serverSecret != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@ -373,7 +354,7 @@ void createCharacter( shared_ptr< HttpServer::Response > response, shared_ptr< H
if( result != -1 )
{
if( m_pConfig->getConfig()->globalParameters.serverSecret != secret )
if( m_config.global.parameters.serverSecret != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@ -381,7 +362,7 @@ void createCharacter( shared_ptr< HttpServer::Response > response, shared_ptr< H
else
{
int32_t charId = g_sapphireAPI.createCharacter( result, name, finalJson,
m_pConfig->getConfig()->characterCreation.defaultGMRank );
m_config.global.parameters.defaultGMRank );
std::string json_string = "{\"result\":\"" + std::to_string( charId ) + "\"}";
*response << buildHttpResponse( 200, json_string, JSON );
@ -414,7 +395,7 @@ void insertSession( shared_ptr< HttpServer::Response > response, shared_ptr< Htt
std::string secret = json["secret"];
// reloadConfig();
if( m_pConfig->getConfig()->globalParameters.serverSecret != secret )
if( m_config.global.parameters.serverSecret != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@ -446,7 +427,7 @@ void checkNameTaken( shared_ptr< HttpServer::Response > response, shared_ptr< Ht
// reloadConfig();
if( m_pConfig->getConfig()->globalParameters.serverSecret != secret )
if( m_config.global.parameters.serverSecret != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@ -483,7 +464,7 @@ void checkSession( shared_ptr< HttpServer::Response > response, shared_ptr< Http
if( result != -1 )
{
if( m_pConfig->getConfig()->globalParameters.serverSecret != secret )
if( m_config.global.parameters.serverSecret != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@ -522,7 +503,7 @@ void getNextCharId( shared_ptr< HttpServer::Response > response, shared_ptr< Htt
// reloadConfig();
if( m_pConfig->getConfig()->globalParameters.serverSecret != secret )
if( m_config.global.parameters.serverSecret != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@ -553,7 +534,7 @@ void getNextContentId( shared_ptr< HttpServer::Response > response, shared_ptr<
// reloadConfig();
if( m_pConfig->getConfig()->globalParameters.serverSecret != secret )
if( m_config.global.parameters.serverSecret != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@ -588,7 +569,7 @@ void getCharacterList( shared_ptr< HttpServer::Response > response, shared_ptr<
if( result != -1 )
{
if( m_pConfig->getConfig()->globalParameters.serverSecret != secret )
if( m_config.global.parameters.serverSecret != secret )
{
std::string json_string = "{\"result\":\"invalid_secret\"}";
*response << buildHttpResponse( 403, json_string, JSON );
@ -768,8 +749,7 @@ int main( int argc, char* argv[] )
server.start();
} );
auto& cfg = m_pConfig->getConfig()->restNetwork;
Logger::info( "API server running on {0}:{1}", cfg.listenIP, cfg.listenPort );
Logger::info( "API server running on {0}:{1}", m_config.network.listenIP, m_config.network.listenPort );
//Wait for server to start so that the client can connect
this_thread::sleep_for( chrono::seconds( 1 ) );

View file

@ -21,6 +21,8 @@ namespace Sapphire::Common::Config
std::string serverSecret;
std::string dataPath;
uint16_t worldID;
uint8_t defaultGMRank;
} parameters;
struct Network
@ -76,8 +78,6 @@ namespace Sapphire::Common::Config
bool allowNoSessionConnect;
std::string worldName;
uint8_t defaultGMRank;
};
struct ApiConfig

View file

@ -58,6 +58,7 @@ bool Sapphire::ConfigMgr::loadGlobalConfig( Common::Config::GlobalConfig& config
config.parameters.dataPath = getValue< std::string >( "Parameters", "DataPath", "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack" );
config.parameters.serverSecret = getValue< std::string >( "Parameters", "ServerSecret", "default" );
config.parameters.worldID = getValue< uint16_t >( "Parameters", "WorldID", 67 );
config.parameters.defaultGMRank = getValue< uint8_t >( "Parameters", "DefaultGMRank", 255 );
// network
config.network.zoneHost = getValue< std::string >( "Network", "ZoneHost", "127.0.0.1" );
@ -88,44 +89,19 @@ bool Sapphire::ConfigMgr::copyDefaultConfig( const std::string& configName )
void Sapphire::ConfigMgr::initConfigData()
{
m_pConfig = std::make_shared< Common::Configuration >();
// lobby
m_pConfig->lobby.worldID = getValue< uint16_t >( "Lobby", "WorldID", 67 );
m_pConfig->lobby.allowNoSessionConnect = getValue< bool >( "Lobby", "AllowNoSessionConnect", false );
m_pConfig->lobby.worldName = getValue< std::string >( "Lobby", "WorldName", "Sapphire" );
// lobby network
m_pConfig->lobbyNetwork.listenIp = getValue< std::string >( "LobbyNetwork", "ListenIp", "0.0.0.0" );
m_pConfig->lobbyNetwork.listenPort = getValue< uint16_t >( "LobbyNetwork", "ListenPort", 54994 );
// character creation
m_pConfig->characterCreation.defaultGMRank = getValue< uint8_t >( "CharacterCreation", "DefaultGMRank", 255 );
// rest network
m_pConfig->restNetwork.listenIP = getValue< std::string >( "RestNetwork", "ListenIp", "0.0.0.0" );
m_pConfig->restNetwork.listenPort = getValue< uint16_t >( "RestNetwork", "ListenPort", 80 );
// scripts
m_pConfig->scripts.hotSwap = getValue( "Scripts", "HotSwap", true );
m_pConfig->scripts.path = getValue< std::string >( "Scripts", "Path", "./compiledscripts/" );
m_pConfig->scripts.cachePath = getValue< std::string >( "Scripts", "CachePath", "./cache/" );
// network
m_pConfig->network.disconnectTimeout = getValue< uint16_t >( "Network", "DisconnectTimeout", 20 );
// zone network
m_pConfig->zoneNetwork.listenIp = getValue< std::string >( "ZoneNetwork", "ListenIp", "0.0.0.0" );
m_pConfig->zoneNetwork.listenPort = getValue< uint16_t >( "ZoneNetwork", "ListenPort", 54992 );
// general
m_pConfig->general.motd = getValue< std::string >( "General", "MotD", "" );
// housing
m_pConfig->housing.defaultEstateName = getValue< std::string >( "Housing", "DefaultEstateName", "Estate #{}" );
}
Sapphire::ConfigMgr::ConfigurationPtr Sapphire::ConfigMgr::getConfig()
{
return m_pConfig;
// m_pConfig->lobby.worldID = getValue< uint16_t >( "Lobby", "WorldID", 67 );
// m_pConfig->lobby.allowNoSessionConnect = getValue< bool >( "Lobby", "AllowNoSessionConnect", false );
// m_pConfig->lobby.worldName = getValue< std::string >( "Lobby", "WorldName", "Sapphire" );
//
// // lobby network
// m_pConfig->lobbyNetwork.listenIp = getValue< std::string >( "LobbyNetwork", "ListenIp", "0.0.0.0" );
// m_pConfig->lobbyNetwork.listenPort = getValue< uint16_t >( "LobbyNetwork", "ListenPort", 54994 );
//
// // character creation
// m_pConfig->characterCreation.defaultGMRank = getValue< uint8_t >( "CharacterCreation", "DefaultGMRank", 255 );
//
// // rest network
// m_pConfig->restNetwork.listenIP = getValue< std::string >( "RestNetwork", "ListenIp", "0.0.0.0" );
// m_pConfig->restNetwork.listenPort = getValue< uint16_t >( "RestNetwork", "ListenPort", 80 );
}

View file

@ -16,10 +16,8 @@ namespace Sapphire
ConfigMgr() = default;
~ConfigMgr() = default;
using ConfigurationPtr = std::shared_ptr< Common::Configuration >;
bool loadConfig( const std::string& configName );
bool loadGlobalConfig( Common::Config::GlobalConfig& config, const string& configName = "config.ini" );
bool loadGlobalConfig( Common::Config::GlobalConfig& config, const string& configName = "global.ini" );
template<class T> struct always_false : std::false_type {};
@ -59,16 +57,12 @@ namespace Sapphire
//m_propTree.put( name, defaultValue );
}
ConfigurationPtr getConfig();
private:
bool copyDefaultConfig( const std::string& configName );
void initConfigData();
std::unique_ptr< INIReader > m_pInih;
ConfigurationPtr m_pConfig;
const std::string m_globalConfigFile = "global.ini";
const std::string m_configFolderRoot = "./config/";
const std::string m_configDefaultSuffix = ".default";

View file

@ -128,10 +128,10 @@ void Sapphire::Network::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet
serverListPacket->data().seq = 1;
serverListPacket->data().offset = 0;
serverListPacket->data().numServers = 1;
serverListPacket->data().server[ 0 ].id = g_serverLobby.getConfig()->getConfig()->lobby.worldID;
serverListPacket->data().server[ 0 ].id = g_serverLobby.getConfig().global.parameters.worldID;
serverListPacket->data().server[ 0 ].index = 0;
serverListPacket->data().final = 1;
strcpy( serverListPacket->data().server[ 0 ].name, g_serverLobby.getConfig()->getConfig()->lobby.worldName.c_str() );
strcpy( serverListPacket->data().server[ 0 ].name, g_serverLobby.getConfig().worldName.c_str() );
pRP.addPacket( serverListPacket );
auto retainerListPacket = makeLobbyPacket< FFXIVIpcRetainerList >( tmpId );
@ -161,13 +161,13 @@ void Sapphire::Network::GameConnection::getCharList( FFXIVARR_PACKET_RAW& packet
auto& charEntry = charList[ charIndex ];
details.uniqueId = std::get< 1 >( charEntry );
details.contentId = std::get< 2 >( charEntry );
details.serverId = g_serverLobby.getConfig()->getConfig()->lobby.worldID;
details.serverId1 = g_serverLobby.getConfig()->getConfig()->lobby.worldID;
details.serverId = g_serverLobby.getConfig().global.parameters.worldID;
details.serverId1 = g_serverLobby.getConfig().global.parameters.worldID;
details.index = charIndex;
strcpy( details.charDetailJson, std::get< 3 >( charEntry ).c_str() );
strcpy( details.nameChara, std::get< 0 >( charEntry ).c_str() );
strcpy( details.nameServer, g_serverLobby.getConfig()->getConfig()->lobby.worldName.c_str() );
strcpy( details.nameServer1, g_serverLobby.getConfig()->getConfig()->lobby.worldName.c_str() );
strcpy( details.nameServer, g_serverLobby.getConfig().worldName.c_str() );
strcpy( details.nameServer1, g_serverLobby.getConfig().worldName.c_str() );
charListPacket->data().charaDetails[ j ] = details;
@ -233,8 +233,8 @@ void Sapphire::Network::GameConnection::enterWorld( FFXIVARR_PACKET_RAW& packet,
auto enterWorldPacket = makeLobbyPacket< FFXIVIpcEnterWorld >( tmpId );
enterWorldPacket->data().contentId = lookupId;
enterWorldPacket->data().seq = sequence;
strcpy( enterWorldPacket->data().host, g_serverLobby.getConfig()->getConfig()->globalNetwork.zoneHost.c_str() );
enterWorldPacket->data().port = g_serverLobby.getConfig()->getConfig()->globalNetwork.zonePort;
strcpy( enterWorldPacket->data().host, g_serverLobby.getConfig().global.network.zoneHost.c_str() );
enterWorldPacket->data().port = g_serverLobby.getConfig().global.network.zonePort;
enterWorldPacket->data().charId = logInCharId;
memcpy( enterWorldPacket->data().sid, m_pSession->getSessionId(), 66 );
pRP.addPacket( enterWorldPacket );
@ -245,7 +245,7 @@ bool Sapphire::Network::GameConnection::sendServiceAccountList( FFXIVARR_PACKET_
{
LobbySessionPtr pSession = g_serverLobby.getSession( ( char* ) &packet.data[ 0 ] + 0x20 );
if( g_serverLobby.getConfig()->getConfig()->lobby.allowNoSessionConnect && pSession == nullptr )
if( g_serverLobby.getConfig().allowNoSessionConnect && pSession == nullptr )
{
auto session = make_LobbySession();
session->setAccountID( 0 );
@ -312,7 +312,7 @@ bool Sapphire::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW&
auto charCreatePacket = makeLobbyPacket< FFXIVIpcCharCreate >( tmpId );
charCreatePacket->data().content_id = newContentId;
strcpy( charCreatePacket->data().name, name.c_str() );
strcpy( charCreatePacket->data().world, g_serverLobby.getConfig()->getConfig()->lobby.worldName.c_str() );
strcpy( charCreatePacket->data().world, g_serverLobby.getConfig().worldName.c_str() );
charCreatePacket->data().type = 1;
charCreatePacket->data().seq = sequence;
charCreatePacket->data().unknown = 1;
@ -335,8 +335,8 @@ bool Sapphire::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW&
auto charCreatePacket = makeLobbyPacket< FFXIVIpcCharCreate >( tmpId );
charCreatePacket->data().content_id = newContentId;
strcpy( charCreatePacket->data().name, name.c_str() );
strcpy( charCreatePacket->data().world, g_serverLobby.getConfig()->getConfig()->lobby.worldName.c_str() );
strcpy( charCreatePacket->data().world2, g_serverLobby.getConfig()->getConfig()->lobby.worldName.c_str() );
strcpy( charCreatePacket->data().world, g_serverLobby.getConfig().worldName.c_str() );
strcpy( charCreatePacket->data().world2, g_serverLobby.getConfig().worldName.c_str() );
charCreatePacket->data().type = 2;
charCreatePacket->data().seq = sequence;
charCreatePacket->data().unknown = 1;
@ -364,7 +364,7 @@ bool Sapphire::Network::GameConnection::createOrModifyChar( FFXIVARR_PACKET_RAW&
//charCreatePacket->data().content_id = deletePlayer.getContentId();
charCreatePacket->data().content_id = 0;
strcpy( charCreatePacket->data().name, name.c_str() );
strcpy( charCreatePacket->data().world, g_serverLobby.getConfig()->getConfig()->lobby.worldName.c_str() );
strcpy( charCreatePacket->data().world, g_serverLobby.getConfig().worldName.c_str() );
charCreatePacket->data().type = 4;
charCreatePacket->data().seq = sequence;
charCreatePacket->data().unknown = 1;

View file

@ -41,9 +41,9 @@ namespace Sapphire
return g_restConnector.getSession( sessionId );
}
ConfigMgrPtr ServerLobby::getConfig() const
Sapphire::Common::Config::LobbyConfig& ServerLobby::getConfig()
{
return m_pConfig;
return m_config;
}
void ServerLobby::run( int32_t argc, char* argv[] )
@ -83,12 +83,33 @@ namespace Sapphire
{
Logger::info( "Loading config {0}", m_configPath );
bool failedLoad = false;
if( !m_pConfig->loadGlobalConfig( m_config.global, "global.ini" ) )
{
Logger::fatal( "Error loading config global.ini, copying default..." );
failedLoad = true;
}
if( !m_pConfig->loadConfig( m_configPath ) )
{
Logger::fatal( "Error loading config {0}", m_configPath );
Logger::fatal( "If this is the first time starting the server, we've copied the default one for your editing pleasure." );
failedLoad = true;
}
if( failedLoad )
{
Logger::fatal( "If this is the first time starting the server, "
"we've copied the default configs for your editing pleasure." );
return false;
}
// load lobby config
m_config.allowNoSessionConnect = m_pConfig->getValue< bool >( "Lobby", "AllowNoSessionConnect", false );
m_config.worldName = m_pConfig->getValue< std::string >( "Lobby", "WorldName", "Sapphire" );
m_config.network.listenIp = m_pConfig->getValue< std::string >( "Network", "ListenIp", "0.0.0.0" );
m_config.network.listenPort = m_pConfig->getValue< uint16_t >( "Network", "ListenPort", 54994 );
std::vector< std::string > args( argv + 1, argv + argc );
for( size_t i = 0; i + 1 < args.size(); i += 2 )
{
@ -106,19 +127,19 @@ namespace Sapphire
if( arg == "ip" )
{
// todo: ip addr in config
m_pConfig->getConfig()->lobbyNetwork.listenIp = val;
m_config.network.listenIp = val;
}
else if( arg == "p" || arg == "port" )
{
m_pConfig->getConfig()->lobbyNetwork.listenPort = std::stoi( val );
m_config.network.listenPort = std::stoi( val );
}
else if( arg == "worldip" || arg == "worldip" )
{
m_pConfig->getConfig()->globalNetwork.zoneHost = val;
m_config.global.network.zoneHost = val;
}
else if( arg == "worldport" )
{
m_pConfig->getConfig()->globalNetwork.zonePort = std::stoi( val );
m_config.global.network.zonePort = std::stoi( val );
}
}
catch( ... )
@ -128,13 +149,13 @@ namespace Sapphire
}
}
m_port = m_pConfig->getConfig()->lobbyNetwork.listenPort;
m_ip = m_pConfig->getConfig()->lobbyNetwork.listenIp;
m_port = m_config.network.listenPort;
m_ip = m_config.network.listenIp;
g_restConnector.restHost = m_pConfig->getConfig()->globalNetwork.restHost + ":" +
std::to_string( m_pConfig->getConfig()->globalNetwork.restPort );
g_restConnector.serverSecret = m_pConfig->getConfig()->globalParameters.serverSecret;
g_restConnector.restHost = m_config.global.network.restHost + ":" +
std::to_string( m_config.global.network.restPort );
g_restConnector.serverSecret = m_config.global.parameters.serverSecret;
return true;
}

View file

@ -4,6 +4,7 @@
#include <map>
#include <memory>
#include <Config/ConfigDef.h>
#include "Forwards.h"
const std::string LOBBY_VERSION = "0.0.5";
@ -44,12 +45,14 @@ namespace Sapphire
m_sessionMap[ std::string( sessionId ) ] = pSession;
}
std::shared_ptr< ConfigMgr > getConfig() const;
Sapphire::Common::Config::LobbyConfig& getConfig();
LobbySessionPtr getSession( char* sessionId );
uint32_t m_numConnections;
Sapphire::Common::Config::LobbyConfig m_config;
};
}

View file

@ -1,6 +1,6 @@
#include "ServerLobby.h"
Sapphire::ServerLobby g_serverLobby( "config.ini" );
Sapphire::ServerLobby g_serverLobby( "lobby.ini" );
int main( int32_t argc, char* argv[] )
{

View file

@ -1,7 +1,6 @@
#include <Common.h>
#include <Logging/Logger.h>
#include <Network/PacketContainer.h>
#include <Config/ConfigMgr.h>
#include "Network/GameConnection.h"
#include "Network/PacketWrappers/ActorControlPacket142.h"
@ -326,8 +325,8 @@ void Sapphire::Entity::Player::eventItemActionStart( uint32_t eventId,
void Sapphire::Entity::Player::onLogin()
{
auto pConfig = m_pFw->get< ConfigMgr >();
auto motd = pConfig->getConfig()->general.motd;
auto pServerMgr = m_pFw->get< Sapphire::World::ServerMgr >();
auto motd = pServerMgr->getConfig().motd;
std::istringstream ss( motd );
std::string msg;

View file

@ -1,7 +1,7 @@
#include "NativeScriptMgr.h"
#include <Crypt/md5.h>
#include <Config/ConfigMgr.h>
#include "ServerMgr.h"
#include "Framework.h"
@ -124,8 +124,8 @@ namespace Sapphire::Scripting
NativeScriptMgr::NativeScriptMgr( FrameworkPtr pFw ) :
World::Manager::BaseManager( pFw )
{
auto pConfig = framework()->get< ConfigMgr >();
m_loader.setCachePath( pConfig->getConfig()->scripts.cachePath );
auto pServerMgr = framework()->get< Sapphire::World::ServerMgr >();
m_loader.setCachePath( pServerMgr->getConfig().scripts.cachePath );
}

View file

@ -1,6 +1,5 @@
#include <Logging/Logger.h>
#include <Exd/ExdDataGenerated.h>
#include <Config/ConfigMgr.h>
#include <watchdog/Watchdog.h>
@ -48,9 +47,9 @@ void Sapphire::Scripting::ScriptMgr::update()
bool Sapphire::Scripting::ScriptMgr::init()
{
std::set< std::string > files;
auto pConfig = framework()->get< ConfigMgr >();
auto pServerMgr = framework()->get< World::ServerMgr >();
auto status = loadDir( pConfig->getConfig()->scripts.path, files, m_nativeScriptMgr->getModuleExtension() );
auto status = loadDir( pServerMgr->getConfig().scripts.path, files, m_nativeScriptMgr->getModuleExtension() );
if( !status )
{
@ -80,12 +79,12 @@ bool Sapphire::Scripting::ScriptMgr::init()
void Sapphire::Scripting::ScriptMgr::watchDirectories()
{
auto pConfig = framework()->get< ConfigMgr >();
auto shouldWatch = pConfig->getConfig()->scripts.hotSwap;
auto pServerMgr = framework()->get< World::ServerMgr >();
auto shouldWatch = pServerMgr->getConfig().scripts.hotSwap;
if( !shouldWatch )
return;
Watchdog::watchMany( pConfig->getConfig()->scripts.path + "*" +
Watchdog::watchMany( pServerMgr->getConfig().scripts.path + "*" +
m_nativeScriptMgr->getModuleExtension(),
[ this ]( const std::vector< ci::fs::path >& paths )
{

View file

@ -67,15 +67,43 @@ bool Sapphire::World::ServerMgr::loadSettings( int32_t argc, char* argv[] )
Logger::info( "Loading config {0}", m_configName );
bool failedLoad = false;
// load global cfg first
if( !pConfig->loadGlobalConfig( m_config.global ) )
{
Logger::fatal( "Error loading config global.ini, copying default..." );
failedLoad = true;
}
if( !pConfig->loadConfig( m_configName ) )
{
Logger::fatal( "Error loading config {0}", m_configName );
Logger::fatal( "If this is the first time starting the server, we've copied the default one for your editing pleasure." );
failedLoad = true;
}
if( failedLoad )
{
Logger::fatal( "If this is the first time starting the server, "
"we've copied the default configs for your editing pleasure." );
return false;
}
m_port = pConfig->getConfig()->zoneNetwork.listenPort;
m_ip = pConfig->getConfig()->zoneNetwork.listenIp;
// load world specific config
m_config.scripts.hotSwap = pConfig->getValue( "Scripts", "HotSwap", true );
m_config.scripts.path = pConfig->getValue< std::string >( "Scripts", "Path", "./compiledscripts/" );
m_config.scripts.cachePath = pConfig->getValue< std::string >( "Scripts", "CachePath", "./cache/" );
m_config.network.disconnectTimeout = pConfig->getValue< uint16_t >( "Network", "DisconnectTimeout", 20 );
m_config.network.listenIp = pConfig->getValue< std::string >( "Network", "ListenIp", "0.0.0.0" );
m_config.network.listenPort = pConfig->getValue< uint16_t >( "Network", "ListenPort", 54992 );
m_config.motd = pConfig->getValue< std::string >( "General", "MotD", "" );
m_config.housing.defaultEstateName = pConfig->getValue< std::string >( "Housing", "DefaultEstateName", "Estate #{}" );
m_port = m_config.network.listenPort;
m_ip = m_config.network.listenIp;
return true;
}
@ -99,7 +127,7 @@ void Sapphire::World::ServerMgr::run( int32_t argc, char* argv[] )
Logger::info( "Setting up generated EXD data" );
auto pExdData = std::make_shared< Data::ExdDataGenerated >();
auto dataPath = pConfig->getConfig()->globalParameters.dataPath;
auto dataPath = m_config.global.parameters.dataPath;
if( !pExdData->init( dataPath ) )
{
Logger::fatal( "Error setting up generated EXD data. Make sure that DataPath is set correctly in config.ini" );
@ -109,13 +137,13 @@ void Sapphire::World::ServerMgr::run( int32_t argc, char* argv[] )
framework()->set< Data::ExdDataGenerated >( pExdData );
Sapphire::Db::ConnectionInfo info;
info.password = pConfig->getConfig()->database.password;
info.host = pConfig->getConfig()->database.host;
info.database = pConfig->getConfig()->database.database;
info.port = pConfig->getConfig()->database.port;
info.user = pConfig->getConfig()->database.username;
info.syncThreads = pConfig->getConfig()->database.syncThreads;
info.asyncThreads = pConfig->getConfig()->database.asyncThreads;
info.password = m_config.global.database.password;
info.host = m_config.global.database.host;
info.database = m_config.global.database.database;
info.port = m_config.global.database.port;
info.user = m_config.global.database.username;
info.syncThreads = m_config.global.database.syncThreads;
info.asyncThreads = m_config.global.database.asyncThreads;
auto pDb = std::make_shared< Db::DbWorkerPool< Db::ZoneDbConnection > >();
Sapphire::Db::DbLoader loader;
@ -461,3 +489,8 @@ Sapphire::Entity::BNpcTemplatePtr Sapphire::World::ServerMgr::getBNpcTemplate( u
return nullptr;
}
Sapphire::Common::Config::WorldConfig& Sapphire::World::ServerMgr::getConfig()
{
return m_config;
}

View file

@ -7,6 +7,7 @@
#include <map>
#include "ForwardsZone.h"
#include "Manager/BaseManager.h"
#include <Config/ConfigDef.h>
namespace Sapphire::World
{
@ -18,6 +19,8 @@ namespace Sapphire::World
~ServerMgr() override;
using WorldConfigPtr = std::shared_ptr< Sapphire::Common::Config::WorldConfig >;
void run( int32_t argc, char* argv[] );
bool createSession( uint32_t sessionId );
@ -48,6 +51,8 @@ namespace Sapphire::World
std::string getPlayerNameFromDb( uint32_t playerId, bool forceDbLoad = false );
void updatePlayerName( uint32_t playerId, const std::string& playerNewName );
Sapphire::Common::Config::WorldConfig& getConfig();
private:
uint16_t m_port;
std::string m_ip;
@ -59,6 +64,8 @@ namespace Sapphire::World
std::mutex m_sessionMutex;
Sapphire::Common::Config::WorldConfig m_config;
std::map< uint32_t, SessionPtr > m_sessionMapById;
std::map< std::string, SessionPtr > m_sessionMapByName;
std::map< uint32_t, std::string > m_playerNameMapById;

View file

@ -9,7 +9,7 @@ using namespace Sapphire::World;
int main( int32_t argc, char* argv[] )
{
auto pFramework = Sapphire::make_Framework();
auto pServer = std::make_shared< ServerMgr >( "config.ini", pFramework );
auto pServer = std::make_shared< ServerMgr >( "world.ini", pFramework );
pFramework->set< ServerMgr >( pServer );
pServer->run( argc, argv );
return 0;