diff --git a/src/api/CMakeLists.txt b/src/api/CMakeLists.txt index c30aded2..baca5da6 100644 --- a/src/api/CMakeLists.txt +++ b/src/api/CMakeLists.txt @@ -11,11 +11,11 @@ set_target_properties( api PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS ON - RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" ) target_link_libraries( api common ) diff --git a/src/lobby/CMakeLists.txt b/src/lobby/CMakeLists.txt index cc262001..fc4e2067 100644 --- a/src/lobby/CMakeLists.txt +++ b/src/lobby/CMakeLists.txt @@ -9,24 +9,24 @@ file( GLOB SERVER_SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}*.c*" ) add_executable( lobby ${SERVER_PUBLIC_INCLUDE_FILES} ${SERVER_SOURCE_FILES} ) set_target_properties( lobby - PROPERTIES + PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS ON - RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" ) target_link_libraries( lobby PRIVATE - common + common mysql ) if( UNIX ) target_link_libraries( lobby - PRIVATE - stdc++fs ) + PRIVATE + stdc++fs ) endif() diff --git a/src/scripts/CMakeLists.txt b/src/scripts/CMakeLists.txt index 8b45aed0..9d6f39f2 100644 --- a/src/scripts/CMakeLists.txt +++ b/src/scripts/CMakeLists.txt @@ -49,8 +49,8 @@ foreach(_scriptDir ${children}) LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${SCRIPT_LIB_DIR}" ) endif() - target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/servers/sapphire_zone/") - target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/servers/Script/Scripts") + target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/world/") + target_include_directories("script_${_name}" PUBLIC "${CMAKE_SOURCE_DIR}/src/scripts") target_include_directories("script_${_name}" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") target_include_directories("script_${_name}" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/Scripts") diff --git a/src/world/CMakeLists.txt b/src/world/CMakeLists.txt index b01db168..98583cba 100644 --- a/src/world/CMakeLists.txt +++ b/src/world/CMakeLists.txt @@ -29,11 +29,11 @@ set_target_properties( world PROPERTIES CXX_EXTENSIONS ON ENABLE_EXPORTS ON WINDOWS_EXPORT_ALL_SYMBOLS ON - RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" - VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/" + RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" + VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../bin/" ) diff --git a/src/world/Manager/TerritoryMgr.cpp b/src/world/Manager/TerritoryMgr.cpp index 7859f7cf..cd1a2301 100644 --- a/src/world/Manager/TerritoryMgr.cpp +++ b/src/world/Manager/TerritoryMgr.cpp @@ -46,11 +46,18 @@ bool Sapphire::World::Manager::TerritoryMgr::isValidTerritory( uint32_t territor bool Sapphire::World::Manager::TerritoryMgr::init() { - loadTerritoryTypeDetailCache(); - loadTerritoryPositionMap(); + try + { + loadTerritoryTypeDetailCache(); + loadTerritoryPositionMap(); - createDefaultTerritories(); - createHousingTerritories(); + createDefaultTerritories(); + createHousingTerritories(); + } + catch( std::runtime_error& ) + { + return false; + } return true; } diff --git a/src/world/ServerMgr.cpp b/src/world/ServerMgr.cpp index bbb1f4d5..b1b92588 100644 --- a/src/world/ServerMgr.cpp +++ b/src/world/ServerMgr.cpp @@ -26,6 +26,17 @@ #include "Script/ScriptMgr.h" +#include + +#include +#include +#include "Manager/LinkshellMgr.h" +#include "Manager/TerritoryMgr.h" +#include "Manager/HousingMgr.h" +#include "DebugCommand/DebugCommandHandler.h" +#include "Manager/PlayerMgr.h" +#include "Manager/ShopMgr.h" + extern Sapphire::Framework g_fw; @@ -52,8 +63,6 @@ bool Sapphire::ServerMgr::loadSettings( int32_t argc, char* argv[] ) { auto pLog = g_fw.get< Sapphire::Logger >(); auto pConfig = g_fw.get< Sapphire::ConfigMgr >(); - auto pExd = g_fw.get< Data::ExdDataGenerated >(); - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); pLog->info( "Loading config " + m_configName ); @@ -63,69 +72,40 @@ bool Sapphire::ServerMgr::loadSettings( int32_t argc, char* argv[] ) return false; } - std::vector< std::string > args( argv + 1, argv + argc ); - for( uint32_t i = 0; i + 1 < args.size(); i += 2 ) + m_port = pConfig->getValue< uint16_t >( "ZoneNetwork", "ListenPort", 54992 ); + m_ip = pConfig->getValue< std::string >( "ZoneNetwork", "ListenIp", "0.0.0.0" ); + + return true; +} + +void Sapphire::ServerMgr::run( int32_t argc, char* argv[] ) +{ + using namespace Sapphire; + using namespace Sapphire::World; + + auto pLog = std::make_shared< Logger >(); + pLog->setLogPath( "log/world" ); + pLog->init(); + g_fw.set< Logger >( pLog ); + + printBanner(); + + auto pConfig = std::make_shared< ConfigMgr >(); + g_fw.set< ConfigMgr >( pConfig ); + if( !loadSettings( argc, argv ) ) { - std::string arg( "" ); - std::string val( "" ); - - try - { - arg = Util::toLowerCopy( std::string( args[ i ] ) ); - val = std::string( args[ i + 1 ] ); - - // trim '-' from start of arg - arg = arg.erase( 0, arg.find_first_not_of( '-' ) ); - - if( arg == "ip" ) - { - // todo: ip addr in config - pConfig->setValue< std::string >( "ZoneNetwork.ListenIp", val ); - } - else if( arg == "p" || arg == "port" ) - { - pConfig->setValue< std::string >( "ZoneNetwork.ListenPort", val ); - } - else if( arg == "exdpath" || arg == "datapath" ) - { - pConfig->setValue< std::string >( "GlobalParameters.DataPath", val ); - } - else if( arg == "h" || arg == "dbhost" ) - { - pConfig->setValue< std::string >( "Database.Host", val ); - } - else if( arg == "dbport" ) - { - pConfig->setValue< std::string >( "Database.Port", val ); - } - else if( arg == "u" || arg == "user" || arg == "dbuser" ) - { - pConfig->setValue< std::string >( "Database.Username", val ); - } - else if( arg == "pass" || arg == "dbpass" ) - { - pConfig->setValue< std::string >( "Database.Password", val ); - } - else if( arg == "d" || arg == "db" || arg == "database" ) - { - pConfig->setValue< std::string >( "Database.Database", val ); - } - } - catch( ... ) - { - pLog->error( "Error parsing argument: " + arg + " " + "value: " + val + "\n" ); - pLog->error( "Usage: \n" ); - } + pLog->fatal( "Unable to load settings!" ); + return; } pLog->info( "Setting up generated EXD data" ); - if( !pExd->init( pConfig->getValue< std::string >( "GlobalParameters", "DataPath", "" ) ) ) + auto pExdData = std::make_shared< Data::ExdDataGenerated >(); + if( !pExdData->init( pConfig->getValue< std::string >( "GlobalParameters", "DataPath", "" ) ) ) { pLog->fatal( "Error setting up generated EXD data " ); - return false; + return; } - - Sapphire::Db::DbLoader loader; + g_fw.set< Data::ExdDataGenerated >( pExdData ); Sapphire::Db::ConnectionInfo info; info.password = pConfig->getValue< std::string >( "Database", "Password", "" ); @@ -136,52 +116,61 @@ bool Sapphire::ServerMgr::loadSettings( int32_t argc, char* argv[] ) info.syncThreads = pConfig->getValue< uint8_t >( "Database", "SyncThreads", 2 ); info.asyncThreads = pConfig->getValue< uint8_t >( "Database", "AsyncThreads", 2 ); + auto pDb = std::make_shared< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + Sapphire::Db::DbLoader loader; loader.addDb( *pDb, info ); if( !loader.initDbs() ) - return false; - - m_port = pConfig->getValue< uint16_t >( "ZoneNetwork", "ListenPort", 54992 ); - m_ip = pConfig->getValue< std::string >( "ZoneNetwork", "ListenIp", "0.0.0.0" ); - - return true; -} - -void Sapphire::ServerMgr::run( int32_t argc, char* argv[] ) -{ - auto pLog = g_fw.get< Sapphire::Logger >(); - auto pScript = g_fw.get< Scripting::ScriptMgr >(); - auto pLsMgr = g_fw.get< LinkshellMgr >(); - auto pTeriMgr = g_fw.get< TerritoryMgr >(); - - printBanner(); - - if( !loadSettings( argc, argv ) ) { - pLog->fatal( "Unable to load settings!" ); + pLog->fatal( "Database not initialized properly!" ); return; } + g_fw.set< Db::DbWorkerPool< Db::ZoneDbConnection > >( pDb ); pLog->info( "LinkshellMgr: Caching linkshells" ); + auto pLsMgr = std::make_shared< Manager::LinkshellMgr >(); if( !pLsMgr->loadLinkshells() ) { pLog->fatal( "Unable to load linkshells!" ); return; } + g_fw.set< Manager::LinkshellMgr >( pLsMgr ); + + auto pScript = std::make_shared< Scripting::ScriptMgr >(); + if( !pScript->init() ) + { + pLog->fatal( "Failed to setup scripts!" ); + return; + } + g_fw.set< Scripting::ScriptMgr >( pScript ); + + pLog->info( "TerritoryMgr: Setting up zones" ); + auto pTeriMgr = std::make_shared< Manager::TerritoryMgr >(); + auto pHousingMgr = std::make_shared< Manager::HousingMgr >(); + g_fw.set< Manager::HousingMgr >( pHousingMgr ); + g_fw.set< Manager::TerritoryMgr >( pTeriMgr ); + if( !pTeriMgr->init() ) + { + pLog->fatal( "Failed to setup zones!" ); + return; + } + + loadBNpcTemplates(); Network::HivePtr hive( new Network::Hive() ); Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive ); - pScript->init(); - - pLog->info( "TerritoryMgr: Setting up zones" ); - pTeriMgr->init(); - - loadBNpcTemplates(); - std::vector< std::thread > thread_list; thread_list.emplace_back( std::thread( std::bind( &Network::Hive::Run, hive.get() ) ) ); - pLog->info( "Zone server running on " + m_ip + ":" + std::to_string( m_port ) ); + auto pDebugCom = std::make_shared< DebugCommandHandler >(); + auto pPlayerMgr = std::make_shared< Manager::PlayerMgr >(); + auto pShopMgr = std::make_shared< Manager::ShopMgr >(); + + g_fw.set< DebugCommandHandler >( pDebugCom ); + g_fw.set< Manager::PlayerMgr >( pPlayerMgr ); + g_fw.set< Manager::ShopMgr >( pShopMgr ); + + pLog->info( "World server running on " + m_ip + ":" + std::to_string( m_port ) ); mainLoop(); diff --git a/src/world/mainGameServer.cpp b/src/world/mainGameServer.cpp index 142d094c..b2c110c3 100644 --- a/src/world/mainGameServer.cpp +++ b/src/world/mainGameServer.cpp @@ -2,17 +2,6 @@ #include "ServerMgr.h" #include -#include -#include -#include "Script/ScriptMgr.h" -#include -#include -#include "Manager/LinkshellMgr.h" -#include "Manager/TerritoryMgr.h" -#include "Manager/HousingMgr.h" -#include "DebugCommand/DebugCommandHandler.h" -#include "Manager/PlayerMgr.h" -#include "Manager/ShopMgr.h" #include @@ -24,35 +13,8 @@ using namespace Sapphire::World; bool setupFramework() { auto pServer = std::make_shared< ServerMgr >( "config.ini" ); - auto pLogger = std::make_shared< Logger >(); - auto pExdData = std::make_shared< Data::ExdDataGenerated >(); - auto pScript = std::make_shared< Scripting::ScriptMgr >(); - auto pDb = std::make_shared< Db::DbWorkerPool< Db::ZoneDbConnection > >(); - auto pDebugCom = std::make_shared< DebugCommandHandler >(); - auto pConfig = std::make_shared< ConfigMgr >(); - auto pPlayerMgr = std::make_shared< Manager::PlayerMgr >(); - auto pShopMgr = std::make_shared< Manager::ShopMgr >(); - auto pLsMgr = std::make_shared< Manager::LinkshellMgr >(); - auto pTeriMgr = std::make_shared< Manager::TerritoryMgr >(); - auto pHousingMgr = std::make_shared< Manager::HousingMgr >(); - - pLogger->setLogPath( "log/SapphireZone" ); - pLogger->init(); - g_fw.set< ServerMgr >( pServer ); - g_fw.set< Logger >( pLogger ); - g_fw.set< Data::ExdDataGenerated >( pExdData ); - g_fw.set< Scripting::ScriptMgr >( pScript ); - g_fw.set< Db::DbWorkerPool< Db::ZoneDbConnection > >( pDb ); - g_fw.set< Manager::LinkshellMgr >( pLsMgr ); - g_fw.set< Manager::HousingMgr >( pHousingMgr ); - g_fw.set< Manager::TerritoryMgr >( pTeriMgr ); - g_fw.set< DebugCommandHandler >( pDebugCom ); - g_fw.set< ConfigMgr >( pConfig ); - g_fw.set< Manager::PlayerMgr >( pPlayerMgr ); - g_fw.set< Manager::ShopMgr >( pShopMgr ); - // actuall catch errors here... return true; }