int Sphere_InitServer( int argc, char *argv[] ) { #ifdef EXCEPTIONS_DEBUG const char *m_sClassName = "Sphere"; #endif EXC_TRY("Init"); ASSERT(MAX_BUFFER >= sizeof(CEvent)); ASSERT(sizeof(int) == sizeof(DWORD)); // make this assumption often. ASSERT(sizeof(ITEMID_TYPE) == sizeof(DWORD)); ASSERT(sizeof(WORD) == 2 ); ASSERT(sizeof(DWORD) == 4 ); ASSERT(sizeof(NWORD) == 2 ); ASSERT(sizeof(NDWORD) == 4 ); ASSERT(sizeof(CUOItemTypeRec) == 37 ); // byte pack working ? ASSERT((std::numeric_limits<size_t>::min)() == 0); // ensure unsigned #ifdef _WIN32 if ( !QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER *>(&llTimeProfileFrequency)) ) llTimeProfileFrequency = 1000; #if !defined(_DEBUG) && !defined(__MINGW32__) EXC_SET("setting exception catcher"); SetExceptionTranslator(); #endif #endif EXC_SET("loading"); if ( !g_Serv.Load() ) return -3; if ( argc > 1 ) { EXC_SET("cmdline"); if ( !g_Serv.CommandLine(argc, argv) ) return -1; } WritePidFile(2); EXC_SET("load world"); if ( !g_World.LoadAll() ) return -8; EXC_SET("sockets init"); if ( !g_Serv.SocketsInit() ) return -9; // load auto-complete dictionary EXC_SET("auto-complete"); { CFileText dict; if ( dict.Open(SPHERE_FILE ".dic", OF_READ|OF_TEXT|OF_DEFAULTMODE) ) { TCHAR * pszTemp = Str_GetTemp(); size_t count = 0; while ( !dict.IsEOF() ) { dict.ReadString(pszTemp, SCRIPT_MAX_LINE_LEN-1); if ( *pszTemp ) { TCHAR *c = strchr(pszTemp, '\r'); if ( c != NULL ) *c = '\0'; c = strchr(pszTemp, '\n'); if ( c != NULL ) *c = '\0'; if ( *pszTemp != '\0' ) { count++; g_AutoComplete.AddTail(pszTemp); } } } g_Log.Event(LOGM_INIT, "Auto-complete dictionary loaded (contains %" FMTSIZE_T " words)\n", count); dict.Close(); } } EXC_SET("finalizing"); g_Serv.SetServerMode(SERVMODE_Run); g_Log.Event(LOGM_INIT, "Startup complete (Items=%lu, Chars=%lu, Accounts=%lu)\nPress '?' for console commands\n\n", g_Serv.StatGet(SERV_STAT_ITEMS), g_Serv.StatGet(SERV_STAT_CHARS), g_Serv.StatGet(SERV_STAT_ACCOUNTS)); if ( !g_Accounts.Account_GetCount() ) g_Log.Event(LOGL_WARN|LOGM_INIT, "The server has no accounts. To create admin account you must type:\n ACCOUNT ADD [login] [password]\n ACCOUNT [login] PLEVEL 7\n"); // Trigger server start g_Serv.r_Call("f_onserver_start", &g_Serv, NULL); return g_Serv.m_iExitFlag; EXC_CATCH; EXC_DEBUG_START; g_Log.EventDebug("cmdline argc=%d starting with %p (argv1='%s')\n", argc, static_cast<void *>(argv), ( argc > 2 ) ? argv[1] : ""); EXC_DEBUG_END; return -10; }
int Sphere_InitServer( int argc, char *argv[] ) { const char *m_sClassName = "Sphere"; EXC_TRY("Init"); ASSERT(MAX_BUFFER >= sizeof(CCommand)); ASSERT(MAX_BUFFER >= sizeof(CEvent)); ASSERT(sizeof(int) == sizeof(DWORD)); // make this assumption often. ASSERT(sizeof(ITEMID_TYPE) == sizeof(DWORD)); ASSERT(sizeof(WORD) == 2 ); ASSERT(sizeof(DWORD) == 4 ); ASSERT(sizeof(NWORD) == 2 ); ASSERT(sizeof(NDWORD) == 4 ); ASSERT(sizeof(CUOItemTypeRec) == 37 ); // byte pack working ? ASSERT((std::numeric_limits<size_t>::min)() == 0); // ensure unsigned #ifdef _WIN32 if ( !QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER *>(&llTimeProfileFrequency))) llTimeProfileFrequency = 1000; EXC_SET("setting exception catcher"); SetExceptionTranslator(); #endif // _WIN32 EXC_SET("loading"); if ( !g_Serv.Load() ) return -3; if ( argc > 1 ) { EXC_SET("cmdline"); if ( !g_Serv.CommandLine(argc, argv) ) return -1; } WritePidFile(2); EXC_SET("sockets init"); if ( !g_Serv.SocketsInit() ) return -9; EXC_SET("load world"); if ( !g_World.LoadAll() ) return -8; // load auto-complete dictionary EXC_SET("auto-complete"); { CFileText dict; if ( dict.Open(GRAY_FILE ".dic", OF_READ|OF_TEXT|OF_DEFAULTMODE) ) { TCHAR * pszTemp = Str_GetTemp(); size_t count = 0; while ( !dict.IsEOF() ) { dict.ReadString(pszTemp, SCRIPT_MAX_LINE_LEN-1); if ( *pszTemp ) { TCHAR *c = strchr(pszTemp, '\r'); if ( c != NULL ) *c = '\0'; c = strchr(pszTemp, '\n'); if ( c != NULL ) *c = '\0'; if ( *pszTemp != '\0' ) { count++; g_AutoComplete.AddTail(pszTemp); } } } g_Log.Event(LOGM_INIT, "Auto-complete dictionary loaded (contains %" FMTSIZE_T " words).\n", count); dict.Close(); } } g_Serv.SetServerMode(SERVMODE_Run); // ready to go. // Display EF/OF Flags g_Cfg.PrintEFOFFlags(); EXC_SET("finilizing"); g_Log.Event(LOGM_INIT, "%s", g_Serv.GetStatusString(0x24)); g_Log.Event(LOGM_INIT, "Startup complete. items=%lu, chars=%lu\n", g_Serv.StatGet(SERV_STAT_ITEMS), g_Serv.StatGet(SERV_STAT_CHARS)); #ifdef _WIN32 g_Log.Event(LOGM_INIT, "Press '?' for console commands\n"); #endif // Trigger server start g_Serv.r_Call("f_onserver_start", &g_Serv, NULL); return 0; EXC_CATCH; EXC_DEBUG_START; g_Log.EventDebug("cmdline argc=%d starting with %p (argv1='%s')\n", argc, static_cast<void *>(argv), ( argc > 2 ) ? argv[1] : ""); EXC_DEBUG_END; return -10; }