diff options
author | Yehonal <hw.2@hotmail.it> | 2016-06-26 10:39:44 +0200 |
---|---|---|
committer | Yehonal <hw.2@hotmail.it> | 2016-06-26 10:39:44 +0200 |
commit | e8e94a0a663be0a1cefe704d8c6860a526b2d7e9 (patch) | |
tree | 7dae238916ecc5d4adc8af0a235a3501a1a536a6 /src/server/worldserver/Main.cpp |
For Azeroth!
Diffstat (limited to 'src/server/worldserver/Main.cpp')
-rw-r--r-- | src/server/worldserver/Main.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp new file mode 100644 index 0000000000..0a00f1d1b7 --- /dev/null +++ b/src/server/worldserver/Main.cpp @@ -0,0 +1,151 @@ +/* + * Copyright (C) + * Copyright (C) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/// \addtogroup Trinityd Trinity Daemon +/// @{ +/// \file + +#include <openssl/opensslv.h> +#include <openssl/crypto.h> +#include <ace/Version.h> + +#include "Common.h" +#include "Database/DatabaseEnv.h" +#include "Configuration/Config.h" + +#include "Log.h" +#include "Master.h" + +#ifndef _TRINITY_CORE_CONFIG +# define _TRINITY_CORE_CONFIG "worldserver.conf" +#endif + +#ifdef _WIN32 +#include "ServiceWin32.h" +char serviceName[] = "worldserver"; +char serviceLongName[] = "SunwellCore world service"; +char serviceDescription[] = "SunwellCore World of Warcraft emulator world service"; +/* + * -1 - not in service mode + * 0 - stopped + * 1 - running + * 2 - paused + */ +int m_ServiceStatus = -1; +#endif + +WorldDatabaseWorkerPool WorldDatabase; ///< Accessor to the world database +CharacterDatabaseWorkerPool CharacterDatabase; ///< Accessor to the character database +LoginDatabaseWorkerPool LoginDatabase; ///< Accessor to the realm/login database + +uint32 realmID; ///< Id of the realm + +/// Print out the usage string for this program on the console. +void usage(const char* prog) +{ + printf("Usage:\n"); + printf(" %s [<options>]\n", prog); + printf(" -c config_file use config_file as configuration file\n"); +#ifdef _WIN32 + printf(" Running as service functions:\n"); + printf(" --service run as service\n"); + printf(" -s install install service\n"); + printf(" -s uninstall uninstall service\n"); +#endif +} + +/// Launch the Trinity server +extern int main(int argc, char** argv) +{ + ///- Command line parsing to get the configuration file name + char const* cfg_file = _TRINITY_CORE_CONFIG; + int c = 1; + while (c < argc) + { + if (!strcmp(argv[c], "-c")) + { + if (++c >= argc) + { + printf("Runtime-Error: -c option requires an input argument"); + usage(argv[0]); + return 1; + } + else + cfg_file = argv[c]; + } + + #ifdef _WIN32 + if (strcmp(argv[c], "-s") == 0) // Services + { + if (++c >= argc) + { + printf("Runtime-Error: -s option requires an input argument"); + usage(argv[0]); + return 1; + } + + if (strcmp(argv[c], "install") == 0) + { + if (WinServiceInstall()) + printf("Installing service\n"); + return 1; + } + else if (strcmp(argv[c], "uninstall") == 0) + { + if (WinServiceUninstall()) + printf("Uninstalling service\n"); + return 1; + } + else + { + printf("Runtime-Error: unsupported option %s", argv[c]); + usage(argv[0]); + return 1; + } + } + + if (strcmp(argv[c], "--service") == 0) + WinServiceRun(); + #endif + ++c; + } + + if (!sConfigMgr->LoadInitial(cfg_file)) + { + printf("Invalid or missing configuration file : %s\n", cfg_file); + printf("Verify that the file exists and has \'[worldserver]' written in the top of the file!\n"); + return 1; + } + sLog->outString("Using configuration file %s.", cfg_file); + + sLog->outString("Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); + sLog->outString("Using ACE version: %s", ACE_VERSION); + + ///- and run the 'Master' + /// @todo Why do we need this 'Master'? Can't all of this be in the Main as for Realmd? + int ret = sMaster->Run(); + + // at sMaster return function exist with codes + // 0 - normal shutdown + // 1 - shutdown at error + // 2 - restart command used, this code can be used by restarter for restart Trinityd + + return ret; +} + +/// @} |