#include "TeamsEditor.h" #include #include #include // Inhalt der TeamsEditor Klasse aus TeamsEditor.h // Konstruktor TeamsEditor::TeamsEditor( int id, char *pf, EdSDatenbank *db ) { pfad = pf; pfad += "/live/map"; fehler = ""; this->id = id; this->db = db; ref = 1; } // Destruktor TeamsEditor::~TeamsEditor() { db->release(); } // nicht constant bool TeamsEditor::prozessMessage( SKlient *zKlient ) { char message = 0; zKlient->getNachrichtEncrypted( &message, 1 ); switch( message ) { case 0x1: // Team Struktur laden { Text p = pfad.getText(); p += "/server/sts.ltgd"; Datei d; d.setDatei( p ); if( !d.open( Datei::Style::lesen ) ) { fehler = "Es ist ein Fehler beim laden der Einstellungen aufgetreten."; return 0; } zKlient->sendeEncrypted( "\1", 1 ); char *buffer = new char[ 2048 ]; int gr = (int)d.getSize(); while( gr > 0 ) { int l = gr > 2048 ? 2048 : gr; d.lese( buffer, l ); zKlient->sendeEncrypted( buffer, l ); gr -= l; } delete[] buffer; d.close(); return 1; } case 0x2: // Team Struktur speichern { Text p = pfad.getText(); p += "/server/sts.ltgd"; Datei d1; d1.setDatei( p ); p = pfad.getText(); p += "/client/map/data/data.sts"; Datei d2; d2.setDatei( p ); if( d1.open( Datei::Style::schreiben ) && d2.open( Datei::Style::schreiben ) ) zKlient->sendeEncrypted( "\1", 1 ); else { d1.close(); d2.close(); fehler = "Es ist ein Fehler beim speichern der Einstellungen aufgetreten."; return 0; } int sAnz = 0; zKlient->getNachrichtEncrypted( (char*)&sAnz, 4 ); d1.schreibe( (char*)&sAnz, 4 ); d2.schreibe( (char*)&sAnz, 4 ); db->setMaxSpieler( id, sAnz ); int tAnz = 0; zKlient->getNachrichtEncrypted( (char*)&tAnz, 4 ); d1.schreibe( (char*)&tAnz, 4 ); d2.schreibe( (char*)&tAnz, 4 ); for( int i = 0; i < sAnz; i++ ) { // Spielerfarbe int f = 0; zKlient->getNachrichtEncrypted( (char*)&f, 4 ); d1.schreibe( (char*)&f, 4 ); d2.schreibe( (char*)&f, 4 ); } for( int i = 0; i < tAnz; i++ ) { // Teamfarbe int f = 0; zKlient->getNachrichtEncrypted( (char*)&f, 4 ); d1.schreibe( (char*)&f, 4 ); d2.schreibe( (char*)&f, 4 ); } for( int i = 0; i < tAnz; i++ ) { // Teamname char l = 0; zKlient->getNachrichtEncrypted( &l, 1 ); char *txt = new char[ l + 1 ]; txt[ (int)l ] = 0; zKlient->getNachrichtEncrypted( txt, l ); d1.schreibe( &l, 1 ); d2.schreibe( &l, 1 ); d1.schreibe( txt, l ); d2.schreibe( txt, l ); delete[] txt; } for( int i = 0; i < tAnz; i++ ) { // Teamgröße int g = 0; zKlient->getNachrichtEncrypted( (char*)&g, 4 ); d1.schreibe( (char*)&g, 4 ); d2.schreibe( (char*)&g, 4 ); } d1.close(); d2.close(); return 1; } default: fehler = "Unbekannte Nachricht. Eventuell ist der Client nicht auf dem neusten Stand."; } return 0; } // constant char *TeamsEditor::getLetzterFehler() const { return fehler; } // Reference Counting TeamsEditor *TeamsEditor::getThis() { ref++; return this; } TeamsEditor *TeamsEditor::release() { ref--; if( !ref ) delete this; return 0; }