#include "../KSGKlient.h" #include "../KSGServer.h" #include <Datei.h> #include "../../Global/Variablen.h" #include <GSLDateiV.h> #include "../Keys.h" typedef GSL::GSLDateiV *( *GetGSLDatei )( ); class DownloadSound : public GSL::GSLSoundV { private: bool istM; int sample; __int64 l�n; Klient *k; FBalken *f; int ref; public: // Konstruktor DownloadSound( Klient *zK, FBalken *zF ) { k = zK; f = zF; ref = 1; } // nicht constant // GSL void playSound() override {} void setPause( bool p ) override {} void stopSound() override {} void warteAufSound( int zeit ) override {} // Lautst�rke: 0 - 0xFFFF void setVolume( unsigned int links, unsigned int rechts ) override {} // zum Speichern void open() override { char m = 0; k->getNachrichtEncrypted( &m, 1 ); istM = ( m == 1 ); sample = 0; k->getNachrichtEncrypted( (char*)&sample, 4 ); l�n = 0; k->getNachrichtEncrypted( (char*)&l�n, 8 ); f->setAktionAnzahl( l�n ); } int getDaten( char *buffer, int l�n ) override { int l = l�n < this->l�n ? l�n : ( int )this->l�n; if( !l ) return -1; k->getNachricht( buffer, l ); this->l�n -= l; f->aktionPlus( l ); return l; } void close() override {} bool istMono() const override { return istM; } int getSampleRate() const override { return sample; } __int64 getDatLength() const override { return l�n; } // Reference Counting GSL::GSLSoundV *getThis() override { ref++; return this; } GSL::GSLSoundV *release() override { ref--; if( !ref ) delete this; return 0; } }; // Inhalt der EditorKlient Klasse aus KSGKlient.h // Konstruktor EditorKlient::EditorKlient() { verbunden = 0; klient = 0; fehler = new Text( "" ); klientId = getKlientId(); ref = 1; } // Destruktor EditorKlient::~EditorKlient() { cs.lock(); if( verbunden ) trenne(); fehler = fehler->release(); cs.unlock(); } // nicht constant bool EditorKlient::verbinde( unsigned short port, char *ip ) // verbindet ich mit dem Editor Server { if( klient && verbunden && klient->getServerPort() == port && Text( ip ).istGleich( klient->getServerIp() ) ) return 1; if( klient || verbunden ) trenne(); klient = new Klient(); int keyLen = 0; char *key = 0; Keys::getServerKey( &key, keyLen, Keys::EDITOR, Keys::SENDEN ); klient->setSendeKey( key, keyLen ); delete[] key; Keys::getServerKey( &key, keyLen, Keys::EDITOR, Keys::EMPFANGEN ); klient->setEmpfangKey( key, keyLen ); delete[] key; if( !klient->verbinde( (unsigned short)port, ip ) ) { klient = klient->release(); fehler->setText( "Fehler beim verbinden mit dem Editor Server." ); return 0; } klient->sendeEncrypted( "\1", 1 ); klient->sendeEncrypted( (char*)&klientId, 4 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 3 ) { char l�n = 0; klient->getNachrichtEncrypted( &l�n, 1 ); char *nachricht = new char[ l�n + 1 ]; nachricht[ l�n ] = 0; klient->getNachrichtEncrypted( nachricht, l�n ); fehler->setText( nachricht ); delete[]nachricht; trenne(); return 0; } if( ret == 1 ) { char *sl = 0; char slL�n = getSchl�ssel( &sl ); klient->setSendeKey( sl, slL�n ); klient->setEmpfangKey( sl, slL�n ); delete[] sl; verbunden = 1; } return 1; } bool EditorKlient::karteErstellen( Text *zName, int spielArt ) // Erstellt eine neue Karte { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\xA", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zName->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zName->getText(), l ); klient->sendeEncrypted( (char*)&spielArt, 4 ); klient->getNachrichtEncrypted( &ret, 1 ); } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::ladeKarte( int id ) // l�dt eine bestimmte Karte { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x6", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&id, 4 ); klient->getNachrichtEncrypted( &ret, 1 ); } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 1; } int EditorKlient::getAbbildListe( RCArray< Text > *name, RCArray< Zeit > *datum ) { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x5", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { char l = 0; klient->getNachrichtEncrypted( &l, 1 ); char *n = new char[ l + 1 ]; n[ l ] = 0; klient->getNachrichtEncrypted( n, l ); name->set( new Text( n ), i ); delete[] n; Zeit *dat = new Zeit(); int d = 0; klient->getNachrichtEncrypted( (char*)&d, 4 ); dat->setJahr( d ); klient->getNachrichtEncrypted( (char*)&d, 4 ); dat->setMonat( d ); klient->getNachrichtEncrypted( (char*)&d, 4 ); dat->setTag( d ); klient->getNachrichtEncrypted( (char*)&d, 4 ); dat->setStunde( d ); klient->getNachrichtEncrypted( (char*)&d, 4 ); dat->setMinute( d ); klient->getNachrichtEncrypted( (char*)&d, 4 ); dat->setSekunde( d ); datum->set( dat, i ); } cs.unlock(); return anz; } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::abbildErstellen( char *name ) { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x1", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( name ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( name, l ); klient->getNachrichtEncrypted( &ret, 1 ); } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 1; } bool EditorKlient::abbildL�schen( char *name ) { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x2", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( name ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( name, l ); klient->getNachrichtEncrypted( &ret, 1 ); } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 1; } bool EditorKlient::abbildHerstellen( char *name ) { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x3", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( name ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( name, l ); klient->getNachrichtEncrypted( &ret, 1 ); } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 1; } bool EditorKlient::ver�ffentlichen() { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x4", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) klient->getNachrichtEncrypted( &ret, 1 ); } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::shopSeiteVer�ffentlichen() // Ver�ffentlicht die Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x6", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) klient->getNachrichtEncrypted( &ret, 1 ); } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::ladeShopSeiteVorschau() // L�ht die Vorschau der Shop Seite herrunter { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x8", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); Text pf = "data/tmp/ke/ssv"; for( int i = 0; i < anz; i++ ) { char l = 0; klient->getNachrichtEncrypted( &l, 1 ); char *pfad = new char[ l + 1 ]; pfad[ l ] = 0; klient->getNachrichtEncrypted( pfad, l ); Text p = pf.getText(); p += pfad; delete[] pfad; Datei d; d.setDatei( p ); d.erstellen(); d.open( Datei::Style::schreiben ); __int64 gr��e = 0; klient->getNachrichtEncrypted( (char*)&gr��e, 8 ); char *buffer = new char[ 2048 ]; while( gr��e > 0 ) { int l = gr��e > 2048 ? 2048 : (int)gr��e; klient->getNachricht( buffer, l ); d.schreibe( buffer, l ); gr��e -= l; } delete[] buffer; d.close(); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::ssDateiErstellen( char *name, int typ ) // Erstellt eine neue Shop Seiten Datei (typ:0=Ordner,1=Bild,2=Text) { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x1", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char t = typ; klient->sendeEncrypted( &t, 1 ); char l = (char)textLength( name ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( name, l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::ssOrdner�ffnen( char *name ) // �ffnet einen Ordner der Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x2", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( name ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( name, l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } Bild *EditorKlient::ssBildLaden( char *datei, char *bild ) // L�ht das ein Bild der Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x3", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( datei ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( datei, l ); l = (char)textLength( bild ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( bild, l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { Bild *ret = new Bild(); int br = 0; int h� = 0; klient->getNachrichtEncrypted( (char*)&br, 4 ); klient->getNachrichtEncrypted( (char*)&h�, 4 ); ret->neuBild( br, h�, 0 ); char *buffer = (char*)ret->getBuffer(); __int64 l�n = br * h� * 4; for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; l = l�n > 2048 ? 2048 : (int)l�n ) { klient->getNachricht( &( buffer[ i ] ), l ); i += l; l�n -= l; } cs.unlock(); return ret; } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::ssDateiL�schen( char *name ) // L�scht eine Datei der Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x4", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( name ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( name, l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } Text *EditorKlient::ssTextLaden( char *datei ) // L�d eine KSGS Datei der Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xA", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( datei ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( datei, l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int l�n = 0; klient->getNachrichtEncrypted( (char*)&l�n, 4 ); char *txt = new char[ l�n + 1 ]; txt[ l�n ] = 0; for( int i = 0, l = l�n > 2048 ? 2048 : l�n; l�n > 0; i += l, l�n -= l, l = l�n > 2048 ? 2048 : l�n ) klient->getNachricht( &( txt[ i ] ), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { Text *t = new Text( txt ); delete[] txt; cs.unlock(); return t; } delete[] txt; } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::ssTextSpeichern( char *datei, Text *zText ) // Spechert eine KSGS Datei der Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x5", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( datei ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( datei, l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int l�n = zText->getLength(); klient->sendeEncrypted( (char*)&l�n, 4 ); for( int i = 0, l = l�n > 2048 ? 2048 : l�n; l�n > 0; i += l, l�n -= l, l = l�n > 2048 ? 2048 : l�n ) klient->sende( &( zText->getText()[ i ] ), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::ssBildL�schen( char *datei, char *bild ) // L�scht ein Bild der Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x6", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( datei ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( datei, l ); l = (char)textLength( bild ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( bild, l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::ssBildSpeichern( char *datei, char *name, Bild *zBild ) // Speichert ein Bild einer ShopSeite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( datei ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( datei, l ); l = (char)textLength( name ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( name, l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int br = zBild->getBreite(); int h� = zBild->getHeight(); klient->sendeEncrypted( (char*)&br, 4 ); klient->sendeEncrypted( (char*)&h�, 4 ); __int64 l�n = br * h� * 4; char *buffer = (char*)zBild->getBuffer(); for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; i += l, l�n -= l, l = l�n > 2048 ? 2048 : (int)l�n ) klient->sende( &( buffer[ i ] ), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } int EditorKlient::ssGetDateiListe( RCArray< Text > *zList ) // L�d die Datei Liste der Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x8", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { char l = 0; klient->getNachrichtEncrypted( &l, 1 ); char *n = new char[ l + 1 ]; n[ l ] = 0; klient->getNachrichtEncrypted( n, l ); zList->add( new Text( n ) ); delete[] n; } cs.unlock(); return anz; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return -1; } cs.unlock(); return 0; } int EditorKlient::ssGetBildListe( char *name, RCArray< Text > *zList ) // L�d die Bild Liste einer Bild Datei der Shop Seite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x9", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)textLength( name ); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( name, l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { l = 0; klient->getNachrichtEncrypted( &l, 1 ); char *n = new char[ l + 1 ]; n[ l ] = 0; klient->getNachrichtEncrypted( n, l ); zList->add( new Text( n ) ); delete[] n; } cs.unlock(); return anz; } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return -1; } cs.unlock(); return 0; } bool EditorKlient::getShopDaten( int &es, int &tp, int &vp ) // L�ht die Shop Daten { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x9", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->getNachrichtEncrypted( (char*)&es, 4 ); klient->getNachrichtEncrypted( (char*)&tp, 4 ); klient->getNachrichtEncrypted( (char*)&vp, 4 ); cs.unlock(); return 1; } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::setShopDaten( int es, int tp, int vp ) // Setzt die Shop Daten { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xA", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&es, 4 ); klient->sendeEncrypted( (char*)&tp, 4 ); klient->sendeEncrypted( (char*)&vp, 4 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { cs.unlock(); return 1; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } Text *EditorKlient::beschreibungLaden() // l�ht die Kartenbeschreibung { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x1", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int l�n = 0; klient->getNachrichtEncrypted( (char*)&l�n, 4 ); char *txt = new char[ l�n + 1 ]; txt[ l�n ] = 0; for( int i = 0, l = l�n > 2048 ? 2048 : l�n; l�n > 0; i += l, l�n -= l, l = l�n > 2048 ? 2048 : l�n ) klient->getNachricht( &( txt[ i ] ), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { Text *t = new Text( txt ); delete[] txt; cs.unlock(); return t; } delete[] txt; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } Bild *EditorKlient::titelbildLaden() // l�ht das Titelbild { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x2", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { Bild *ret = new Bild(); int br = 0; int h� = 0; klient->getNachrichtEncrypted( (char*)&br, 4 ); klient->getNachrichtEncrypted( (char*)&h�, 4 ); ret->neuBild( br, h�, 0 ); char *buffer = (char*)ret->getBuffer(); __int64 l�n = br * h� * 4; for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; l = l�n > 2048 ? 2048 : (int)l�n ) { klient->getNachricht( &( buffer[ i ] ), l ); i += l; l�n -= l; } cs.unlock(); return ret; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } Bild *EditorKlient::minimapLaden() // l�ht das Minimapbild { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x3", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { Bild *ret = new Bild(); int br = 0; int h� = 0; klient->getNachrichtEncrypted( (char*)&br, 4 ); klient->getNachrichtEncrypted( (char*)&h�, 4 ); ret->neuBild( br, h�, 0 ); char *buffer = (char*)ret->getBuffer(); __int64 l�n = br * h� * 4; for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; l = l�n > 2048 ? 2048 : (int)l�n ) { klient->getNachricht( &( buffer[ i ] ), l ); i += l; l�n -= l; } cs.unlock(); return ret; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } Bild *EditorKlient::ladebildLaden() // l�ht das Ladebild { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x4", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { Bild *ret = new Bild(); int br = 0; int h� = 0; klient->getNachrichtEncrypted( (char*)&br, 4 ); klient->getNachrichtEncrypted( (char*)&h�, 4 ); ret->neuBild( br, h�, 0 ); char *buffer = (char*)ret->getBuffer(); __int64 l�n = br * h� * 4; for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; l = l�n > 2048 ? 2048 : (int)l�n ) { klient->getNachricht( &( buffer[ i ] ), l ); i += l; l�n -= l; } cs.unlock(); return ret; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::beschreibungSpeichern( Text *zText ) // speichert die Kartenbeschreibung { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x5", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int l�n = zText->getLength(); klient->sendeEncrypted( (char*)&l�n, 4 ); for( int i = 0, l = l�n > 2048 ? 2048 : l�n; l�n > 0; i += l, l�n -= l, l = l�n > 2048 ? 2048 : l�n ) klient->sende( &( zText->getText()[ i ] ), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::titelbildSpeichern( Bild *zBild ) // speichert das Titelbild { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x6", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int br = zBild->getBreite(); int h� = zBild->getHeight(); klient->sendeEncrypted( (char*)&br, 4 ); klient->sendeEncrypted( (char*)&h�, 4 ); __int64 l�n = br * h� * 4; char *buffer = (char*)zBild->getBuffer(); for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; i += l, l�n -= l, l = l�n > 2048 ? 2048 : (int)l�n ) klient->sende( &( buffer[ i ] ), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::minimapSpeichern( Bild *zBild ) // speichert das Minimapbild { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int br = zBild->getBreite(); int h� = zBild->getHeight(); klient->sendeEncrypted( (char*)&br, 4 ); klient->sendeEncrypted( (char*)&h�, 4 ); __int64 l�n = br * h� * 4; char *buffer = (char*)zBild->getBuffer(); for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; i += l, l�n -= l, l = l�n > 2048 ? 2048 : (int)l�n ) klient->sende( &( buffer[ i ] ), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::ladebildSpeichern( Bild *zBild ) // speichert das Ladebild { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x8", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int br = zBild->getBreite(); int h� = zBild->getHeight(); klient->sendeEncrypted( (char*)&br, 4 ); klient->sendeEncrypted( (char*)&h�, 4 ); __int64 l�n = br * h� * 4; char *buffer = (char*)zBild->getBuffer(); for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; i += l, l�n -= l, l = l�n > 2048 ? 2048 : (int)l�n ) klient->sende( &( buffer[ i ] ), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::ladeTeamDaten( SpielerTeamStruktur *sts ) // l�ht die Team Daten { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xC", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x1", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->getNachrichtEncrypted( (char*)&sts->spielerAnzahl, 4 ); klient->getNachrichtEncrypted( (char*)&sts->teamAnzahl, 4 ); for( int i = 0; i < sts->spielerAnzahl; i++ ) { int f = 0; klient->getNachrichtEncrypted( (char*)&f, 4 ); sts->spielerFarbe->set( f, i ); } for( int i = 0; i < sts->teamAnzahl; i++ ) { int f = 0; klient->getNachrichtEncrypted( (char*)&f, 4 ); sts->teamFarbe->set( f, i ); } for( int i = 0; i < sts->teamAnzahl; i++ ) { char l = 0; klient->getNachrichtEncrypted( &l, 1 ); char *n = new char[ l + 1 ]; n[ l ] = 0; klient->getNachrichtEncrypted( n, l ); sts->teamName->set( new Text( n ), i ); delete[] n; } for( int i = 0; i < sts->teamAnzahl; i++ ) { int g = 0; klient->getNachrichtEncrypted( (char*)&g, 4 ); sts->teamGr��e->set( g, i ); } cs.unlock(); return 1; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::speicherTeamDaten( SpielerTeamStruktur *sts ) // speichert die Team Daten { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xC", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x2", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&sts->spielerAnzahl, 4 ); klient->sendeEncrypted( (char*)&sts->teamAnzahl, 4 ); for( int i = 0; i < sts->spielerAnzahl; i++ ) { int f = sts->spielerFarbe->get( i ); klient->sendeEncrypted( (char*)&f, 4 ); } for( int i = 0; i < sts->teamAnzahl; i++ ) { int f = sts->teamFarbe->get( i ); klient->sendeEncrypted( (char*)&f, 4 ); } for( int i = 0; i < sts->teamAnzahl; i++ ) { char l = (char)sts->teamName->z( i )->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( sts->teamName->z( i )->getText(), l ); } for( int i = 0; i < sts->teamAnzahl; i++ ) { int g = sts->teamGr��e->get( i ); klient->sendeEncrypted( (char*)&g, 4 ); } cs.unlock(); return 1; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::deNeueDatei( char typ, Text *zName ) // DateienEditor: Erstellt neue Datei (typ: 0=ordner 1=bild 2=modell2d 3=sound { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x1", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( &typ, 1 ); char l = (char)zName->getLength(); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( zName->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::deOrdner�ffnen( Text *zName ) // DateienEditor: �ffnet Ordner { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x2", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l�n = (char)zName->getLength(); klient->sendeEncrypted( &l�n, 1 ); if( l�n ) klient->sendeEncrypted( zName->getText(), l�n ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } Bild *EditorKlient::deBildLaden( Text *zDatei, Text *zBild, FBalken *zF ) // DateienEditor: Bild laden { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } Bild *retB = 0; klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x3", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l�n = (char)zDatei->getLength(); klient->sendeEncrypted( &l�n, 1 ); if( l�n ) klient->sendeEncrypted( zDatei->getText(), l�n ); l�n = (char)zBild->getLength(); klient->sendeEncrypted( &l�n, 1 ); if( l�n ) klient->sendeEncrypted( zBild->getText(), l�n ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int br = 0; int h� = 0; klient->getNachrichtEncrypted( (char*)&br, 4 ); klient->getNachrichtEncrypted( (char*)&h�, 4 ); retB = new Bild(); retB->neuBild( br, h�, 0 ); char *buffer = (char*)retB->getBuffer(); __int64 l�n = br * h� * 4; zF->setAktionAnzahl( l�n ); for( int i = 0, l = l�n > 2048 ? 2048 : (int)l�n; l�n > 0; l = l�n > 2048 ? 2048 : (int)l�n ) { klient->getNachricht( &( buffer[ i ] ), l ); i += l; l�n -= l; zF->aktionPlus( l ); } } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); if( !ret && retB ) retB = retB->release(); return retB; } bool EditorKlient::deDateiL�schen( Text *zName ) // DateienEditor: L�scht Datei { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x4", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l�n = (char)zName->getLength(); klient->sendeEncrypted( &l�n, 1 ); if( l�n ) klient->sendeEncrypted( zName->getText(), l�n ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::deBildL�schen( Text *zDatei, Text *zBild ) // DateienEditor: L�scht Bild aus Datei { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x5", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( zDatei->getText(), l ); l = (char)zBild->getLength(); klient->sendeEncrypted( &l, 1 ); if( l ) klient->sendeEncrypted( zBild->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::deBildSpeichern( Text *zDatei, Text *zName, Bild *zBild, FBalken *zF ) // DateienEditor: Speichert Bild { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x6", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l�n = (char)zDatei->getLength(); klient->sendeEncrypted( &l�n, 1 ); if( l�n ) klient->sendeEncrypted( zDatei->getText(), l�n ); l�n = (char)zName->getLength(); klient->sendeEncrypted( &l�n, 1 ); if( l�n ) klient->sendeEncrypted( zName->getText(), l�n ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int br = zBild->getBreite(); int h� = zBild->getHeight(); klient->sendeEncrypted( (char*)&br, 4 ); klient->sendeEncrypted( (char*)&h�, 4 ); char *buffer = (char*)zBild->getBuffer(); __int64 gr = br * h� * 4; zF->setAktionAnzahl( gr ); for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr ) { klient->sende( &( buffer[ i ] ), l ); zF->aktionPlus( l ); } klient->getNachrichtEncrypted( &ret, 1 ); } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } int EditorKlient::deGetDateiListe( RCArray< Text > *zNamen ) // DateienEditor: Datei Liste herunterladen { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x7", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { char l = 0; klient->getNachrichtEncrypted( &l, 1 ); char *n = new char[ l + 1 ]; n[ l ] = 0; if( l ) klient->getNachrichtEncrypted( n, l ); zNamen->add( new Text( n ) ); delete[] n; } cs.unlock(); return anz; } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return -1; } cs.unlock(); return ret == 1; } int EditorKlient::deGetBildListe( Text *zDatei, RCArray< Text > *zNamen ) // DateienEditor: Liste mit in der Datei gespeicherten Bildern { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x8", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { klient->getNachrichtEncrypted( &l, 1 ); char *n = new char[ l + 1 ]; n[ l ] = 0; if( l ) klient->getNachrichtEncrypted( n, l ); zNamen->add( new Text( n ) ); delete[] n; } cs.unlock(); return anz; } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } int EditorKlient::deGetModelListe( Text *zDatei, RCArray< Text > *zNamen ) // DateienEditor Liste mit in der Datei gespeicherten Modellen { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x9", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { klient->getNachrichtEncrypted( &l, 1 ); char *n = new char[ l + 1 ]; n[ l ] = 0; if( l ) klient->getNachrichtEncrypted( n, l ); zNamen->add( new Text( n ) ); delete[] n; } cs.unlock(); return anz; } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } int EditorKlient::deGetSoundListe( Text *zDatei, RCArray< Text > *zNamen ) // DateienEditor: Liste mit in der Datei gespeicherten T�nen { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xA", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { klient->getNachrichtEncrypted( &l, 1 ); char *n = new char[ l + 1 ]; n[ l ] = 0; if( l ) klient->getNachrichtEncrypted( n, l ); zNamen->add( new Text( n ) ); delete[] n; } cs.unlock(); return anz; } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::deModelL�schen( Text *zDatei, Text *zModel ) // DateienEditor: L�scht Modell { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xB", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { l = (char)zModel->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zModel->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::deSoundL�schen( Text *zDatei, Text *zSound ) // DateienEditor: L�scht Ton { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xC", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { l = (char)zSound->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zSound->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } Model2DData *EditorKlient::deModelLaden( Text *zDatei, Text *zModel, FBalken *zF ) // DateienEditor: l�d ein Model herunter { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { l = (char)zModel->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zModel->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); zF->setAktionAnzahl( anz ); Array< Polygon2D > *pol = new Array< Polygon2D >(); for( int i = 0; i < anz; i++ ) { Polygon2D p; p.schwerpunkt = new Vertex( 0, 0 ); p.vertex = new Array< Vertex >(); p.tKordinaten = new Array< Vertex >(); klient->getNachrichtEncrypted( (char*)&p.transparent, 1 ); char nL�n = 0; klient->getNachrichtEncrypted( &nL�n, 1 ); char *txt = new char[ nL�n + 1 ]; if( nL�n ) klient->getNachrichtEncrypted( txt, nL�n ); txt[ nL�n ] = 0; p.name = new Text( txt ); delete[] txt; int anz2 = 0; klient->getNachrichtEncrypted( (char*)&anz2, 4 ); for( int j = 0; j < anz2; j++ ) { Vertex v; klient->getNachrichtEncrypted( (char*)&v.x, 4 ); klient->getNachrichtEncrypted( (char*)&v.y, 4 ); *p.schwerpunkt += v * (float)( 1.0 / anz2 ); Vertex t; klient->getNachrichtEncrypted( (char*)&t.x, 4 ); klient->getNachrichtEncrypted( (char*)&t.y, 4 ); p.vertex->add( v ); p.tKordinaten->add( t ); } pol->add( p ); zF->aktionPlus(); } Model2DData *data = new Model2DData(); data->erstelleModell( pol ); cs.unlock(); return data; } } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } GSL::GSLSoundV *EditorKlient::deSoundLaden( Text *zDatei, Text *zSound, FBalken *zF ) // DateienEditor: l�d Sound herunter { HMODULE gslDll = dllDateien->ladeDLL( "GSL.dll", "data/bin/GSL.dll" ); if( !gslDll ) { fehler->setText( "Die DLL Datei 'data/bin/GSL.dll' wurde nicht gefunden." ); return 0; } GetGSLDatei getGSLDatei = (GetGSLDatei)GetProcAddress( gslDll, "getGSLDatei" ); if( !getGSLDatei ) { fehler->setText( "Der Einstiegspunkt 'getGSLDatei' wurde in der Datei 'data/bin/GSL.dll' nicht gefunden." ); return 0; } DateiRemove( "data/tmp/editor/dateien/sounds/tmp.gsl" ); DateiPfadErstellen( "data/tmp/editor/dateien/sounds/tmp.gsl" ); GSL::GSLDateiV *gslDatei = getGSLDatei(); gslDatei->setDatei( "data/tmp/editor/dateien/sounds/tmp.gsl" ); cs.lock(); if( !verbunden ) { cs.unlock(); gslDatei->release(); dllDateien->releaseDLL( "GSL.dll" ); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xE", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { l = (char)zSound->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zSound->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { DownloadSound dws( klient, zF ); gslDatei->speicherSound( &dws, zSound->getText() ); GSL::GSLSoundV *s = gslDatei->getSound( zSound->getText() ); gslDatei->release(); dllDateien->releaseDLL( "GSL.dll" ); cs.unlock(); return s; } } } } } gslDatei->release(); dllDateien->releaseDLL( "GSL.dll" ); if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::deModelSpeichern( Text *zDatei, Text *zModel, Model2DData *zData, FBalken *zF ) // DateienEditor: Speichert Modell { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xF", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { l = (char)zModel->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zModel->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = zData->polygons ? zData->polygons->getEintragAnzahl() : 0; zF->setAktionAnzahl( anz ); klient->sendeEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { Polygon2D pol = zData->polygons->get( i ); klient->sendeEncrypted( (char*)&pol.transparent, 1 ); char nL�n = pol.name->getLength(); klient->sendeEncrypted( &nL�n, 1 ); if( nL�n ) klient->sendeEncrypted( pol.name->getText(), nL�n ); int anz2 = pol.vertex->getEintragAnzahl(); klient->sendeEncrypted( (char*)&anz2, 4 ); for( int j = 0; j < anz2; j++ ) { Vertex v = pol.vertex->get( j ); Vertex p; if( pol.tKordinaten ) p = pol.tKordinaten->hat( j ) ? pol.tKordinaten->get( j ) : Vertex( 0, 0 ); klient->sendeEncrypted( (char*)&v.x, 4 ); klient->sendeEncrypted( (char*)&v.y, 4 ); klient->sendeEncrypted( (char*)&p.x, 4 ); klient->sendeEncrypted( (char*)&p.y, 4 ); } zF->aktionPlus(); } klient->getNachrichtEncrypted( &ret, 1 ); } } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::deSoundSpeichern( Text *zDatei, Text *zSound, GSL::GSLSoundV *zData, FBalken *zF ) // DateienEditor: Speichert Sound { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xD", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x10", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char l = (char)zDatei->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zDatei->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { l = (char)zSound->getLength(); klient->sendeEncrypted( &l, 1 ); klient->sendeEncrypted( zSound->getText(), l ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { char channels = zData->istMono() ? 1 : 2; klient->sendeEncrypted( &channels, 1 ); int sample = zData->getSampleRate(); klient->sendeEncrypted( (char*)&sample, 4 ); __int64 sl�n = zData->getDatLength(); klient->sendeEncrypted( (char*)&sl�n, 8 ); zF->setAktionAnzahl( sl�n ); zData->open(); char *buffer = new char[ 2048 ]; while( sl�n > 0 ) { int l = sl�n > 2048 ? 2048 : (int)sl�n; zData->getDaten( buffer, l ); klient->sende( buffer, l ); sl�n -= l; zF->aktionPlus( l ); } delete[] buffer; zData->close(); } } } } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } int EditorKlient::getVerkaufStatistik( Array< int > *verkauft, Array< int > *einkommen, Array< int > *gespielt ) // Gibt eine Verkaufsstatistik der letzten 30 Tage zur�ck { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\x10", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int kaufAnz = 0; klient->getNachrichtEncrypted( (char*)&kaufAnz, 4 ); char anz = 0; klient->getNachrichtEncrypted( &anz, 1 ); for( int i = 0; i < anz; i++ ) { int kupfer = 0; int kauf = 0; int games = 0; klient->getNachrichtEncrypted( (char*)&kupfer, 4 ); klient->getNachrichtEncrypted( (char*)&kauf, 4 ); klient->getNachrichtEncrypted( (char*)&games, 4 ); einkommen->add( kupfer ); verkauft->add( kauf ); gespielt->add( games ); } cs.unlock(); return kaufAnz; } } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return 0; } bool EditorKlient::initEditor() // Initialisiert den Editor auf Serverseite { cs.lock(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x7", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( "\xE", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); } if( ret == 3 ) { char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[] f; cs.unlock(); return 0; } cs.unlock(); return ret == 1; } bool EditorKlient::keepAlive() // Erh�lt die Verbindung aufrecht { if( !cs.tryLock() ) return 1; if( !verbunden || !klient ) { cs.unlock(); return 0; } char res = 0; klient->sendeEncrypted( "\x5", 1 ); klient->getNachrichtEncrypted( &res, 1 ); cs.unlock(); if( res != 1 ) { trenne(); fehler->setText( "Verbindung unterbrochen: 'Keep Alive' nicht erfolgreich." ); } return res == 1; } bool EditorKlient::trenne() // trennt sich von dem Editor Server { cs.lock(); if( !klient || !verbunden ) { if( klient ) klient = klient->release(); cs.unlock(); return 1; } char serverReturn; klient->sendeEncrypted( "\4", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 3 ) { char l�n = 0; klient->getNachrichtEncrypted( &l�n, 1 ); char *nachricht = new char[ l�n + 1 ]; nachricht[ l�n ] = 0; klient->getNachrichtEncrypted( nachricht, l�n ); delete[]nachricht; } klient->sendeEncrypted( "\3", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); klient->trenne(); klient = klient->release(); verbunden = 0; cs.unlock(); return 1; } void EditorKlient::lock() { cs.lock(); } void EditorKlient::unlock() { cs.unlock(); } Klient *EditorKlient::zKlient() // gibt den Klient zur�ck { if( cs.isLocked() && cs.zOwner() && cs.zOwner()->getThreadHandle() == GetCurrentThread() ) return klient; return 0; } // constant bool EditorKlient::istVerbunden() const // pr�ft, ob mit Editor Server verbunden { return verbunden; } char *EditorKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zu�ck { return fehler->getText(); } // Reference Counting EditorKlientV *EditorKlient::getThis() { ref++; return this; } EditorKlientV *EditorKlient::release() { ref--; if( !ref ) delete this; return 0; }