diff options
Diffstat (limited to 'src/mangosd/Main.cpp')
| -rw-r--r-- | src/mangosd/Main.cpp | 165 | 
1 files changed, 165 insertions, 0 deletions
diff --git a/src/mangosd/Main.cpp b/src/mangosd/Main.cpp new file mode 100644 index 00000000000..68c467d6265 --- /dev/null +++ b/src/mangosd/Main.cpp @@ -0,0 +1,165 @@ +/*  + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> + * + * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/> + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + +/// \addtogroup Trinityd Trinity Daemon +/// @{ +/// \file + +#include "Common.h" +#include "Database/DatabaseEnv.h" +#include "Config/ConfigEnv.h" +#include "Log.h" +#include "Master.h" + +#ifndef _TRINITY_CORE_CONFIG +# define _TRINITY_CORE_CONFIG  "TrinityCore.conf" +#endif //_TRINITY_CORE_CONFIG + +// Format is YYYYMMDDRR where RR is the change in the conf file +// for that day. +#ifndef _TRINITY_CORE_CONFVER +# define _TRINITY_CORE_CONFVER 2008022901 +#endif //_TRINITY_CORE_CONFVER + +#ifdef WIN32 +#include "ServiceWin32.h" +char serviceName[] = "TrinityCore"; +char serviceLongName[] = "Trinity core service"; +char serviceDescription[] = "Massive Network Game Object Server"; +/* + * -1 - not in service mode + *  0 - stopped + *  1 - running + *  2 - paused + */ +int m_ServiceStatus = -1; +#endif + +DatabaseType WorldDatabase;                                 ///< Accessor to the world database +DatabaseType CharacterDatabase;                             ///< Accessor to the character database +DatabaseType 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) +{ +    sLog.outString("Usage: \n %s [<options>]\n" +        "    -c config_file           use config_file as configuration file\n\r" +        #ifdef WIN32 +        "    Running as service functions:\n\r" +        "    --service                run as service\n\r" +        "    -s install               install service\n\r" +        "    -s uninstall             uninstall service\n\r" +        #endif +        ,prog); +} + +/// 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") == 0) +        { +            if( ++c >= argc ) +            { +                sLog.outError("Runtime-Error: -c option requires an input argument"); +                usage(argv[0]); +                return 1; +            } +            else +                cfg_file = argv[c]; +        } + +        #ifdef WIN32 +        //////////// +        //Services// +        //////////// +        if( strcmp(argv[c],"-s") == 0) +        { +            if( ++c >= argc ) +            { +                sLog.outError("Runtime-Error: -s option requires an input argument"); +                usage(argv[0]); +                return 1; +            } +            if( strcmp(argv[c],"install") == 0) +            { +                if (WinServiceInstall()) +                    sLog.outString("Installing service"); +                return 1; +            } +            else if( strcmp(argv[c],"uninstall") == 0) +            { +                if(WinServiceUninstall()) +                    sLog.outString("Uninstalling service"); +                return 1; +            } +            else +            { +                sLog.outError("Runtime-Error: unsupported option %s",argv[c]); +                usage(argv[0]); +                return 1; +            } +        } +        if( strcmp(argv[c],"--service") == 0) +        { +            WinServiceRun(); +        } +        //// +        #endif +        ++c; +    } + +    if (!sConfig.SetSource(cfg_file)) +    { +        sLog.outError("Could not find configuration file %s.", cfg_file); +        return 1; +    } +    sLog.outString("Using configuration file %s.", cfg_file); +     +    uint32 confVersion = sConfig.GetIntDefault("ConfVersion", 0); +    if (confVersion < _TRINITY_CORE_CONFVER) +    { +        sLog.outError("*****************************************************************************"); +        sLog.outError(" WARNING: Your trinitycore.conf version indicates your conf file is out of date!"); +        sLog.outError("          Please check for updates, as your current default values may cause"); +        sLog.outError("          strange behavior."); +        sLog.outError("*****************************************************************************"); +        clock_t pause = 3000 + clock(); + +        while (pause > clock()) {} +    } + +    ///- and run the 'Master' +    /// \todo Why do we need this 'Master'? Can't all of this be in the Main as for Realmd? +    return 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 +} + +/// @}  | 
