123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #include "TeamsEditor.h"
- #include <Datei.h>
- #include <DateiSystem.h>
- #include <Bild.h>
- // 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;
- }
|