#include "../KSGKlient.h" #include "../KSGServer.h" #include "../../NachLogin/Account/Historie/AccountHistorieDaten.h" #include #include "../Keys.h" int waiting = 0; // Inhalt der InformationKlient Klasse aus KSGKlient.h // Konstruktor InformationKlient::InformationKlient() { verbunden = 0; klient = 0; fehler = new Text( "" ); klientId = getKlientId(); ref = 1; std::cout << "Initialize CS INF\n"; } // Destruktor InformationKlient::~InformationKlient() // wenn verbunden, dann trennen { cs.lock(); if( klient ) { char serverReturn = 0; if( verbunden ) { 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(); } else { int keyLen = 0; char *key = 0; Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN ); klient->setSendeKey( key, keyLen ); delete[] key; Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN ); klient->setEmpfangKey( key, keyLen ); delete[] key; klient->verbinde( klient->getServerPort(), klient->getServerIp() ); klient->sendeEncrypted( "\1", 1 ); klient->sendeEncrypted( (char*)&klientId, 4 ); 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; } else { char *sl = 0; char slLän = getSchlüssel( &sl ); klient->setSendeKey( sl, slLän ); klient->setEmpfangKey( sl, slLän ); delete[] sl; 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(); } fehler = fehler->release(); cs.unlock(); std::cout << "DELETE CS INF\n"; } // nicht constant bool InformationKlient::verbinde() // verbindet ich mit dem Informaion Server { cs.lock(); if( verbunden ) { cs.unlock(); return 1; } if( !klient ) { char *msIp = getMainServerIp(); unsigned short msPort = getMainServerPort(); klient = new Klient(); int keyLen = 0; char *key = 0; Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN ); klient->setSendeKey( key, keyLen ); delete[] key; Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN ); klient->setEmpfangKey( key, keyLen ); delete[] key; if( !klient->verbinde( msPort, msIp ) ) { fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." ); klient = klient->release(); delete[]msIp; cs.unlock(); return 0; } delete[]msIp; klient->sende( "\0", 1 ); // Verschlüsselung aktivieren klient->sendeEncrypted( "\1", 1 ); klient->sendeEncrypted( (char*)&klientId, 4 ); char serverReturn = 0; 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 ); fehler->setText( nachricht ); delete[]nachricht; klient->sendeEncrypted( "\3", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); klient->trenne(); klient = klient->release(); cs.unlock(); return 0; } char *sl = 0; char slLän = getSchlüssel( &sl ); klient->setSendeKey( sl, slLän ); klient->setEmpfangKey( sl, slLän ); delete[] sl; klient->sendeEncrypted( "\6\4", 2 ); char byte = 0; klient->getNachrichtEncrypted( &byte, 1 ); if( byte == 2 ) { unsigned char lsIp[ 4 ]; klient->getNachrichtEncrypted( (char *)lsIp, 4 ); unsigned short lsPort = 0; klient->getNachrichtEncrypted( (char*)&lsPort, 2 ); klient->sendeEncrypted( "\3", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); klient->trenne(); Text *lsIpT = new Text( "" ); lsIpT->append( (int)lsIp[ 0 ] ); lsIpT->append( "." ); lsIpT->append( (int)lsIp[ 1 ] ); lsIpT->append( "." ); lsIpT->append( (int)lsIp[ 2 ] ); lsIpT->append( "." ); lsIpT->append( (int)lsIp[ 3 ] ); int keyLen = 0; char *key = 0; Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN ); klient->setSendeKey( key, keyLen ); delete[] key; Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN ); klient->setEmpfangKey( key, keyLen ); delete[] key; klient->verbinde( lsPort, lsIpT->getText() ); lsIpT = lsIpT->release(); klient->sendeEncrypted( "\3", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); klient->trenne(); } if( byte == 3 ) { klient->getNachrichtEncrypted( &byte, 1 ); char *f = new char[ byte + 1 ]; f[ byte ] = 0; klient->getNachrichtEncrypted( f, byte ); fehler->setText( f ); delete[]f; klient->sendeEncrypted( "\3", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); klient->trenne(); klient = klient->release(); cs.unlock(); return 0; } } int keyLen = 0; char *key = 0; Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN ); klient->setSendeKey( key, keyLen ); delete[] key; Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN ); klient->setEmpfangKey( key, keyLen ); delete[] key; if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) ) { if( klient->sendeEncrypted( "\1", 1 ) ) { klient->sendeEncrypted( (char*)&klientId, 4 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; klient->sendeEncrypted( "\3", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); klient->trenne(); cs.unlock(); return 0; } char *sl = 0; char slLän = getSchlüssel( &sl ); klient->setSendeKey( sl, slLän ); klient->setEmpfangKey( sl, slLän ); delete[] sl; verbunden = 1; cs.unlock(); return 1; } else { fehler->setText( "Der dir zugewiesene Informations Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." ); klient = klient->release(); } } else { fehler->setText( "Der dir zugewiesene Informations Server antwortet nicht. Bitte versuche es Später erneut." ); klient = klient->release(); } cs.unlock(); return 0; } bool InformationKlient::getInformationText( Text *txt, int *typ ) // fragt nach Informationstext { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } bool ret = 1; ret = ret & klient->sendeEncrypted( "\5", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } short län = 0; ret = ret & klient->getNachrichtEncrypted( (char*)&län, 2 ); char *text = new char[ län + 1 ]; text[ län ] = 0; if( län ) ret = ret & klient->getNachrichtEncrypted( text, län ); txt->setText( text ); delete[]text; char type = 0; ret = ret & klient->getNachrichtEncrypted( &type, 1 ); *typ = type; if( !ret ) fehler->setText( "Verbindungsfehler" ); cs.unlock(); return ret; } bool InformationKlient::istSpielErlaubt( int spielId ) // fragt, ob das entsprechende Spiel vom Server gesperrt wurde { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\6", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&spielId, 4 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); cs.unlock(); return ret != 0; } bool InformationKlient::istKarteErlaubt( int karteId ) // fragt, ob die entsprechende Karte vom Server gesperrt wurde { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\7", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&karteId, 4 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); cs.unlock(); return ret != 0; } int InformationKlient::getKarteId( char *name ) // fragt nach der Id einer Karte { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x9", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } char län = textLength( name ); klient->sendeEncrypted( &län, 1 ); klient->sendeEncrypted( name, län ); int id = 0; klient->getNachrichtEncrypted( (char*)&id, 4 ); cs.unlock(); return id; } int InformationKlient::getSpielId( char *name ) // fragt nach der id eines Spiels { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x8", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } char län = textLength( name ); klient->sendeEncrypted( &län, 1 ); klient->sendeEncrypted( name, län ); int id = 0; klient->getNachrichtEncrypted( (char*)&id, 4 ); cs.unlock(); return id; } Text *InformationKlient::getSpielerName( int accountId ) // fragt nach dem Namen eines Accounts { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\xA", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&accountId, 4 ); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *name = new char[ län + 1 ]; name[ län ] = 0; if( län ) klient->getNachrichtEncrypted( name, län ); Text *ret = new Text( name ); delete[]name; cs.unlock(); return ret; } bool InformationKlient::getSpielStatistik( int accountId, int spielId, Array< int > *werte ) // fragt nach der Spiel Statistik eines Accounts { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } bool ret = 1; ret = ret & klient->sendeEncrypted( "\xB", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } ret = ret & klient->sendeEncrypted( (char*)&accountId, 4 ); ret = ret & klient->sendeEncrypted( (char*)&spielId, 4 ); for( int i = 0; i < 10; i++ ) { int tmp = 0; ret = ret & klient->getNachrichtEncrypted( (char*)&tmp, 4 ); werte->add( tmp, i ); } if( !ret ) fehler->setText( "Verbindungsfehler" ); cs.unlock(); return ret; } Text *InformationKlient::getKarteName( int karteId ) // fragt nach dem Namen einer Karte { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\xE", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&karteId, 4 ); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *name = new char[ län + 1 ]; name[ län ] = 0; if( län ) klient->getNachrichtEncrypted( name, län ); Text *ret = new Text( name ); delete[]name; cs.unlock(); return ret; } Text *InformationKlient::getSpielName( int spielId ) // fragt nach dem Namen einer Spielart { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\xF", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&spielId, 4 ); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *name = new char[ län + 1 ]; name[ län ] = 0; if( län ) klient->getNachrichtEncrypted( name, län ); Text *ret = new Text( name ); delete[]name; cs.unlock(); return ret; } Text *InformationKlient::getChatroomName( int chatroomId ) // fragt nach dem Namen eines Chatrooms { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x10", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&chatroomId, 4 ); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *name = new char[ län + 1 ]; name[ län ] = 0; if( län ) klient->getNachrichtEncrypted( name, län ); Text *ret = new Text( name ); delete[]name; cs.unlock(); return ret; } int InformationKlient::getSpielId( int karteId ) // fragt zu welcher Spielart die Karte gehört { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x11", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&karteId, 4 ); int ret = 0; klient->getNachrichtEncrypted( (char*)&ret, 4 ); cs.unlock(); return ret; } int InformationKlient::getAccountId( char *name ) // gibt die Id des Accounts zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } char län = textLength( name ); if( !län ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x12", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( &län, 1 ); klient->sendeEncrypted( name, län ); int ret = 0; klient->getNachrichtEncrypted( (char*)&ret, 4 ); cs.unlock(); return ret; } int InformationKlient::getChatroomId( char *name ) // gibt die Id des Chatrooms zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } char län = textLength( name ); if( !län ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x13", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( &län, 1 ); klient->sendeEncrypted( name, län ); int ret = 0; klient->getNachrichtEncrypted( (char*)&ret, 4 ); cs.unlock(); return ret; } int InformationKlient::getGruppenKarteId( int gruppenId ) // gibt die karten Id der gruppe zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\xD", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&gruppenId, 4 ); int id = 0; klient->getNachrichtEncrypted( (char*)&id, 4 ); cs.unlock(); return id; } bool InformationKlient::getGruppeSpielerHinzufügen( int gruppeId ) // gibt die Spieler hinzufügen Funktion der Gruppe zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x1E", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&gruppeId, 4 ); char sh = 0; klient->getNachrichtEncrypted( (char*)&sh, 1 ); cs.unlock(); return sh == 1; } int InformationKlient::getGruppeAdminId( int gruppeId ) // gibt den Gruppen Administrator zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x15", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&gruppeId, 4 ); int id = 0; klient->getNachrichtEncrypted( (char*)&id, 4 ); cs.unlock(); return id; } int InformationKlient::getSpielerPunkte( int accountId, int spielId ) // gibt die Punkte eines Spielers zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x14", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&spielId, 4 ); klient->sendeEncrypted( (char*)&accountId, 4 ); int punkte = 0; klient->getNachrichtEncrypted( (char*)&punkte, 4 ); cs.unlock(); return punkte; } Array< int > *InformationKlient::getAccountSpielArtListe() // gibt eine Liste mit gekauften Spielen zurück { char ret = 0; cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x16", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); Array< int > *list = new Array< int >(); for( int i = 0; i < anz; i++ ) { int id = 0; klient->getNachrichtEncrypted( (char*)&id, 4 ); list->add( id ); } cs.unlock(); return list; } if( ref == 3 ) { klient->getNachrichtEncrypted( &ret, 1 ); char *err = new char[ ret + 1 ]; err[ ret ] = 0; if( ret ) klient->getNachrichtEncrypted( err, ret ); fehler->setText( err ); delete[] err; } cs.unlock(); return 0; } int InformationKlient::getSpielVersion( int spielId ) // gibt die neuste Version eines Spiels zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x17", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&spielId, 4 ); int version = 0; klient->getNachrichtEncrypted( (char*)&version, 4 ); cs.unlock(); return version; } int InformationKlient::getKupfer() // gibt das Kupfer des Accounts zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x18", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } int kupfer = 0; klient->getNachrichtEncrypted( (char*)&kupfer, 4 ); cs.unlock(); return kupfer; } int InformationKlient::getDateiGruppeIdVonSpiel( int spielId ) // Gibt die Dateigruppe eines Spieles zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x19", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&spielId, 4 ); int dgId = 0; klient->getNachrichtEncrypted( (char*)&dgId, 4 ); cs.unlock(); return dgId; } Text *InformationKlient::getDateiGruppePfad( int dgId ) // Gibt den Dateigruppen Pfad zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x1A", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 1 ) { klient->sendeEncrypted( (char*)&dgId, 4 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 1 ) { char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *pf = new char[ län + 1 ]; pf[ län ] = 0; if( län ) klient->getNachrichtEncrypted( pf, län ); Text *pfad = new Text( pf ); delete[] pf; cs.unlock(); return pfad; } } if( serverReturn == 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; } Array< int > *InformationKlient::getAccountKarteListe( int spielId ) // gibt eine Liste mit gekauften Karten zurück { char ret = 0; cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x1B", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&spielId, 4 ); int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); Array< int > *list = new Array< int >(); for( int i = 0; i < anz; i++ ) { int id = 0; klient->getNachrichtEncrypted( (char*)&id, 4 ); list->add( id ); } cs.unlock(); return list; } if( ref == 3 ) { klient->getNachrichtEncrypted( &ret, 1 ); char *err = new char[ ret + 1 ]; err[ ret ] = 0; if( ret ) klient->getNachrichtEncrypted( err, ret ); fehler->setText( err ); delete[] err; } cs.unlock(); return 0; } int InformationKlient::getDateiGruppeIdVonPfad( char *pfad ) // Gibt die Dateigruppe eines Pfades zurück { char län = textLength( pfad ); if( !län ) return 0; cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x2A", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&län, 1 ); klient->sendeEncrypted( (char*)pfad, län ); int dgId = 0; klient->getNachrichtEncrypted( (char*)&dgId, 4 ); cs.unlock(); return dgId; } int InformationKlient::getDateiGruppeVersion( int dg ) // gibt die neuste Version einer Dateigruppe zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x2B", 1 ); char serverReturn = 0; klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 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; } klient->sendeEncrypted( (char*)&dg, 4 ); int version = 0; klient->getNachrichtEncrypted( (char*)&version, 4 ); cs.unlock(); return version; } int InformationKlient::getSpielerListe( char *suche, int *seite, int *maxSeite, char sortSpalte, char rückwärts, Array< int > *accounts, RCArray< Text > *name, RCArray< Text > *zuletztOnline, RCArray< Text > *letztesSpiel, RCArray< Text > *letzteKarte, RCArray< Text > *punkte ) // sucht nach Spielern { char län = textLength( suche ); if( !län ) return -1; cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return -1; } char serverReturn = 0; klient->sendeEncrypted( "\xC", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 1 ) { klient->sendeEncrypted( &län, 1 ); klient->sendeEncrypted( suche, län ); klient->sendeEncrypted( (char*)seite, 4 ); klient->sendeEncrypted( &sortSpalte, 1 ); klient->sendeEncrypted( &rückwärts, 1 ); klient->getNachrichtEncrypted( (char*)seite, 4 ); klient->getNachrichtEncrypted( (char*)maxSeite, 4 ); int ret = 0; klient->getNachrichtEncrypted( (char*)&ret, 4 ); for( int i = 0; i < ret; i++ ) { int accId = 0; klient->getNachrichtEncrypted( (char*)&accId, 4 ); accounts->set( accId, i ); klient->getNachrichtEncrypted( &län, 1 ); char *txt = new char[ län + 1 ]; txt[ län ] = 0; klient->getNachrichtEncrypted( txt, län ); name->set( new Text( txt ), i ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; klient->getNachrichtEncrypted( txt, län ); zuletztOnline->set( new Text( txt ), i ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; klient->getNachrichtEncrypted( txt, län ); letztesSpiel->set( new Text( txt ), i ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; klient->getNachrichtEncrypted( txt, län ); letzteKarte->set( new Text( txt ), i ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; klient->getNachrichtEncrypted( txt, län ); punkte->set( new Text( txt ), i ); delete[] txt; } cs.unlock(); return ret; } if( serverReturn == 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; } bool InformationKlient::getSpielerAktivität( int accId, RCArray< Text > *datum, Array< double > *stOnline, Array< double > *stGespielt, Array< int > *anzSpiele, Array< int > *anzGewonnen ) // ermittelt die aktivität eines Spielers { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } char ret = 0; klient->sendeEncrypted( "\x1F", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&accId, 4 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->getNachrichtEncrypted( &ret, 1 ); for( int i = 0; ret; i++ ) { char *txt = new char[ ret + 1 ]; txt[ ret ] = 0; klient->getNachrichtEncrypted( txt, ret ); datum->set( new Text( txt ), i ); delete[] txt; double sto = 0; klient->getNachrichtEncrypted( (char*)&sto, 8 ); stOnline->set( sto, i ); double sts = 0; klient->getNachrichtEncrypted( (char*)&sts, 8 ); stGespielt->set( sts, i ); int anzs = 0; klient->getNachrichtEncrypted( (char*)&anzs, 4 ); anzSpiele->set( anzs, i ); int anzg = 0; klient->getNachrichtEncrypted( (char*)&anzg, 4 ); anzGewonnen->set( anzg, i ); 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 InformationKlient::getAccountKarteSpiele( int account, int karte ) // Gibt zurück, wie oft ein Spieler eine Karte schon gespielt hat { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } char ret = 0; klient->sendeEncrypted( "\x20", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); klient->sendeEncrypted( (char*)&karte, 4 ); int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); 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; } int InformationKlient::getAccountKarteSpieleGewonnen( int account, int karte ) // Gibt zurück, wie oft ein Spieler eine Karte schon gewonnen hat { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } char ret = 0; klient->sendeEncrypted( "\x21", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); klient->sendeEncrypted( (char*)&karte, 4 ); int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); 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 InformationKlient::hatAccountKarte( int account, int karte ) // Gibt zurück, ob ein Spieler die Karte im Besitz hat { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } char ret = 0; klient->sendeEncrypted( "\x22", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); klient->sendeEncrypted( (char*)&karte, 4 ); char status = 0; klient->getNachrichtEncrypted( &status, 1 ); cs.unlock(); return status != 0; } 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 InformationKlient::hatAccountSpiel( int account, int spiel ) // Gibt zurück, ob ein Spieler ein Spiel im Besitz hat { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } char ret = 0; klient->sendeEncrypted( "\x23", 1 ); klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); klient->sendeEncrypted( (char*)&spiel, 4 ); char status = 0; klient->getNachrichtEncrypted( &status, 1 ); cs.unlock(); return status != 0; } 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; } Array< int > *InformationKlient::getAccountKarteGespieltListe( int account, int spielId ) // gibt eine Liste mit Karten zurück, die von einem Spieler bereits gespielt wurden { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x24", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); klient->sendeEncrypted( (char*)&spielId, 4 ); int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); Array< int > *ret = new Array< int >(); for( int i = 0; i < anz; i++ ) { int val = 0; klient->getNachrichtEncrypted( (char*)&val, 4 ); ret->set( val, i ); } 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; } Array< int > *InformationKlient::getAccountSpielGespieltListe( int account ) // gibt eine Liste mit Spielen zurück, die von einem Spieler bereits gespielt wurden { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x25", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); Array< int > *ret = new Array< int >(); for( int i = 0; i < anz; i++ ) { int val = 0; klient->getNachrichtEncrypted( (char*)&val, 4 ); ret->set( val, i ); } 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 InformationKlient::getSpielPartnerListe( int account, Array< int > *spieler, Array< int > *karten, Array< int > *anzahl ) // Gibt eine Liste von Spiel Partnern eines Spielers zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x26", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); int anz = 0; klient->getNachrichtEncrypted( (char*)&anz, 4 ); for( int i = 0; i < anz; i++ ) { int val = 0; klient->getNachrichtEncrypted( (char*)&val, 4 ); spieler->set( val, i ); klient->getNachrichtEncrypted( (char*)&val, 4 ); karten->set( val, i ); klient->getNachrichtEncrypted( (char*)&val, 4 ); anzahl->set( val, 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 InformationKlient::getStatistikListe( int account, int *seite, int *maxSeite, char sortSpalte, char rückwärts, RCArray< Array< int > > *werte, RCArray< Text > *namen ) // Gibt eine Liste mit Spiel Statistiken zurück { if( !*seite ) *seite = 1; cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } char serverReturn = 0; klient->sendeEncrypted( "\x27", 1 ); klient->getNachrichtEncrypted( &serverReturn, 1 ); if( serverReturn == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); klient->sendeEncrypted( (char*)seite, 4 ); klient->sendeEncrypted( &sortSpalte, 1 ); klient->sendeEncrypted( &rückwärts, 1 ); klient->getNachrichtEncrypted( (char*)seite, 4 ); klient->getNachrichtEncrypted( (char*)maxSeite, 4 ); int zAnz = 0; int sAnz = 0; klient->getNachrichtEncrypted( (char*)&zAnz, 4 ); klient->getNachrichtEncrypted( (char*)&sAnz, 4 ); for( int i = 0; i < zAnz; i++ ) { Array< int > *tmp = new Array< int >(); for( int j = 0; j < sAnz; j++ ) { if( j != 1 ) { int val = 0; klient->getNachrichtEncrypted( (char*)&val, 4 ); tmp->set( val, j ); } else { char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *n = new char[ län + 1 ]; n[ län ] = 0; if( län ) klient->getNachrichtEncrypted( n, län ); namen->set( new Text( n ), i ); delete[] n; } } werte->set( tmp, i ); } cs.unlock(); return 1; } if( serverReturn == 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; } AHDaten *InformationKlient::getSpielHistorieDaten( int account ) // Gibt eine Liste mit den letzten 20 Spielen zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x28", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&account, 4 ); AHDaten *ret = new AHDaten(); char anz = 0; klient->getNachrichtEncrypted( &anz, 1 ); for( char i = 0; i < anz; i++ ) { AHSpielDaten *spiel = new AHSpielDaten(); klient->getNachrichtEncrypted( (char*)&spiel->id, 4 ); klient->getNachrichtEncrypted( (char*)&spiel->karteId, 4 ); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spiel->spiel->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spiel->karte->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spiel->datum->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spiel->status->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spiel->dauer->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spiel->spielStatus->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spiel->gewinner->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( (char*)&spiel->sAnzahl, 4 ); char tAnz = 0; klient->getNachrichtEncrypted( &tAnz, 1 ); for( char j = 0; j < tAnz; j++ ) { AHSpielTeamDaten *team = new AHSpielTeamDaten(); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); team->name->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( (char*)&team->sAnzahl, 4 ); klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); team->status->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( (char*)&team->farbe, 4 ); char sAnz = 0; klient->getNachrichtEncrypted( &sAnz, 1 ); for( char k = 0; k < sAnz; k++ ) { AHSpielSpielerDaten *spieler = new AHSpielSpielerDaten(); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); char *txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spieler->name->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( (char*)&spieler->punkte, 4 ); klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); spieler->status->setText( txt ); delete[] txt; klient->getNachrichtEncrypted( (char*)&spieler->farbe, 4 ); team->spieler->set( spieler, k ); } spiel->teams->set( team, j ); } ret->spiele->set( spiel, i ); } 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 InformationKlient::getHistorieServer( int spielId, int *port, Text *ip ) // sucht nach dem Historie Server von einem Spiel { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x29", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&spielId, 4 ); klient->getNachrichtEncrypted( (char*)&ret, 1 ); if( ret == 1 ) { klient->getNachrichtEncrypted( (char*)port, 4 ); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); ip->fillText( ' ', län ); klient->getNachrichtEncrypted( ip->getText(), län ); 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; } bool InformationKlient::keepAlive() // Erhält die Verbindung aufrecht { if( !verbunden ) return 0; char res = 0; if( !cs.tryLock() ) return 1; klient->sendeEncrypted( "\x2C", 1 ); klient->getNachrichtEncrypted( &res, 1 ); cs.unlock(); if( res != 1 ) trenne(); return res == 1; } bool InformationKlient::hatRecht( int recht ) // Prüft ob Berechtigung vorhanden { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x2D", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&recht, 4 ); klient->getNachrichtEncrypted( (char*)&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 ret == 1; } int InformationKlient::getKartenListe( char *filter, char sortSpalte, char absteigend, Array< int > *kId, RCArray< Text > *kName, RCArray< Text > *sName, Array< int > *kupfer, Array< int > *verkauft, Array< int > *maxSpieler ) // Gibt eine Liste mit Karten zurück { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x2E", 1 ); char res = 0; klient->getNachrichtEncrypted( &res, 1 ); int ret = 0; if( res == 1 ) { char län = textLength( filter ); klient->sendeEncrypted( &län, 1 ); klient->sendeEncrypted( filter, län ); klient->sendeEncrypted( &sortSpalte, 1 ); klient->sendeEncrypted( &absteigend, 1 ); klient->getNachrichtEncrypted( (char*)&ret, 4 ); for( int i = 0; i < ret; i++ ) { int val = 0; klient->getNachrichtEncrypted( (char*)&val, 4 ); kId->set( val, i ); klient->getNachrichtEncrypted( &län, 1 ); char *txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); kName->set( new Text( txt ), i ); delete[] txt; klient->getNachrichtEncrypted( &län, 1 ); txt = new char[ län + 1 ]; txt[ län ] = 0; if( län ) klient->getNachrichtEncrypted( txt, län ); sName->set( new Text( txt ), i ); delete[] txt; klient->getNachrichtEncrypted( (char*)&val, 4 ); kupfer->set( val, i ); klient->getNachrichtEncrypted( (char*)&val, 4 ); verkauft->set( val, i ); klient->getNachrichtEncrypted( (char*)&val, 4 ); maxSpieler->set( val, i ); } } if( res == 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 ret; } bool InformationKlient::getEditorServer( int karteId, int *port, Text *ip ) // sucht nach dem Editor Server von einer Karte { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x2F", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&karteId, 4 ); klient->getNachrichtEncrypted( (char*)&ret, 1 ); if( ret == 1 ) { klient->getNachrichtEncrypted( (char*)port, 4 ); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); ip->fillText( ' ', län ); klient->getNachrichtEncrypted( ip->getText(), län ); 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; } bool InformationKlient::getKartenServer( int karteId, int *port, Text *ip ) // sucht nach dem Karten Server von einer Karte { cs.lock(); if( !verbunden ) verbinde(); if( !verbunden ) { cs.unlock(); return 0; } klient->sendeEncrypted( "\x30", 1 ); char ret = 0; klient->getNachrichtEncrypted( &ret, 1 ); if( ret == 1 ) { klient->sendeEncrypted( (char*)&karteId, 4 ); klient->getNachrichtEncrypted( (char*)&ret, 1 ); if( ret == 1 ) { klient->getNachrichtEncrypted( (char*)port, 4 ); char län = 0; klient->getNachrichtEncrypted( &län, 1 ); ip->fillText( ' ', län ); klient->getNachrichtEncrypted( ip->getText(), län ); 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; } bool InformationKlient::trenne() // trennt sich von dem Informaion Server { cs.lock(); if( !verbunden ) { cs.unlock(); return 1; } klient->sendeEncrypted( "\3", 1 ); Sleep( 100 ); klient->trenne(); verbunden = 0; cs.unlock(); return 1; } // constant bool InformationKlient::istVerbunden() const // prüft, ob mit Informaion Server verbunden { return verbunden; } char *InformationKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück { return fehler->getText(); } // Reference Counting InformationKlientV *InformationKlient::getThis() { ref++; return this; } InformationKlientV *InformationKlient::release() { ref--; if( !ref ) delete this; return 0; }