123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- #ifdef WIN32
- #include <main.h>
- #else
- #include <spawn.h>
- #endif
- #include <Zeit.h>
- #include <iostream>
- #include <fstream>
- #include <Text.h>
- #include <Datei.h>
- #include <InitDatei.h>
- #include <sql.h>
- #include <Klient.h>
- using namespace Framework;
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-result"
- #ifdef WIN32
- int KSGStart Framework::Start( Startparam p )
- #else
- int main()
- #endif
- {
- #ifdef _DEBUG
- chdir( "/test/startup" );
- #else
- chdir( "/ksg/Server/startup" );
- #endif
- Network::Start( 100 );
- Zeit *z = getZeit();
- Text *pfad = new Text( "../log/startup/" );
- 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();
- system( "/usr/lib/sendmail -t < mail" );
- std::cout << "Startet...\n";
- std::cout << "Lese init Datei ../data/startup.ini ...\n";
- InitDatei *dat = new InitDatei( "../data/startup.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 );
- Network::Exit();
- return 1;
- }
- std::cout << "Verbindung mit Datenbank wird hergestellt...\n";
- if( !dat->wertExistiert( "DBIP" ) )
- {
- std::cout << "error: Kein 'DBIP' Eintrag in der startup.ini gefunden. Das Programm wird geschlossen.\n";
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 2;
- }
- if( !dat->wertExistiert( "DBPort" ) )
- {
- std::cout << "error: Kein 'DBPort' Eintrag in der startup.ini gefunden. Das Programm wird geschlossen.\n";
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 2;
- }
- if( !dat->wertExistiert( "DBBenutzer" ) )
- {
- std::cout << "error: Kein 'DBBenutzer' Eintrag in der startup.ini gefunden. Das Programm wird geschlossen.\n";
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 2;
- }
- if( !dat->wertExistiert( "DBPasswort" ) )
- {
- std::cout << "error: Kein 'DBPasswort' Eintrag in der startup.ini gefunden. Das Programm wird geschlossen.\n";
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 2;
- }
- if( !dat->wertExistiert( "DBName" ) )
- {
- std::cout << "error: Kein 'DBName' Eintrag in der startup.ini gefunden. Das Programm wird geschlossen.\n";
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 2;
- }
- sql::Datenbank *db = new sql::Datenbank( dat->zWert( "DBBenutzer" )->getText(),
- dat->zWert( "DBPasswort" )->getText(),
- dat->zWert( "DBName" )->getText(),
- dat->zWert( "DBIP" )->getText(),
- (unsigned short)TextZuInt( dat->zWert( "DBPort" )->getText(), 10 ) );
- if( !db->istOk() )
- {
- Text *err = db->getLetzterFehler();
- std::cout << "error: Es konnte keine Verbindung zur datenbank hergestellt werden. Das Programm wird geschlossen.\n" << err->getText();
- err->release();
- db->release();
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 3;
- }
- std::cout << "Verbindung zur Datenbank erfolgreich Hergestellt.\n";
- std::cout << "Überprüfe ob Datenbank Server läuft...\n";
- if( !dat->wertExistiert( "DBServerIP" ) )
- {
- std::cout << "error: Kein 'DBServerIP' Eintrag in der startup.ini gefunden. Das Programm wird geschlossen.\n";
- db->release();
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 2;
- }
- if( !dat->wertExistiert( "DBServerPort" ) )
- {
- std::cout << "error: Kein 'DBServerIP' Eintrag in der startup.ini gefunden. Das Programm wird geschlossen.\n";
- db->release();
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 2;
- }
- Network::Klient *klient = new Network::Klient();
- bool b = klient->verbinde( (unsigned short)TextZuInt( dat->zWert( "DBServerPort" )->getText(), 10 ), dat->zWert( "DBServerIP" )->getText() );
- char ret = 0;
- if( b )
- {
- klient->sende( "\6", 1 );
- klient->getNachricht( &ret, 1 );
- klient->trenne();
- }
- klient = (Network::Klient *)klient->release();
- if( b )
- {
- std::cout << "error: Der Datenbank Server läuft bereits. Es ist kein erneuter Start des Systems möglich. Das Programm wird geschlossen.\n";
- db->release();
- dat->release();
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 4;
- }
- std::cout << "App Server wird gestartet...\n";
- if( !dat->wertExistiert( "AppServerPfad" ) )
- std::cout << "warnung: Kein 'AppServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"AppServer", (char *)0 };
- chdir( dat->zWert( "AppServerPfad" )->getText() );
- posix_spawn( &id, "AppServer", 0, 0, args, 0 );
- std::cout << "App Server wurde gestartet.\n";
- }
- /*std::cout << "Chat App Server wird gestartet...\n";
- if( !dat->wertExistiert( "ChatAppServerPfad" ) )
- std::cout << "warnung: Kein 'ChatAppServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { ( char* )"ChatAppServer", (char*)0 };
- chdir( dat->zWert( "ChatAppServerPfad" )->getText() );
- posix_spawn( &id, "ChatAppServer", 0, 0, args, 0 );
- std::cout << "Chat App Server wurde gestartet.\n";
- }*/
- std::cout << "Main Server wird gestartet...\n";
- if( !dat->wertExistiert( "MainServerPfad" ) )
- std::cout << "warnung: Kein 'MainServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"MainServer", (char *)0 };
- chdir( dat->zWert( "MainServerPfad" )->getText() );
- posix_spawn( &id, "MainServer", 0, 0, args, 0 );
- std::cout << "Main Server wurde gestartet.\n";
- }
- std::cout << "Lösche Client Liste in Datenbank...\n";
- db->befehl( "SELECT id from client" );
- sql::Result r = db->getResult();
- for( int i = 0; i < r.zeilenAnzahl; i++ )
- {
- Text *befehl = new Text( "SELECT unregister_client( " );
- befehl->append( r.values[ i ].getText() );
- befehl->append( " )" );
- db->befehl( befehl->getText() );
- befehl->release();
- }
- std::cout << r.zeilenAnzahl << " Clients gelöscht.\n";
- r.destroy();
- std::cout << "Lösche laufende Spiele...\n";
- db->befehl( "SELECT id FROM spiel WHERE end_datum IS NULL" );
- r = db->getResult();
- for( int i = 0; i < r.zeilenAnzahl; i++ )
- {
- Text *befehl = new Text( "DELETE FROM spiel_spieler WHERE spiel_id = " );
- befehl->append( r.values[ i ].getText() );
- db->befehl( befehl->getText() );
- befehl->setText( "DELETE FROM spiel WHERE id = " );
- befehl->append( r.values[ i ].getText() );
- db->befehl( befehl->getText() );
- befehl->release();
- }
- std::cout << r.zeilenAnzahl << " laufende Spiele gelöscht.\n";
- r.destroy();
- std::cout << "Lösche erstellte Spiele...\n";
- db->befehl( "SELECT id FROM spiel_erstellt" );
- r = db->getResult();
- for( int i = 0; i < r.zeilenAnzahl; i++ )
- {
- Text *befehl = new Text( "DELETE FROM spiel_erstellt_spieler WHERE spiel_erstellt_id = " );
- befehl->append( r.values[ i ].getText() );
- db->befehl( befehl->getText() );
- befehl->setText( "DELETE FROM spiel_erstellt_gruppe WHERE spiel_erstellt_id = " );
- befehl->append( r.values[ i ].getText() );
- db->befehl( befehl->getText() );
- befehl->setText( "DELETE FROM spiel_erstellt WHERE id = " );
- befehl->append( r.values[ i ].getText() );
- db->befehl( befehl->getText() );
- befehl->release();
- }
- std::cout << r.zeilenAnzahl << " erstellte Spiele gelöscht.\n";
- r.destroy();
- std::cout << "Lösche Warteschlange...\n";
- db->befehl( "DELETE FROM account_anmeldung_fuer_spiel" );
- std::cout << db->getZeilenAnzahl() << " Spieler aus der Warteschlange entfernt.\n";
- db->befehl( "DELETE FROM gruppe_anmeldung_fuer_spiel" );
- std::cout << db->getZeilenAnzahl() << " Gruppen aus der Warteschlange entfernt.\n";
- std::cout << "Lösche Gruppen...\n";
- db->befehl( "SELECT id FROM gruppe" );
- r = db->getResult();
- for( int i = 0; i < r.zeilenAnzahl; i++ )
- {
- Text *befehl = new Text( "DELETE FROM gruppe_spieler WHERE gruppe_id = " );
- befehl->append( r.values[ i ].getText() );
- db->befehl( befehl->getText() );
- befehl->setText( "DELETE FROM gruppe WHERE id = " );
- befehl->append( r.values[ i ].getText() );
- db->befehl( befehl->getText() );
- befehl->release();
- }
- std::cout << r.zeilenAnzahl << " Gruppen gelöscht.\n";
- r.destroy();
- db->befehl( "UPDATE server a SET server_status_id = 1, tasks = 0 FROM server_typ b WHERE a.server_typ_name = b.name AND b.task_name = 'clients'" );
- std::cout << db->getZeilenAnzahl() << " Server zurückgesetzt.\n";
- //std::cout << "Lösche Chaträume...\n";
- //db->befehl( "SELECT id FROM chatroom" );
- //r = db->getResult();
- //for( int i = 0; i < r.zeilenAnzahl; i++ )
- //{
- // Text *befehl = new Text( "DELETE FROM chatroom_spieler WHERE chatroom_id = " );
- // befehl->append( r.values[ i ].getText() );
- // db->befehl( befehl->getText() );
- // befehl->setText( "DELETE FROM chatroom WHERE id = " );
- // befehl->append( r.values[ i ].getText() );
- // db->befehl( befehl->getText() );
- // befehl->release();
- //}
- //std::cout << r.zeilenAnzahl << " Chaträume gelöscht.\n";
- //r.destroy();
- std::cout << "Starte Erhaltungs Server...\n";
- if( !dat->wertExistiert( "ErhaltungServerPfad" ) )
- std::cout << "warnung: Kein 'ErhaltungServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"ErhaltungServer", (char *)0 };
- chdir( dat->zWert( "ErhaltungServerPfad" )->getText() );
- posix_spawn( &id, "ErhaltungServer", 0, 0, args, 0 );
- std::cout << "Erhaltung Server wurde gestartet.\n";
- }
- std::cout << "Starte Patch Server...\n";
- if( !dat->wertExistiert( "PatchServerPfad" ) )
- std::cout << "warnung: Kein 'PatchServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"PatchServer", (char *)0 };
- chdir( dat->zWert( "PatchServerPfad" )->getText() );
- posix_spawn( &id, "PatchServer", 0, 0, args, 0 );
- std::cout << "Patch Server wurde gestartet.\n";
- }
- std::cout << "Starte Register Server...\n";
- if( !dat->wertExistiert( "RegisterServerPfad" ) )
- std::cout << "warnung: Kein 'RegisterServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"RegisterServer", (char *)0 };
- chdir( dat->zWert( "RegisterServerPfad" )->getText() );
- posix_spawn( &id, "RegisterServer", 0, 0, args, 0 );
- std::cout << "Register Server wurde gestartet.\n";
- }
- std::cout << "Starte Login Server...\n";
- if( !dat->wertExistiert( "LoginServerPfad" ) )
- std::cout << "warnung: Kein 'LoginServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"LoginServer", (char *)0 };
- chdir( dat->zWert( "LoginServerPfad" )->getText() );
- posix_spawn( &id, "LoginServer", 0, 0, args, 0 );
- std::cout << "Login Server wurde gestartet.\n";
- }
- std::cout << "Starte Information Server...\n";
- if( !dat->wertExistiert( "InformationServerPfad" ) )
- std::cout << "warnung: Kein 'InformationServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"InformationServer", (char *)0 };
- chdir( dat->zWert( "InformationServerPfad" )->getText() );
- posix_spawn( &id, "InformationServer", 0, 0, args, 0 );
- std::cout << "Information Server wurde gestartet.\n";
- }
- std::cout << "Starte Chat Server...\n";
- if( !dat->wertExistiert( "ChatServerPfad" ) )
- std::cout << "warnung: Kein 'ChatServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"ChatServer", (char *)0 };
- chdir( dat->zWert( "ChatServerPfad" )->getText() );
- posix_spawn( &id, "ChatServer", 0, 0, args, 0 );
- std::cout << "Chat Server wurde gestartet.\n";
- }
- std::cout << "Starte Anmeldung Server...\n";
- if( !dat->wertExistiert( "AnmeldungServerPfad" ) )
- std::cout << "warnung: Kein 'AnmeldungServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"AnmeldungServer", (char *)0 };
- chdir( dat->zWert( "AnmeldungServerPfad" )->getText() );
- posix_spawn( &id, "AnmeldungServer", 0, 0, args, 0 );
- std::cout << "Anmeldung Server wurde gestartet.\n";
- }
- std::cout << "Starte karten Server...\n";
- if( !dat->wertExistiert( "KartenServerPfad" ) )
- std::cout << "warnung: Kein 'KartenServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"KartenServer", (char *)0 };
- chdir( dat->zWert( "KartenServerPfad" )->getText() );
- posix_spawn( &id, "KartenServer", 0, 0, args, 0 );
- std::cout << "Karten Server wurde gestartet.\n";
- }
- std::cout << "Starte spiel Server...\n";
- if( !dat->wertExistiert( "SpielServerPfad" ) )
- std::cout << "warnung: Kein 'SpielServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"SpielServer", (char *)0 };
- chdir( dat->zWert( "SpielServerPfad" )->getText() );
- posix_spawn( &id, "SpielServer", 0, 0, args, 0 );
- std::cout << "Spiel Server wurde gestartet.\n";
- }
- std::cout << "Starte Shop Server...\n";
- if( !dat->wertExistiert( "ShopServerPfad" ) )
- std::cout << "warnung: Kein 'ShopServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"ShopServer", (char *)0 };
- chdir( dat->zWert( "ShopServerPfad" )->getText() );
- posix_spawn( &id, "ShopServer", 0, 0, args, 0 );
- std::cout << "Shop Server wurde gestartet.\n";
- }
- std::cout << "Starte Historie Server...\n";
- if( !dat->wertExistiert( "HistorieServerPfad" ) )
- std::cout << "warnung: Kein 'HistorieServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"HistorieServer", (char *)0 };
- chdir( dat->zWert( "HistorieServerPfad" )->getText() );
- posix_spawn( &id, "HistorieServer", 0, 0, args, 0 );
- std::cout << "Historie Server wurde gestartet.\n";
- }
- std::cout << "Starte News Server...\n";
- if( !dat->wertExistiert( "NewsServerPfad" ) )
- std::cout << "warnung: Kein 'NewsServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"NewsServer", (char *)0 };
- chdir( dat->zWert( "NewsServerPfad" )->getText() );
- posix_spawn( &id, "NewsServer", 0, 0, args, 0 );
- std::cout << "News Server wurde gestartet.\n";
- }
- std::cout << "Starte Editor Server...\n";
- if( !dat->wertExistiert( "EditorServerPfad" ) )
- std::cout << "warnung: Kein 'EditorServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"EditorServer", (char *)0 };
- chdir( dat->zWert( "EditorServerPfad" )->getText() );
- posix_spawn( &id, "EditorServer", 0, 0, args, 0 );
- std::cout << "Editor Server wurde gestartet.\n";
- }
- std::cout << "Starte Minigame Server...\n";
- if( !dat->wertExistiert( "MinigameServerPfad" ) )
- std::cout << "warnung: Kein 'MinigameServerPfad' Eintrag in der startup.ini gefunden. Dieser Server wird nicht gestartet.\n";
- else
- {
- pid_t id;
- char *args[] = { (char *)"MinigameServer", (char *)0 };
- chdir( dat->zWert( "MinigameServerPfad" )->getText() );
- posix_spawn( &id, "MinigameServer", 0, 0, args, 0 );
- std::cout << "Minigame Server wurde gestartet.\n";
- }
- db->release();
- dat->speichern();
- dat->release();
- std::cout << "Der Startvorgang wurde beendet.\n";
- file.close();
- std::cout.rdbuf( sbuf );
- Network::Exit();
- return 0;
- }
- #pragma GCC diagnostic pop
|