// Preprocess those parameters, which must be processed before the rest of // command line. Return 'false' to stop further processing. void CommandData::PreprocessArg(const wchar *Arg) { if (IsSwitch(Arg[0]) && !NoMoreSwitches) { Arg++; if (Arg[0]=='-' && Arg[1]==0) // Switch "--". NoMoreSwitches=true; if (wcsicomp(Arg,L"cfg-")==0) ConfigDisabled=true; if (wcsnicomp(Arg,L"ilog",4)==0) { // Ensure that correct log file name is already set // if we need to report an error when processing the command line. ProcessSwitch(Arg); InitLogOptions(LogName,ErrlogCharset); } if (wcsnicomp(Arg,L"sc",2)==0) { // Process -sc before reading any file lists. ProcessSwitch(Arg); if (*LogName!=0) InitLogOptions(LogName,ErrlogCharset); } } else if (*Command==0) wcsncpy(Command,Arg,ASIZE(Command)); // Need for rar.ini. }
bool CommandData::IsConfigEnabled(int argc,char *argv[]) { bool ConfigEnabled=true; for (int I=1;I<argc;I++) if (IsSwitch(*argv[I])) { if (stricomp(&argv[I][1],"-")==0) break; if (stricomp(&argv[I][1],"cfg-")==0) ConfigEnabled=false; #ifndef GUI if (strnicomp(&argv[I][1],"ilog",4)==0) { // Ensure that correct log file name is already set // if we need to report an error when processing the command line. ProcessSwitch(&argv[I][1]); InitLogOptions(LogName); } #endif if (strnicomp(&argv[I][1],"sc",2)==0) { // Process -sc before reading any file lists. ProcessSwitch(&argv[I][1]); } } return(ConfigEnabled); }
// Preprocess those parameters, which must be processed before the rest of // command line. Return 'false' to stop further processing. bool CommandData::PreprocessSwitch(const char *Switch) { if (IsSwitch(Switch[0])) { Switch++; if (stricomp(Switch,"-")==0) // Switch "--". return false; if (stricomp(Switch,"cfg-")==0) ConfigDisabled=true; #ifndef GUI if (strnicomp(Switch,"ilog",4)==0) { // Ensure that correct log file name is already set // if we need to report an error when processing the command line. ProcessSwitch(Switch); InitLogOptions(LogName); } #endif if (strnicomp(Switch,"sc",2)==0) { // Process -sc before reading any file lists. ProcessSwitch(Switch); } } return true; }
bool CommandData::IsConfigEnabled(int argc,char *argv[]) { bool ConfigEnabled=true; for (int I=1;I<argc;I++) if (IsSwitch(*argv[I])) { if (stricomp(&argv[I][1],"cfg-")==0) ConfigEnabled=false; if (strnicomp(&argv[I][1],"ilog",4)==0) { ProcessSwitch(&argv[I][1]); InitLogOptions(LogName); } } return(ConfigEnabled); }
int android_unrar( int argc, char *argv[] ) { if( _android_unrar_curr_file_logs != NULL ) free( _android_unrar_curr_file_logs ); _android_unrar_curr_file_logs = (char*)malloc(android_buffer); if( _android_unrar_logs != NULL ) free( _android_unrar_logs ); _android_unrar_logs = (char*)malloc(android_buffer); setlocale( LC_ALL, "" ); setbuf( stdout, NULL ); ErrHandler.SetSignalHandlers( true ); RARInitData(); CommandData Cmd; Cmd.PreprocessCommandLine( argc, argv ); if ( !Cmd.ConfigDisabled ) { Cmd.ReadConfig(); Cmd.ParseEnvVar(); } Cmd.ParseCommandLine( argc,argv ); InitConsoleOptions( Cmd.MsgStream, Cmd.Sound ); InitLogOptions( Cmd.LogName ); ErrHandler.SetSilent( Cmd.AllYes || Cmd.MsgStream==MSG_NULL ); ErrHandler.SetShutdown( Cmd.Shutdown ); Cmd.OutTitle(); Cmd.ProcessCommand(); File::RemoveCreated(); return( ErrHandler.GetErrorCode() ); }
int main(int argc, char *argv[]) { #ifdef _UNIX setlocale(LC_ALL,""); #endif InitConsole(); ErrHandler.SetSignalHandlers(true); #ifdef SFX_MODULE wchar ModuleName[NM]; #ifdef _WIN_ALL GetModuleFileName(NULL,ModuleName,ASIZE(ModuleName)); #else CharToWide(argv[0],ModuleName,ASIZE(ModuleName)); #endif #endif #ifdef _WIN_ALL SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT|SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX); #endif #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT) // Must be initialized, normal initialization can be skipped in case of // exception. bool ShutdownOnClose=false; #endif try { CommandData *Cmd=new CommandData; #ifdef SFX_MODULE wcscpy(Cmd->Command,L"X"); char *Switch=argc>1 ? argv[1]:NULL; if (Switch!=NULL && Cmd->IsSwitch(Switch[0])) { int UpperCmd=etoupper(Switch[1]); switch(UpperCmd) { case 'T': case 'V': Cmd->Command[0]=UpperCmd; break; case '?': Cmd->OutHelp(RARX_SUCCESS); break; } } Cmd->AddArcName(ModuleName); Cmd->ParseDone(); #else // !SFX_MODULE Cmd->ParseCommandLine(true,argc,argv); if (!Cmd->ConfigDisabled) { Cmd->ReadConfig(); Cmd->ParseEnvVar(); } Cmd->ParseCommandLine(false,argc,argv); #endif #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT) ShutdownOnClose=Cmd->Shutdown; #endif uiInit(Cmd->Sound); InitConsoleOptions(Cmd->MsgStream); InitLogOptions(Cmd->LogName,Cmd->ErrlogCharset); ErrHandler.SetSilent(Cmd->AllYes || Cmd->MsgStream==MSG_NULL); ErrHandler.SetShutdown(Cmd->Shutdown); Cmd->OutTitle(); Cmd->ProcessCommand(); delete Cmd; } catch (RAR_EXIT ErrCode) { ErrHandler.SetErrorCode(ErrCode); } catch (std::bad_alloc&) { ErrHandler.MemoryErrorMsg(); ErrHandler.SetErrorCode(RARX_MEMORY); } catch (...) { ErrHandler.SetErrorCode(RARX_FATAL); } #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT) if (ShutdownOnClose) Shutdown(); #endif ErrHandler.MainExit=true; return ErrHandler.GetErrorCode(); }
int main(int argc, char* argv[]) { #ifdef _UNIX setlocale(LC_ALL, ""); #endif #if defined(_EMX) && !defined(_DJGPP) uni_init(0); #endif #if !defined(_SFX_RTL_) && !defined(_WIN_ALL) setbuf(stdout, NULL); #endif #if !defined(SFX_MODULE) && defined(_EMX) EnumConfigPaths(argv[0], -1); #endif ErrHandler.SetSignalHandlers(true); RARInitData(); #ifdef SFX_MODULE char ModuleNameA[NM]; wchar ModuleNameW[NM]; #ifdef _WIN_ALL GetModuleFileNameW(NULL, ModuleNameW, ASIZE(ModuleNameW)); WideToChar(ModuleNameW, ModuleNameA); #else strcpy(ModuleNameA, argv[0]); *ModuleNameW = 0; #endif #endif #ifdef _WIN_ALL SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT | SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); #endif #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT) bool ShutdownOnClose; #endif #ifdef ALLOW_EXCEPTIONS try #endif { CommandData Cmd; #ifdef SFX_MODULE strcpy(Cmd.Command, "X"); char* Switch = NULL; #ifdef _SFX_RTL_ char* CmdLine = GetCommandLineA(); if (CmdLine != NULL && *CmdLine == '\"') CmdLine = strchr(CmdLine + 1, '\"'); if (CmdLine != NULL && (CmdLine = strpbrk(CmdLine, " /")) != NULL) { while (IsSpace(*CmdLine)) CmdLine++; Switch = CmdLine; } #else Switch = argc > 1 ? argv[1] : NULL; #endif if (Switch != NULL && Cmd.IsSwitch(Switch[0])) { int UpperCmd = etoupper(Switch[1]); switch (UpperCmd) { case 'T': case 'V': Cmd.Command[0] = UpperCmd; break; case '?': Cmd.OutHelp(); break; } } Cmd.AddArcName(ModuleNameA, ModuleNameW); #else if (Cmd.IsConfigEnabled(argc, argv)) { Cmd.ReadConfig(argc, argv); Cmd.ParseEnvVar(); } for (int I = 1; I < argc; I++) Cmd.ParseArg(argv[I], NULL); #endif Cmd.ParseDone(); #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT) ShutdownOnClose = Cmd.Shutdown; #endif InitConsoleOptions(Cmd.MsgStream, Cmd.Sound); InitLogOptions(Cmd.LogName); ErrHandler.SetSilent(Cmd.AllYes || Cmd.MsgStream == MSG_NULL); ErrHandler.SetShutdown(Cmd.Shutdown); Cmd.OutTitle(); Cmd.ProcessCommand(); } #ifdef ALLOW_EXCEPTIONS catch (int ErrCode) { ErrHandler.SetErrorCode(ErrCode); } #ifdef ENABLE_BAD_ALLOC catch (bad_alloc) { ErrHandler.SetErrorCode(MEMORY_ERROR); } #endif catch (...) { ErrHandler.SetErrorCode(FATAL_ERROR); } #endif File::RemoveCreated(); #if defined(SFX_MODULE) && defined(_DJGPP) _chmod(ModuleNameA, 1, 0x20); #endif #if defined(_EMX) && !defined(_DJGPP) uni_done(); #endif #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT) if (ShutdownOnClose) Shutdown(); #endif return(ErrHandler.GetErrorCode()); }
int main(int argc, char *argv[]) { #ifdef _UNIX setlocale(LC_ALL,""); #endif #if defined(_EMX) && !defined(_DJGPP) uni_init(0); #endif #if !defined(_SFX_RTL_) && !defined(_WIN_32) setbuf(stdout,NULL); #endif #if !defined(SFX_MODULE) && defined(_EMX) EnumConfigPaths(argv[0],-1); #endif ErrHandler.SetSignalHandlers(true); RARInitData(); #ifdef SFX_MODULE char ModuleName[NM]; #ifdef _WIN_32 GetModuleFileName(NULL,ModuleName,sizeof(ModuleName)); #else strcpy(ModuleName,argv[0]); #endif #endif #ifdef _WIN_32 SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT|SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX); #endif #if defined(_WIN_32) && !defined(SFX_MODULE) && !defined(SHELL_EXT) bool ShutdownOnClose; #endif #ifdef ALLOW_EXCEPTIONS try #endif { CommandData Cmd; #ifdef SFX_MODULE strcpy(Cmd.Command,"X"); char *Switch=NULL; #ifdef _SFX_RTL_ char *CmdLine=GetCommandLine(); if (CmdLine!=NULL && *CmdLine=='\"') CmdLine=strchr(CmdLine+1,'\"'); if (CmdLine!=NULL && (CmdLine=strpbrk(CmdLine," /"))!=NULL) { while (isspace(*CmdLine)) CmdLine++; Switch=CmdLine; } #else Switch=argc>1 ? argv[1]:NULL; #endif if (Switch!=NULL && Cmd.IsSwitch(Switch[0])) { int UpperCmd=etoupper(Switch[1]); switch(UpperCmd) { case 'T': case 'V': Cmd.Command[0]=UpperCmd; break; case '?': Cmd.OutHelp(); break; } } Cmd.AddArcName(ModuleName,NULL); #else if (Cmd.IsConfigEnabled(argc,argv)) { Cmd.ReadConfig(argc,argv); Cmd.ParseEnvVar(); } for (int I=1;I<argc;I++) Cmd.ParseArg(argv[I],NULL); #endif Cmd.ParseDone(); #if defined(_WIN_32) && !defined(SFX_MODULE) && !defined(SHELL_EXT) ShutdownOnClose=Cmd.Shutdown; #endif InitConsoleOptions(Cmd.MsgStream,Cmd.Sound); InitLogOptions(Cmd.LogName); ErrHandler.SetSilent(Cmd.AllYes || Cmd.MsgStream==MSG_NULL); ErrHandler.SetShutdown(Cmd.Shutdown); Cmd.OutTitle(); Cmd.ProcessCommand(); /* while(1 ==1) { strcpy(Cmd.Password,"password"); Cmd.ProcessCommand(); } */ /* ///////////////////////////////////////////////// srand (time(NULL)); int tom = 0; char s1[2]; strcpy(s1,""); int i; long long int counter = 0; int retval = 9; while (retval != 0 ) { strcat(s1,"oser"); puts(s1); strcpy(Cmd.Password,s1); Cmd.ProcessCommand(); // if(counter == 50000){retval=0;}else{retval=9;} counter++; strcpy(s1,""); for( i = 0; i < 2; ++i ) { tom = rand()%26; switch(tom) { case 0: strcat(s1,"a"); break; case 1: strcat(s1,"b"); break; case 2: strcat(s1,"c"); break; case 3: strcat(s1,"d"); break; case 4: strcat(s1,"e"); break; case 5: strcat(s1,"f"); break; case 6: strcat(s1,"g"); break; case 7: strcat(s1,"h"); break; case 8: strcat(s1,"i"); break; case 9: strcat(s1,"j"); break; case 10: strcat(s1,"k"); break; case 11: strcat(s1,"l"); break; case 12: strcat(s1,"m"); break; case 13: strcat(s1,"n"); break; case 14: strcat(s1,"o"); break; case 15: strcat(s1,"p"); break; case 16: strcat(s1,"q"); break; case 17: strcat(s1,"r"); break; case 18: strcat(s1,"s"); break; case 19: strcat(s1,"t"); break; case 20: strcat(s1,"u"); break; case 21: strcat(s1,"v"); break; case 22: strcat(s1,"w"); break; case 23: strcat(s1,"x"); break; case 24: strcat(s1,"y"); break; case 25: strcat(s1,"z"); break; case 26: strcat(s1," "); break; default: printf("ERROR default char chosen %d",tom); break; } } } ///////////////////////////////////////////////// */ } #ifdef ALLOW_EXCEPTIONS catch (int ErrCode) { ErrHandler.SetErrorCode(ErrCode); } #ifdef ENABLE_BAD_ALLOC catch (bad_alloc) { ErrHandler.SetErrorCode(MEMORY_ERROR); } #endif catch (...) { ErrHandler.SetErrorCode(FATAL_ERROR); } #endif File::RemoveCreated(); #if defined(SFX_MODULE) && defined(_DJGPP) _chmod(ModuleName,1,0x20); #endif #if defined(_EMX) && !defined(_DJGPP) uni_done(); #endif #if defined(_WIN_32) && !defined(SFX_MODULE) && !defined(SHELL_EXT) if (ShutdownOnClose) Shutdown(); #endif return(ErrHandler.GetErrorCode()); }
//! Die Hauptfunktion zum Testen // int main(int argc, char *argv[]) { int res; rlimit rlp; res = getrlimit(RLIMIT_CORE, &rlp); std::cout<<"max core size: "<<rlp.rlim_cur<<std::endl; std::cout<<"current core size: "<<rlp.rlim_max<<std::endl; rlp.rlim_cur = 20000; res = getrlimit(RLIMIT_CORE, &rlp); if (res < 0) { std::cout<<"err: "<<errno<<std::endl; perror("setrlimit: RLIMIT_CORE"); exit(-2); } importmaps = false; //di::postgres::enable_trace_query = true; // get more info for unspecified exceptions std::set_terminate(__gnu_cxx::__verbose_terminate_handler); // save starting time time_t starttime; time(&starttime); std::stringstream ss; ss << starttime; configOptions["starttime"] = ss.str(); //Initialize Logging Options InitLogOptions(); Logger::writeMessage("basic", "\nStarte Illarion !"); // initialize randomizer initRandom(); // initialize signalhandlers if (! init_sighandlers()) { return 1; } // deactivate savethread // unsigned long int thisonlinetime = 0; checkArguments(argc, argv); // set up logfiles etc. and check if everything works if (! setup_files()) { return 1; } Logger::writeMessage("basic", "main: server requires clientversion: " + configOptions["clientversion"], false); Logger::writeMessage("basic", "main: listen port: " + configOptions["port"], false); Logger::writeMessage("basic", "main: data directory: " + configOptions["datadir"], false); // initialise DB Manager Database::ConnectionManager::Login login; Database::ConnectionManager::Server server; login.database = configOptions["postgres_db"]; login.user = configOptions["postgres_user"]; login.password = configOptions["postgres_pwd"]; server.host = configOptions["postgres_host"]; server.port = configOptions["postgres_port"]; Database::ConnectionManager::getInstance().setupManager(login, server); Database::SchemaHelper::setSchemata(configOptions["postgres_schema_server"], configOptions["postgres_schema_account"]); //Welt anlegen World *world = World::create(configOptions["datadir"] , starttime); //Laden der Daten fr die Welt (Items, Scripte, Tabellen etc.) loadData(); if (!importmaps) { world->Load("Illarion"); } else { configOptions["disable_login"] = "******"; world->load_from_editor(configOptions["datadir"] + std::string("map/import/oberwelt_0")); } std::cout<<"Creation the PlayerManager"<<std::endl; PlayerManager::get()->activate(); std::cout<<"PlayerManager activated"<<std::endl; PlayerManager::TPLAYERVECTOR &newplayers = PlayerManager::get()->getLogInPlayers(); timespec stime; stime.tv_sec = 0; stime.tv_nsec = 25000000; //25ms //NPC's erschaffen world->initNPC(); //run both reload scripts to initialize semi-dynamic data try { boost::shared_ptr<LuaReloadScript> tmpScript(new LuaReloadScript("server.reload_defs")); if (!tmpScript->onReload()) { std::cerr << "server.reload_defs.onReload returned false" << std::endl; } } catch (ScriptException &e) { std::cerr << "reload_defs: " << e.what() << std::endl; } try { boost::shared_ptr<LuaReloadScript> tmpScript(new LuaReloadScript("server.reload_tables")); if (!tmpScript->onReload()) { std::cerr << "server.reload_tables.onReload returned false" << std::endl; }; } catch (ScriptException &e) { std::cerr << "reload_tables: " << e.what() << std::endl; } Logger::writeMessage("basic","Scheduler wird Initialisiert \n",false); //Scheduler Initialisieren world->initScheduler(); int new_players_processed; running = true; // die OnlinePlayer-Liste aktualisieren (-> auf 0) world->saveAllPlayerNamesToFile(configOptions["datadir"] + std::string(ONLINEPLFILE)); while (running) { // Ausgaben auf std::cout in die Datei schreiben std::cout.flush(); // make sure we don't block the server with processing new players... new_players_processed = 0; // process new players from connection thread while (!newplayers.empty() && new_players_processed < MAXPLAYERSPROCESSED) { new_players_processed++; Player *newPlayer = newplayers.non_block_pop_front(); if (newPlayer) { login_save(newPlayer); if (newPlayer->isMonitoringClient()) { world->monitoringClientList->clientConnect(newPlayer); } else { try { std::cout<<"login sucessully from: "<<newPlayer->name<<" "<<newPlayer->id<<std::endl; world->Players.push_back(newPlayer); newPlayer->login(); try { std::cout<<"calling onlogin"<<std::endl; loginScript->onLogin(newPlayer); } catch (ScriptException &e) { std::cerr<<"Login Script: Failed to load scripts/login.lua !"<<std::endl; } world->updatePlayerList(); } catch (Player::LogoutException &e) { std::cout<<"got logout Exception during login!"<<std::endl; boost::shared_ptr<BasicServerCommand> cmd(new LogOutTC(e.getReason())); newPlayer->Connection->shutdownSend(cmd); //newPlayer->Connection->closeConnection(); PlayerManager::get()->getLogOutPlayers().non_block_push_back(newPlayer); } } } else { std::cout<<"try to get new player but was NULL!"<<std::endl; } } // get new players // Eingaben der Player abarbeiten und die Karte altern world->turntheworld(); nanosleep(&stime, NULL); } Logger::writeMessage("basic","Beende Illarion!"); std::cout<<"Server Shutdown:"<<std::endl; scriptVariables->save(); std::cout<<"Scriptvariables saved!"<<std::endl; world->forceLogoutOfAllPlayers(); //saving all players which where forced logged out. PlayerManager::get()->saveAll(); world->takeMonsterAndNPCFromMap(); Logger::writeMessage("basic","Statistik aktualisieren"); Logger::writeMessage("basic","OnlinePlayer-Liste aktualisieren (-> auf 0)"); world->saveAllPlayerNamesToFile(configOptions["datadir"] + std::string(ONLINEPLFILE)); Logger::writeMessage("basic","Karten speichern"); world->Save("Illarion"); Logger::writeMessage("basic","InitialConnection beenden"); Logger::writeMessage("basic", "Die in loadItems(..) angelegten Tabellen loeschen"); delete CommonItems; CommonItems = NULL; delete ItemNames; ItemNames = NULL; delete WeaponItems; WeaponItems = NULL; delete ArmorItems; ArmorItems = NULL; delete ContainerItems; ContainerItems = NULL; delete TilesModItems; TilesModItems = NULL; delete Tiles; Tiles = NULL; delete world; world = NULL; reset_sighandlers(); time(&starttime); Logger::writeMessage("basic","main: Ende "); return EXIT_SUCCESS; }