Browse Source

add a routine to save the game when the server stopps

Kolja Strohm 3 years ago
parent
commit
2b0d9a16a5
2 changed files with 26 additions and 4 deletions
  1. 1 0
      FactoryCraft/Server.cpp
  2. 25 4
      FactoryCraft/Start.cpp

+ 1 - 0
FactoryCraft/Server.cpp

@@ -67,6 +67,7 @@ void FactoryCraftServer::close()
         klients->z( i )->absturz();
     klients = ( RCArray< FCKlient > * )klients->release();
     klientAnzahl = 0;
+    game->save();
     LeaveCriticalSection( &cs );
 }
 

+ 25 - 4
FactoryCraft/Start.cpp

@@ -6,9 +6,20 @@
 #include <Globals.h>
 #include <sys/resource.h>
 #include <Klient.h>
+#include <cstdlib>
+#include <csignal>
 
 #include "Server.h"
 
+FactoryCraftServer *mserver = 0;
+
+void exit()
+{
+    std::cout << "Der Server wird beendet...\n";
+    if( mserver )
+        mserver->close();
+}
+
 int main()
 {
     struct rlimit core_limits;
@@ -18,13 +29,13 @@ int main()
     Framework::initFramework();
     Zeit *z = getZeit();
     Text *pfad = new Text( "log/" );
-    pfad->append( z->getZeit( "y-m-d h-i-s.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() );
+    //std::cout.rdbuf( file.rdbuf() );
     pfad->release();
 
     std::cout << "Startet...\n";
@@ -35,6 +46,8 @@ int main()
     {
         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" };
@@ -44,15 +57,23 @@ int main()
         {
             std::cout << "error: Der Wert '" << w << "' wurde nicht gefunden. Das Programm wird geschlossen.\n";
             dat->release();
+            file.close();
+            std::cout.rdbuf( sbuf );
             exit( 1 );
         }
     }
 
-    FactoryCraftServer *mserver = new FactoryCraftServer( dat );
+    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 );
 
     std::cout << "Der Server läuft. Startforgang beendet.\n";
     mserver->run();
-
     mserver->release();
     dat->release();
     std::cout << "Der Server ist heruntergefahren.\n";