|
@@ -1,26 +1,94 @@
|
|
|
#include "InformationClient.h"
|
|
|
+#include "Keys.h"
|
|
|
+#include <Klient.h>
|
|
|
+#include "EditorClient.h"
|
|
|
+#include "KartenClient.h"
|
|
|
+#include "HistorieClient.h"
|
|
|
|
|
|
using namespace KSGClient;
|
|
|
|
|
|
// Inhalt der InformationClient Klasse
|
|
|
|
|
|
// Konstruktor
|
|
|
-InformationClient::InformationClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
|
|
|
+InformationClient::InformationClient( int kId, unsigned short port, char *ip, char *key, unsigned char keyLen )
|
|
|
{
|
|
|
-
|
|
|
+ ref = 1;
|
|
|
+ this->ip = ip;
|
|
|
+ this->port = port;
|
|
|
+ cId = kId;
|
|
|
+ k = 0;
|
|
|
+ this->key = new char[ keyLen ];
|
|
|
+ memcpy( this->key, key, keyLen );
|
|
|
+ this->keyLen = keyLen;
|
|
|
}
|
|
|
|
|
|
// Destruktor
|
|
|
InformationClient::~InformationClient()
|
|
|
{
|
|
|
-
|
|
|
+ trenne( 1 );
|
|
|
+ delete[] key;
|
|
|
}
|
|
|
|
|
|
// verbindet ich mit dem zugewiesenen Informaion Server
|
|
|
// Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
|
|
|
bool InformationClient::verbinde()
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( k )
|
|
|
+ {
|
|
|
+ cs.unlock();
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ k = new Network::Klient();
|
|
|
+ int l = 0;
|
|
|
+ char *key;
|
|
|
+ Keys::getServerKey( &key, l, Keys::INFORMATION, Keys::SENDEN );
|
|
|
+ k->setSendeKey( key, l );
|
|
|
+ delete[] key;
|
|
|
+ Keys::getServerKey( &key, l, Keys::INFORMATION, Keys::EMPFANGEN );
|
|
|
+ k->setEmpfangKey( key, l );
|
|
|
+ delete[] key;
|
|
|
+ if( k->verbinde( port, ip ) )
|
|
|
+ {
|
|
|
+ if( k->sendeEncrypted( "\1", 1 ) )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&cId, 4 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = "error while identifying client News Server returned: ";
|
|
|
+ err += f;
|
|
|
+ delete[]f;
|
|
|
+ trenne( 0 );
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->setSendeKey( this->key, this->keyLen );
|
|
|
+ k->setEmpfangKey( this->key, this->keyLen );
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "network error while sending to Patch Server";
|
|
|
+ k = k->release();
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ err = "network error while connecting to Patch Server";
|
|
|
+ k = k->release();
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
// fragt nach dem Informationstext
|
|
@@ -29,7 +97,44 @@ bool InformationClient::verbinde()
|
|
|
// typ: ein Zeieger auf ein Integer, welches bei einem erfolgreichen Aufruf den Typ der Information enthält
|
|
|
bool InformationClient::getInformationText( Framework::Text *txt, int *typ )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ bool ret = 1;
|
|
|
+ ret = ret & k->sendeEncrypted( "\5", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ short län = 0;
|
|
|
+ ret = ret & k->getNachrichtEncrypted( (char*)&län, 2 );
|
|
|
+ char *text = new char[ län + 1 ];
|
|
|
+ text[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ ret = ret & k->getNachrichtEncrypted( text, län );
|
|
|
+ txt->setText( text );
|
|
|
+ delete[]text;
|
|
|
+ char type = 0;
|
|
|
+ ret = ret & k->getNachrichtEncrypted( &type, 1 );
|
|
|
+ *typ = type;
|
|
|
+ if( !ret )
|
|
|
+ err = "Verbindungsfehler";
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// fragt, ob das entsprechende Spiel vom Server gesperrt wurde
|
|
@@ -37,7 +142,35 @@ bool InformationClient::getInformationText( Framework::Text *txt, int *typ )
|
|
|
// Gibt 1 zurück, falls das Spiel gespielt werden darf, 0 sonnst
|
|
|
bool InformationClient::istSpielErlaubt( int spielId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\6", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( !ret )
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return ret != 0;
|
|
|
}
|
|
|
|
|
|
// fragt, ob die entsprechende Karte vom Server gesperrt wurde
|
|
@@ -45,7 +178,35 @@ bool InformationClient::istSpielErlaubt( int spielId )
|
|
|
// Gibt 1 zurück, falls die Karte gespielt werden darf, 0 sonnst
|
|
|
bool InformationClient::istKarteErlaubt( int karteId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\7", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&karteId, 4 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( !ret )
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return ret != 0;
|
|
|
}
|
|
|
|
|
|
// Ermittelt die Id einer Karte
|
|
@@ -53,7 +214,35 @@ bool InformationClient::istKarteErlaubt( int karteId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getKarteId( char *name )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x9", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char län = textLength( name );
|
|
|
+ k->sendeEncrypted( &län, 1 );
|
|
|
+ k->sendeEncrypted( name, län );
|
|
|
+ int id = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&id, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return id;
|
|
|
}
|
|
|
|
|
|
// Fragt nach der Id eines Spiels
|
|
@@ -61,7 +250,35 @@ int InformationClient::getKarteId( char *name )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getSpielId( char *name )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x8", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char län = textLength( name );
|
|
|
+ k->sendeEncrypted( &län, 1 );
|
|
|
+ k->sendeEncrypted( name, län );
|
|
|
+ int id = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&id, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return id;
|
|
|
}
|
|
|
|
|
|
// fragt nach dem Namen eines Accounts
|
|
@@ -69,7 +286,39 @@ int InformationClient::getSpielId( char *name )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Text *InformationClient::getSpielerName( int accountId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\xA", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&accountId, 4 );
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *name = new char[ län + 1 ];
|
|
|
+ name[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( name, län );
|
|
|
+ Text *ret = new Text( name );
|
|
|
+ delete[]name;
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// fragt nach der Spiel Statistik eines Accounts
|
|
@@ -78,7 +327,41 @@ Framework::Text *InformationClient::getSpielerName( int accountId )
|
|
|
// werte: Nach erfolgreichem Aufruf enthält die Liste die Statistik werte (gespielt, gewonnen, verloren, punkte, bw0, bw1, bw2, bw3, bw4, bw5)
|
|
|
bool InformationClient::getSpielStatistik( int accountId, int spielId, Framework::Array< int > *werte )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ bool ret = 1;
|
|
|
+ ret = ret & k->sendeEncrypted( "\xB", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ ret = ret & k->sendeEncrypted( (char*)&accountId, 4 );
|
|
|
+ ret = ret & k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ for( int i = 0; i < 10; i++ )
|
|
|
+ {
|
|
|
+ int tmp = 0;
|
|
|
+ ret = ret & k->getNachrichtEncrypted( (char*)&tmp, 4 );
|
|
|
+ werte->add( tmp, i );
|
|
|
+ }
|
|
|
+ if( !ret )
|
|
|
+ err = "Verbindungsfehler";
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// fragt nach dem Namen einer Karte
|
|
@@ -86,7 +369,39 @@ bool InformationClient::getSpielStatistik( int accountId, int spielId, Framework
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Text *InformationClient::getKarteName( int karteId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\xE", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&karteId, 4 );
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *name = new char[ län + 1 ];
|
|
|
+ name[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( name, län );
|
|
|
+ Text *ret = new Text( name );
|
|
|
+ delete[]name;
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// fragt nach dem Namen eines Spiels
|
|
@@ -94,7 +409,39 @@ Framework::Text *InformationClient::getKarteName( int karteId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Text *InformationClient::getSpielName( int spielId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\xF", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *name = new char[ län + 1 ];
|
|
|
+ name[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( name, län );
|
|
|
+ Text *ret = new Text( name );
|
|
|
+ delete[]name;
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// fragt nach dem Namen eines Chatrooms
|
|
@@ -102,7 +449,39 @@ Framework::Text *InformationClient::getSpielName( int spielId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Text *InformationClient::getChatroomName( int chatroomId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x10", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&chatroomId, 4 );
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *name = new char[ län + 1 ];
|
|
|
+ name[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( name, län );
|
|
|
+ Text *ret = new Text( name );
|
|
|
+ delete[]name;
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// fragt zu welcher Spielart die Karte gehört
|
|
@@ -110,7 +489,35 @@ Framework::Text *InformationClient::getChatroomName( int chatroomId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getSpielId( int karteId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x11", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&karteId, 4 );
|
|
|
+ int ret = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 4 );
|
|
|
+ if( !ret )
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// gibt die Id eines Accounts zurück
|
|
@@ -118,7 +525,42 @@ int InformationClient::getSpielId( int karteId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getAccountId( char *name )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char län = textLength( name );
|
|
|
+ if( !län )
|
|
|
+ {
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x12", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( &län, 1 );
|
|
|
+ k->sendeEncrypted( name, län );
|
|
|
+ int ret = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 4 );
|
|
|
+ if( !ret )
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// gibt die Id des Chatrooms zurück
|
|
@@ -126,7 +568,42 @@ int InformationClient::getAccountId( char *name )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getChatroomId( char *name )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char län = textLength( name );
|
|
|
+ if( !län )
|
|
|
+ {
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x13", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( &län, 1 );
|
|
|
+ k->sendeEncrypted( name, län );
|
|
|
+ int ret = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 4 );
|
|
|
+ if( !ret )
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// gibt die karten Id zurück, zu dem eine Gruppe erstellt wurde
|
|
@@ -134,14 +611,68 @@ int InformationClient::getChatroomId( char *name )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getGruppenKarteId( int gruppenId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\xD", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&gruppenId, 4 );
|
|
|
+ int id = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&id, 4 );
|
|
|
+ if( !id )
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return id;
|
|
|
}
|
|
|
|
|
|
// gibt 1 zurück, wenn zu einer Gruppe Spieler hinzugefügt werden können, 0 sonnst
|
|
|
// gruppeId: Die id der Gruppe
|
|
|
bool InformationClient::getGruppeSpielerHinzufügen( int gruppeId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x1E", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&gruppeId, 4 );
|
|
|
+ char sh = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&sh, 1 );
|
|
|
+ cs.unlock();
|
|
|
+ return sh == 1;
|
|
|
}
|
|
|
|
|
|
// gibt die Account Id des Gruppen Administrators zurück
|
|
@@ -149,7 +680,35 @@ bool InformationClient::getGruppeSpielerHinzuf
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getGruppeAdminId( int gruppeId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x15", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&gruppeId, 4 );
|
|
|
+ int id = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&id, 4 );
|
|
|
+ if( !id )
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return id;
|
|
|
}
|
|
|
|
|
|
// gibt die Punkte eines Spielers zurück
|
|
@@ -158,14 +717,79 @@ int InformationClient::getGruppeAdminId( int gruppeId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getSpielerPunkte( int accountId, int spielId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x14", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[]f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ k->sendeEncrypted( (char*)&accountId, 4 );
|
|
|
+ int punkte = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&punkte, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return punkte;
|
|
|
}
|
|
|
|
|
|
// gibt eine Liste mit Ids von gekauften Spielen zurück
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Array< int > *InformationClient::getAccountSpielArtListe()
|
|
|
{
|
|
|
-
|
|
|
+ char ret = 0;
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x16", 1 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ int anz = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&anz, 4 );
|
|
|
+ Array< int > *list = new Array< int >();
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&id, 4 );
|
|
|
+ list->add( id );
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+ if( ref == 3 )
|
|
|
+ {
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ char *f = new char[ ret + 1 ];
|
|
|
+ f[ ret ] = 0;
|
|
|
+ if( ret )
|
|
|
+ k->getNachrichtEncrypted( f, ret );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// gibt die neuste Version eines Spiels zurück
|
|
@@ -173,14 +797,65 @@ Framework::Array< int > *InformationClient::getAccountSpielArtListe()
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getSpielVersion( int spielId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x17", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ int version = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&version, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return version;
|
|
|
}
|
|
|
|
|
|
// gibt das Kupfer des Accounts zurück
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getKupfer()
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x18", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int kupfer = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&kupfer, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return kupfer;
|
|
|
}
|
|
|
|
|
|
// Gibt die Dateigruppem Id eines Spieles zurück
|
|
@@ -188,7 +863,33 @@ int InformationClient::getKupfer()
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getDateiGruppeIdVonSpiel( int spielId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x19", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ int dgId = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&dgId, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return dgId;
|
|
|
}
|
|
|
|
|
|
// Gibt den Dateigruppen Pfad zurück
|
|
@@ -196,7 +897,49 @@ int InformationClient::getDateiGruppeIdVonSpiel( int spielId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Text *InformationClient::getDateiGruppePfad( int dgId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x1A", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&dgId, 4 );
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 1 )
|
|
|
+ {
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *pf = new char[ län + 1 ];
|
|
|
+ pf[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( pf, län );
|
|
|
+ Text *pfad = new Text( pf );
|
|
|
+ delete[] pf;
|
|
|
+ cs.unlock();
|
|
|
+ return pfad;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// gibt eine Liste mit gekauften Karten zurück
|
|
@@ -204,7 +947,46 @@ Framework::Text *InformationClient::getDateiGruppePfad( int dgId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Array< int > *InformationClient::getAccountKarteListe( int spielId )
|
|
|
{
|
|
|
-
|
|
|
+ char ret = 0;
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x1B", 1 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ int anz = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&anz, 4 );
|
|
|
+ Array< int > *list = new Array< int >();
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int id = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&id, 4 );
|
|
|
+ list->add( id );
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+ if( ref == 3 )
|
|
|
+ {
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ char *f = new char[ ret + 1 ];
|
|
|
+ f[ ret ] = 0;
|
|
|
+ if( ret )
|
|
|
+ k->getNachrichtEncrypted( f, ret );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Gibt die Dateigruppen Id eines Pfades zurück
|
|
@@ -212,7 +994,37 @@ Framework::Array< int > *InformationClient::getAccountKarteListe( int spielId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getDateiGruppeIdVonPfad( char *pfad )
|
|
|
{
|
|
|
-
|
|
|
+ char län = textLength( pfad );
|
|
|
+ if( !län )
|
|
|
+ return 0;
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x2A", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&län, 1 );
|
|
|
+ k->sendeEncrypted( (char*)pfad, län );
|
|
|
+ int dgId = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&dgId, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return dgId;
|
|
|
}
|
|
|
|
|
|
// gibt die neuste Version einer Dateigruppe zurück
|
|
@@ -220,7 +1032,33 @@ int InformationClient::getDateiGruppeIdVonPfad( char *pfad )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
int InformationClient::getDateiGruppeVersion( int dg )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x2B", 1 );
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( (char*)&dg, 4 );
|
|
|
+ int version = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&version, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return version;
|
|
|
}
|
|
|
|
|
|
// Gibt eine Liste Mit Accounts zurück, die einen bestimmten Text im Namen haben und bestimmt Sortiert ist
|
|
@@ -231,18 +1069,142 @@ int InformationClient::getDateiGruppeVersion( int dg )
|
|
|
// rückwärts: 1:=Rückwärtzt Sortierung, 0:=Vorwärts Sortierung
|
|
|
// accounts: Enthält nach erfolgreichem Aufruf die Daten der Accounts
|
|
|
// Gibt die Anzahl der gefundenen Accounts zurück
|
|
|
-// Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
|
|
|
-int InformationClient::getSpielerListe( char *suche, int *seite, int *maxSeite, char sortSpalte, char rückwärts, Framework::RCArray< AccountInfo > *accounts )
|
|
|
+// Gibt die Anzahl der Spieler zurück, -1 bei fehler
|
|
|
+int InformationClient::getSpielerListe( char *suche, int *seite, int *maxSeite, char sortSpalte, char rückwärts, Framework::Array< AccountInfo > *accounts )
|
|
|
{
|
|
|
-
|
|
|
+ char län = textLength( suche );
|
|
|
+ if( !län )
|
|
|
+ return -1;
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->sendeEncrypted( "\xC", 1 );
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( &län, 1 );
|
|
|
+ k->sendeEncrypted( suche, län );
|
|
|
+ k->sendeEncrypted( (char*)seite, 4 );
|
|
|
+ k->sendeEncrypted( &sortSpalte, 1 );
|
|
|
+ k->sendeEncrypted( &rückwärts, 1 );
|
|
|
+ k->getNachrichtEncrypted( (char*)seite, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char*)maxSeite, 4 );
|
|
|
+ int ret = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 4 );
|
|
|
+ for( int i = 0; i < ret; i++ )
|
|
|
+ {
|
|
|
+ AccountInfo info;
|
|
|
+ k->getNachrichtEncrypted( (char*)&info.id, 4 );
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ info.name = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ info.zuletztOnline = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ info.letztesSpiel = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ info.letzteKarte = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ info.punkte = txt;
|
|
|
+ delete[] txt;
|
|
|
+ accounts->add( info );
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ if( serverReturn == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return -1;
|
|
|
}
|
|
|
|
|
|
// ermittelt die aktivität eines Spielers
|
|
|
// accId: Die Id des Accounts
|
|
|
// info: Enthält nach erfolgreichem Aufruf die Aktivitätsinformationen der letzten 30 Tage
|
|
|
-bool InformationClient::getSpielerAktivität( int accId, Framework::RCArray< AccountActivityInfo > *info )
|
|
|
+bool InformationClient::getSpielerAktivität( int accId, Framework::Array< AccountActivityInfo > *info )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char ret = 0;
|
|
|
+ k->sendeEncrypted( "\x1F", 1 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&accId, 4 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ for( int i = 0; ret; i++ )
|
|
|
+ {
|
|
|
+ AccountActivityInfo inf;
|
|
|
+ char *txt = new char[ ret + 1 ];
|
|
|
+ txt[ ret ] = 0;
|
|
|
+ k->getNachrichtEncrypted( txt, ret );
|
|
|
+ inf.datum = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( (char*)&inf.stOnline, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&inf.stGespielt, 8 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&inf.anzSpiele, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&inf.anzGewonnen, 4 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ info->add( inf );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
// Gibt zurück, wie oft ein Spieler eine Karte schon gespielt hat
|
|
@@ -250,7 +1212,40 @@ bool InformationClient::getSpielerAktivit
|
|
|
// karte: Die Id der Karte
|
|
|
int InformationClient::getAccountKarteSpiele( int account, int karte )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char ret = 0;
|
|
|
+ k->sendeEncrypted( "\x20", 1 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ k->sendeEncrypted( (char*)&karte, 4 );
|
|
|
+ int anz = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&anz, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return anz;
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Gibt zurück, wie oft ein Spieler eine Karte schon gewonnen hat
|
|
@@ -258,7 +1253,40 @@ int InformationClient::getAccountKarteSpiele( int account, int karte )
|
|
|
// karte: Die Id der Karte
|
|
|
int InformationClient::getAccountKarteSpieleGewonnen( int account, int karte )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char ret = 0;
|
|
|
+ k->sendeEncrypted( "\x21", 1 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ k->sendeEncrypted( (char*)&karte, 4 );
|
|
|
+ int anz = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&anz, 4 );
|
|
|
+ cs.unlock();
|
|
|
+ return anz;
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Gibt zurück, ob ein Spieler die Karte im Besitz hat
|
|
@@ -266,7 +1294,40 @@ int InformationClient::getAccountKarteSpieleGewonnen( int account, int karte )
|
|
|
// karte: Die Id der Karte
|
|
|
bool InformationClient::hatAccountKarte( int account, int karte )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char ret = 0;
|
|
|
+ k->sendeEncrypted( "\x22", 1 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ k->sendeEncrypted( (char*)&karte, 4 );
|
|
|
+ char status = 0;
|
|
|
+ k->getNachrichtEncrypted( &status, 1 );
|
|
|
+ cs.unlock();
|
|
|
+ return status != 0;
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Gibt zurück, ob ein Spieler ein Spiel im Besitz hat
|
|
@@ -274,7 +1335,40 @@ bool InformationClient::hatAccountKarte( int account, int karte )
|
|
|
// spiel: Die Id des Spiels
|
|
|
bool InformationClient::hatAccountSpiel( int account, int spiel )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char ret = 0;
|
|
|
+ k->sendeEncrypted( "\x23", 1 );
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ k->sendeEncrypted( (char*)&spiel, 4 );
|
|
|
+ char status = 0;
|
|
|
+ k->getNachrichtEncrypted( &status, 1 );
|
|
|
+ cs.unlock();
|
|
|
+ return status != 0;
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// gibt eine Liste mit Ids von Karten zurück, die von einem Spieler bereits gespielt wurden
|
|
@@ -283,7 +1377,47 @@ bool InformationClient::hatAccountSpiel( int account, int spiel )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Array< int > *InformationClient::getAccountKarteGespieltListe( int account, int spielId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x24", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ int anz = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&anz, 4 );
|
|
|
+ Array< int > *ret = new Array< int >();
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int val = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ ret->set( val, i );
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// gibt eine Liste mit Ids von Spielen zurück, die von einem Spieler bereits gespielt wurden
|
|
@@ -291,7 +1425,46 @@ Framework::Array< int > *InformationClient::getAccountKarteGespieltListe( int ac
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
Framework::Array< int > *InformationClient::getAccountSpielGespieltListe( int account )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x25", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ int anz = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&anz, 4 );
|
|
|
+ Array< int > *ret = new Array< int >();
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int val = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ ret->set( val, i );
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Gibt eine Liste von Spiel Partnern eines Spielers zurück
|
|
@@ -302,7 +1475,49 @@ Framework::Array< int > *InformationClient::getAccountSpielGespieltListe( int ac
|
|
|
// Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
|
|
|
bool InformationClient::getSpielPartnerListe( int account, Framework::Array< int > *spieler, Framework::Array< int > *karten, Framework::Array< int > *anzahl )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x26", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ int anz = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&anz, 4 );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ int val = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ spieler->set( val, i );
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ karten->set( val, i );
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ anzahl->set( val, i );
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Gibt eine Liste mit Spiel Statistiken zurück
|
|
@@ -315,17 +1530,219 @@ bool InformationClient::getSpielPartnerListe( int account, Framework::Array< int
|
|
|
// namen: Enthält nach erfolgreichem Aufruf die Namen der Spiele
|
|
|
// Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
|
|
|
bool InformationClient::getStatistikListe( int account, int *seite, int *maxSeite, char sortSpalte, char rückwärts,
|
|
|
- Framework::RCArray< Framework::Array< int > > *werte, Framework::RCArray< Framework::Text > *namen )
|
|
|
+ Framework::RCArray< Framework::Array< int > > *werte, Framework::RCArray< Framework::Text > *namen )
|
|
|
{
|
|
|
-
|
|
|
+ if( !*seite )
|
|
|
+ *seite = 1;
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char serverReturn = 0;
|
|
|
+ k->sendeEncrypted( "\x27", 1 );
|
|
|
+ k->getNachrichtEncrypted( &serverReturn, 1 );
|
|
|
+ if( serverReturn == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ k->sendeEncrypted( (char*)seite, 4 );
|
|
|
+ k->sendeEncrypted( &sortSpalte, 1 );
|
|
|
+ k->sendeEncrypted( &rückwärts, 1 );
|
|
|
+ k->getNachrichtEncrypted( (char*)seite, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char*)maxSeite, 4 );
|
|
|
+ int zAnz = 0;
|
|
|
+ int sAnz = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&zAnz, 4 );
|
|
|
+ k->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;
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ tmp->set( val, j );
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *n = new char[ län + 1 ];
|
|
|
+ n[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->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;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Gibt eine Liste mit den Daten der letzten 20 Spiele von einem Account zurück
|
|
|
// account: Die Id des Accounts
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
-SpielHistorieListe *InformationClient::getSpielHistorieDaten( int account )
|
|
|
+Array< SpielHistorieDaten > *InformationClient::getSpielHistorieDaten( int account )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x28", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ Array< SpielHistorieDaten > *daten = new Array< SpielHistorieDaten >();
|
|
|
+ k->sendeEncrypted( (char*)&account, 4 );
|
|
|
+ char anz = 0;
|
|
|
+ k->getNachrichtEncrypted( &anz, 1 );
|
|
|
+ for( char i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ SpielHistorieDaten spiel;
|
|
|
+ k->getNachrichtEncrypted( (char*)&spiel.id, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&spiel.karteId, 4 );
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spiel.spiel = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spiel.karte = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spiel.datum = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spiel.status = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spiel.dauer = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spiel.spielStatus = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spiel.gewinner = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( (char*)&spiel.sAnzahl, 4 );
|
|
|
+ char tAnz = 0;
|
|
|
+ k->getNachrichtEncrypted( &tAnz, 1 );
|
|
|
+ for( char j = 0; j < tAnz; j++ )
|
|
|
+ {
|
|
|
+ SpielHistorieTeamDaten team;
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ team.name = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( (char*)&team.sAnzahl, 4 );
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ team.status = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( (char*)&team.farbe, 4 );
|
|
|
+ char sAnz = 0;
|
|
|
+ k->getNachrichtEncrypted( &sAnz, 1 );
|
|
|
+ for( char ki = 0; ki < sAnz; ki++ )
|
|
|
+ {
|
|
|
+ SpielHistorieSpielerDaten spieler;
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spieler.name = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( (char*)&spieler.punkte, 4 );
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ spieler.status = txt;
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( (char*)&spieler.farbe, 4 );
|
|
|
+ team.spieler.add( spieler );
|
|
|
+ }
|
|
|
+ spiel.teams.add( team );
|
|
|
+ }
|
|
|
+ daten->add( spiel );
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return daten;
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Erzeugt einen Client zu dem Historie Server, welcher die Aufzeichnungen und Statistiken eines Bestimmten Spiels verwaltet
|
|
@@ -333,30 +1750,155 @@ SpielHistorieListe *InformationClient::getSpielHistorieDaten( int account )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
HistorieServerClient *InformationClient::createHistorieServerClient( int spielId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x29", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&spielId, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->getNachrichtEncrypted( (char*)port, 4 );
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *ip = new char[ län + 1 ];
|
|
|
+ ip[ län ] = 0;
|
|
|
+ k->getNachrichtEncrypted( ip, län );
|
|
|
+ HistorieClient *ret = new HistorieClient( cId, port, ip, key, keyLen, spielId );
|
|
|
+ delete[] ip;
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
- // sucht nach dem Historie Server von einem Spiel
|
|
|
- // Prüft, ob der Account bestimmte Berechtigungen besitzt
|
|
|
- // recht: Die Id der Berechtigungen
|
|
|
+
|
|
|
+// sucht nach dem Historie Server von einem Spiel
|
|
|
+// Prüft, ob der Account bestimmte Berechtigungen besitzt
|
|
|
+// recht: Die Id der Berechtigungen
|
|
|
bool InformationClient::hatRecht( int recht )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x2D", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&recht, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 1 );
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return ret == 1;
|
|
|
}
|
|
|
- // Prüft ob Berechtigung vorhanden
|
|
|
- // Gibt eine Liste mit Karten zurück, die einen bestimmten Text im Namen enthalten und bestimmt sortiert ist
|
|
|
- // filter: Die Zeichenkette, die im Namen Auftreten soll
|
|
|
- // sortSpalte: Der Index der Spalte, nach der sortiert werden soll
|
|
|
- // absteigend: 1:=absteigende sortierung,0:=aufsteigende Sortierung
|
|
|
- // kId: Eine Liste, welche nach einem erfolgreichen Aufruf die Ids der Karten enthält
|
|
|
- // kName: Eine Liste, welche nach einem erfolgreichen Aufruf die Namen der Karten enthält
|
|
|
- // sName: Eine Liste, welche nach einem erfolgreichen Aufruf die Namen der Spiele der Karten enthält
|
|
|
- // kupfer: Eine Liste, welche nach einem erfolgreichen Aufruf die Preise der Karten in Kupfer
|
|
|
- // verkauft: Eine Liste, welche nach einem erfolgreichen Aufruf die Anzahl der Verkäufe der Karten enthält
|
|
|
- // maxSpieler: Eine Liste, welche nach einem erfolgreichen Aufruf die Maximalen Spieleranzahlen der Karten enthält
|
|
|
+
|
|
|
+// Prüft ob Berechtigung vorhanden
|
|
|
+// Gibt eine Liste mit Karten zurück, die einen bestimmten Text im Namen enthalten und bestimmt sortiert ist
|
|
|
+// filter: Die Zeichenkette, die im Namen Auftreten soll
|
|
|
+// sortSpalte: Der Index der Spalte, nach der sortiert werden soll
|
|
|
+// absteigend: 1:=absteigende sortierung,0:=aufsteigende Sortierung
|
|
|
+// kId: Eine Liste, welche nach einem erfolgreichen Aufruf die Ids der Karten enthält
|
|
|
+// kName: Eine Liste, welche nach einem erfolgreichen Aufruf die Namen der Karten enthält
|
|
|
+// sName: Eine Liste, welche nach einem erfolgreichen Aufruf die Namen der Spiele der Karten enthält
|
|
|
+// kupfer: Eine Liste, welche nach einem erfolgreichen Aufruf die Preise der Karten in Kupfer
|
|
|
+// verkauft: Eine Liste, welche nach einem erfolgreichen Aufruf die Anzahl der Verkäufe der Karten enthält
|
|
|
+// maxSpieler: Eine Liste, welche nach einem erfolgreichen Aufruf die Maximalen Spieleranzahlen der Karten enthält
|
|
|
int InformationClient::getKartenListe( char *filter, char sortSpalte, char absteigend, Framework::Array< int > *kId, Framework::RCArray< Framework::Text > *kName, Framework::RCArray< Framework::Text > *sName,
|
|
|
- Framework::Array< int > *kupfer, Framework::Array< int > *verkauft, Framework::Array< int > *maxSpieler )
|
|
|
+ Framework::Array< int > *kupfer, Framework::Array< int > *verkauft, Framework::Array< int > *maxSpieler )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x2E", 1 );
|
|
|
+ char res = 0;
|
|
|
+ k->getNachrichtEncrypted( &res, 1 );
|
|
|
+ int ret = 0;
|
|
|
+ if( res == 1 )
|
|
|
+ {
|
|
|
+ char län = textLength( filter );
|
|
|
+ k->sendeEncrypted( &län, 1 );
|
|
|
+ k->sendeEncrypted( filter, län );
|
|
|
+ k->sendeEncrypted( &sortSpalte, 1 );
|
|
|
+ k->sendeEncrypted( &absteigend, 1 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 4 );
|
|
|
+ for( int i = 0; i < ret; i++ )
|
|
|
+ {
|
|
|
+ int val = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ kId->set( val, i );
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ kName->set( new Text( txt ), i );
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ txt = new char[ län + 1 ];
|
|
|
+ txt[ län ] = 0;
|
|
|
+ if( län )
|
|
|
+ k->getNachrichtEncrypted( txt, län );
|
|
|
+ sName->set( new Text( txt ), i );
|
|
|
+ delete[] txt;
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ kupfer->set( val, i );
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ verkauft->set( val, i );
|
|
|
+ k->getNachrichtEncrypted( (char*)&val, 4 );
|
|
|
+ maxSpieler->set( val, i );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( res == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ }
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// Erzeugt einen Client zu dem Editor Server von der Karte mit einer bestimmten Id
|
|
@@ -364,7 +1906,50 @@ int InformationClient::getKartenListe( char *filter, char sortSpalte, char abste
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
EditorServerClient *InformationClient::createEditorServerClient( int karteId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x2F", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&karteId, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ int port = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&port, 4 );
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *ip = new char[ län + 1 ];
|
|
|
+ ip[ län - 1 ] = 0;
|
|
|
+ k->getNachrichtEncrypted( ip, län );
|
|
|
+ EditorClient *ret = new EditorClient( cId, (unsigned short)port, ip, this->key, this->keyLen );
|
|
|
+ delete[] ip;
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Erzeugt einen Client zu dem Karten Server von der Karte mit einer bestimmten Id
|
|
@@ -372,7 +1957,50 @@ EditorServerClient *InformationClient::createEditorServerClient( int karteId )
|
|
|
// Gibt bei misserfolg 0 zurück
|
|
|
KartenServerClient *InformationClient::createKartenServerClient( int karteId )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\x30", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( (char*)&karteId, 4 );
|
|
|
+ k->getNachrichtEncrypted( (char*)&ret, 1 );
|
|
|
+ if( ret == 1 )
|
|
|
+ {
|
|
|
+ int port = 0;
|
|
|
+ k->getNachrichtEncrypted( (char*)&port, 4 );
|
|
|
+ char län = 0;
|
|
|
+ k->getNachrichtEncrypted( &län, 1 );
|
|
|
+ char *ip = new char[ län + 1 ];
|
|
|
+ ip[ län - 1 ] = 0;
|
|
|
+ k->getNachrichtEncrypted( ip, län );
|
|
|
+ KartenClient *ret = new KartenClient( cId, (unsigned short)port, ip, this->key, this->keyLen );
|
|
|
+ delete[] ip;
|
|
|
+ cs.unlock();
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if( ret == 3 )
|
|
|
+ {
|
|
|
+ char byte = 0;
|
|
|
+ k->getNachrichtEncrypted( &byte, 1 );
|
|
|
+ char *f = new char[ byte + 1 ];
|
|
|
+ f[ byte ] = 0;
|
|
|
+ k->getNachrichtEncrypted( f, byte );
|
|
|
+ err = f;
|
|
|
+ delete[] f;
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ err = "Unbekannter Fehler";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
// Erhält die Verbindung aufrecht
|
|
@@ -380,7 +2008,21 @@ KartenServerClient *InformationClient::createKartenServerClient( int karteId )
|
|
|
// Sollte während einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
|
|
|
bool InformationClient::keepAlive()
|
|
|
{
|
|
|
-
|
|
|
+ if( !cs.tryLock() )
|
|
|
+ return 1;
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ err = "Der Client ist nicht verbunden.";
|
|
|
+ cs.unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ char res = 0;
|
|
|
+ bool ok = k->sendeEncrypted( "\x2C", 1 );
|
|
|
+ ok &= k->getNachrichtEncrypted( &res, 1 );
|
|
|
+ cs.unlock();
|
|
|
+ if( res != 1 || !ok )
|
|
|
+ trenne( 0 );
|
|
|
+ return res == 1;
|
|
|
}
|
|
|
|
|
|
// Trennt die Verbindung zum Server
|
|
@@ -388,31 +2030,75 @@ bool InformationClient::keepAlive()
|
|
|
// Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
|
|
|
bool InformationClient::trenne( bool abmelden )
|
|
|
{
|
|
|
-
|
|
|
+ cs.lock();
|
|
|
+ verbinde();
|
|
|
+ if( !k )
|
|
|
+ {
|
|
|
+ cs.unlock();
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ if( abmelden )
|
|
|
+ {
|
|
|
+ k->sendeEncrypted( "\4", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 3 )
|
|
|
+ { // error
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ char *msg = new char[ ret + 1 ];
|
|
|
+ msg[ ret ] = 0;
|
|
|
+ if( ret )
|
|
|
+ k->getNachrichtEncrypted( msg, ret );
|
|
|
+ err = "error while unregister Client Information Server returned: ";
|
|
|
+ err += msg;
|
|
|
+ delete[] msg;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ k->sendeEncrypted( "\3", 1 );
|
|
|
+ char ret = 0;
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ if( ret == 3 )
|
|
|
+ { // error
|
|
|
+ k->getNachrichtEncrypted( &ret, 1 );
|
|
|
+ char *msg = new char[ ret + 1 ];
|
|
|
+ msg[ ret ] = 0;
|
|
|
+ if( ret )
|
|
|
+ k->getNachrichtEncrypted( msg, ret );
|
|
|
+ err = "error while trenne Information Server returned: ";
|
|
|
+ err += msg;
|
|
|
+ delete[] msg;
|
|
|
+ }
|
|
|
+ k->trenne();
|
|
|
+ k = k->release();
|
|
|
+ cs.unlock();
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
// Gibt 1 zurück, falls der Client verbunden ist, 0 sonst
|
|
|
bool InformationClient::istVerbunden() const
|
|
|
{
|
|
|
-
|
|
|
+ return k != 0;
|
|
|
}
|
|
|
|
|
|
// gibt den Letzten Fehlertext zuück
|
|
|
// sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
|
|
|
char *InformationClient::getLetzterFehler() const
|
|
|
{
|
|
|
-
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
// Erhöht den Reference Counter um 1 un gibt this zurück
|
|
|
InformationServerClient *InformationClient::getThis()
|
|
|
{
|
|
|
-
|
|
|
+ ref++;
|
|
|
+ return this;
|
|
|
}
|
|
|
|
|
|
// Verringert den Reference Counter um 1 und gibt 0 zurück.
|
|
|
// Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst
|
|
|
InformationServerClient *InformationClient::release()
|
|
|
{
|
|
|
-
|
|
|
+ if( !--ref )
|
|
|
+ delete this;
|
|
|
+ return 0;
|
|
|
}
|