#include #include #include #include #include #include #include #include #include #include #include #include "Server.h" FactoryCraftServer* mserver = 0; void exit() { if (mserver) { std::cout << "Der Server wurde unerwartet beendet. Es wird versucht den spielfortschritt zu speichern.\n"; mserver->close(); } } int main() { initializeBlockTypes(); initializeItemTypes(); initializeEntityTypes(); initializeDimensions(); initializeMultiblockTypes(); struct rlimit core_limits; core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY; setrlimit(RLIMIT_CORE, &core_limits); Framework::initFramework(); Zeit* z = getZeit(); Text* pfad = new Text("log/"); pfad->append(z->getZeit("y-m-d_h-i-s.log")); z->release(); DateiPfadErstellen(pfad->getText()); std::ofstream file; file.open(pfad->getText()); std::streambuf* sbuf = std::cout.rdbuf(); // std::cout.rdbuf( file.rdbuf() ); pfad->release(); std::cout << "Startet...\n"; std::cout << "Lese init Datei fcInit.ini ...\n"; InitDatei* dat = new InitDatei("fcInit.ini"); if (!dat->laden()) { std::cout << "error: Datei konnte nicht gelesen werden. Das Programm " "wird geschlossen.\n"; dat->release(); file.close(); std::cout.rdbuf(sbuf); exit(1); } const char* wichtig[] = {"SSLPort", "SSLCert", "SSLKey", "SSLPasswort", "Port"}; for (const char* w : wichtig) { if (!dat->wertExistiert(w)) { std::cout << "error: Der Wert '" << w << "' wurde nicht gefunden. Das Programm wird geschlossen.\n"; dat->release(); file.close(); std::cout.rdbuf(sbuf); exit(1); } } mserver = new FactoryCraftServer(dat); std::atexit(exit); signal(SIGTERM, exit); signal(SIGSEGV, exit); signal(SIGILL, exit); signal(SIGABRT, exit); signal(SIGFPE, exit); signal(SIGINT, exit); new Framework::AsynchronCall("Commander", []() { while (mserver) { std::string line; std::getline(std::cin, line); if (Text(line.c_str()) == Text("exit")) { std::cout << "Der Server wird beended und der Spielfortschritt wird gespeichert.\n"; mserver->close(); return; } } }); std::cout << "Der Server läuft. Startforgang beendet.\n"; mserver->run(); mserver->release(); mserver = 0; dat->release(); std::cout << "Der Server ist erfolgreich heruntergefahren.\n"; file.close(); std::cout.rdbuf(sbuf); Framework::releaseFramework(); return 0; }