/* * mordorMain.cpp * Mordor startup functions. * ____ _ * | _ \ ___ __ _| |_ __ ___ ___ * | |_) / _ \/ _` | | '_ ` _ \/ __| * | _ < __/ (_| | | | | | | \__ \ * |_| \_\___|\__,_|_|_| |_| |_|___/ * * Permission to use, modify and distribute is granted via the * Creative Commons - Attribution - Non Commercial - Share Alike 3.0 License * http://creativecommons.org/licenses/by-nc-sa/3.0/ * * Copyright (C) 2007-2009 Jason Mitchell, Randi Mitchell * Contributions by Tim Callahan, Jonathan Hseu * Based on Mordor (C) Brooke Paul, Brett J. Vickers, John P. Freeman * */ #include <sys/stat.h> #include <sys/signal.h> #include <unistd.h> #include <errno.h> #include "version.h" #include "mud.h" #include "vprint.h" #include "commands.h" void handle_args(int argc, char *argv[]); void startup_mordor(void); unsigned short Port; extern long last_weather_update; extern int Numplayers; void startup_mordor(void) { char buf[BUFSIZ]; FILE *out; LIBXML_TEST_VERSION StartTime = time(0); printf("Starting RoH Server" VERSION " compiled on " __DATE__ " at " __TIME__ " "); #ifdef __CYGWIN__ printf("(CYGWIN)\n"); #else printf("(LINUX)\n"); #endif #ifdef NODEMOGRAPHICS printf("Demographics disabled\n"); #endif if(gServer->isValgrind()) printf("Running under valgrind\n"); gServer->init(); printf("--- Game Up: %d --- [%s]\n", Port, VERSION); loge("--- Game Up: %d --- [%s]\n", Port, VERSION); // record the process ID sprintf(buf, "%s/mordor%d.pid", LOGPATH, Port); out = fopen(buf, "w"); if(out != NULL) { fprintf(out, "%d", getpid()); fclose(out); } else { loge("couldn't create pid file %s: %s\n", buf, strerror(errno)); } std::cout << "Starting Sock Loop\n"; gServer->run(); return; } void usage(char *szName) { printf(" %s [port number] [-r]\n", szName); return; } void handle_args(int argc, char *argv[]) { int i; strncpy(gConfig->cmdline, argv[0], 255); gConfig->cmdline[255] = 0; bHavePort = 0; for(i = 1; i < argc; i++) { switch (argv[i][0]) { case '-': case '/': switch (argv[i][1]) { case 'g': case 'G': gServer->setGDB(); break; case 'r': case 'R': gServer->setRebooting(); break; case 'v': case 'V': gServer->setValgrind(); break; default: printf("Unknown option.\n"); usage(argv[0]); break; } break; default: if(is_num(argv[i])) { gConfig->portNum = (unsigned short)atoi(argv[i]); bHavePort = 1; } else { printf("Unknown option\n"); usage(argv[0]); } } } }