12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090 |
- #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 kId, unsigned short port, const char* ip, const char* key, unsigned char keyLen)
- : ReferenceCounter()
- {
- 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 Information 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 Information Server";
- k = (Network::Klient*)k->release();
- cs.unlock();
- return 0;
- }
- }
- else
- {
- err = "network error while connecting to Information Server";
- k = (Network::Klient*)k->release();
- cs.unlock();
- return 0;
- }
- cs.unlock();
- return 1;
- }
- // fragt nach dem Informationstext
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- // txt: Ein Zeiger auf ein Text Objekt, welches bei einem erfolgreichen Aufruf den Informationstext enthält
- // 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
- // spielId: Die Id des Spiels
- // 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
- // karteId: Die Id der Karte
- // 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
- // name: Der Name der Karte
- // Gibt bei misserfolg 0 zurück
- int InformationClient::getKarteId(const 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
- // name: Der Name des Spiels
- // Gibt bei misserfolg 0 zurück
- int InformationClient::getSpielId(const 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
- // accountId: Die Id des Accounts
- // 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
- // accountId: Die Id des Accounts
- // spielId: Die Id des Spiels
- // 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
- // karteId: Die id der Karte
- // 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
- // spielId: Die id des Spiels
- // 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
- // chatroomId: Die id des Chatrooms
- // 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
- // karteId: Die id der Karte
- // 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
- // name: Der Angezeigte Name des Accounts
- // Gibt bei misserfolg 0 zurück
- int InformationClient::getAccountId(const 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
- // name: Der name des Chatrooms
- // Gibt bei misserfolg 0 zurück
- int InformationClient::getChatroomId(const 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
- // gruppenId: Die id der Gruppe
- // 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
- // gruppeId: Die Id der Gruppe
- // 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
- // accountId: Die Accont Id des Spielers
- // spielId: Die Id des Spiels
- // 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 (ret == 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
- // spielId: Die Id des Spiels
- // 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
- // spielId: Die Id des Spiels
- // 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
- // dgId: Die Id der Dateigruppe
- // 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
- // spielId: Die Spiel Id zu der die Karten gehören sollen
- // 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 (ret == 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
- // pfad: Der Pfad der Dateigruppe
- // Gibt bei misserfolg 0 zurück
- int InformationClient::getDateiGruppeIdVonPfad(const 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
- // dg: Die Dateigruppen Id
- // 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
- // suche: Der Text, der in den Namen enthalten sein soll
- // seite: Die gewünschte Seite der Tabelle (enthält nach einem Erfolgreichen Aufruf die korrekte Seite)
- // maxSeite: Enthält nach erfolgreichem Aufruf die Maximale Seite
- // sortSpalte: Die Spalte, nach der Sortiert werden soll
- // 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 die Anzahl der Spieler zurück, -1 bei fehler
- int InformationClient::getSpielerListe(const 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::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
- // account: Die Id des Accounts
- // 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
- // account: Die Id des Accounts
- // 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
- // account: Die Id des Accounts
- // 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
- // account: Die Id des Accounts
- // 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
- // account: Die Id des Accounts
- // spiel: Die Id des Spiels
- // 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
- // account: Die Id des Accounts
- // 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
- // account: Die Id des Accounts
- // spieler: Enthält nach erfolgreichem Aufruf eine Liste mit Account Ids der Spiel Partner
- // karten: Enthält nach erfolgreichem Aufruf eine Liste mit den Ids der gespielten Karten
- // anzahl: Enthält nach erfolgreichem Aufruf eine Liste mit der Anzahl der Spiele
- // 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
- // account: Die Id des Accounts zu dem die Statistik ermittelt werden soll
- // seite: Die gewünschte Seite. Enthält nach efolgreichem Aufruf die korrekte Seite
- // maxSeite: Enthält nach erfolgreichem Aufruf die Macimale Seite
- // sortSpalte: Die Spalte, nach der Sortiert werden soll
- // rückwärts: 1:=Rückwärtzt Sortierung, 0:=Vorwärts Sortierung
- // werte: Enthält nach erfolgreichem Aufruf eine Liste mit Statistik Werten (gespielt, gewonnen, verloren, punkte, bw0, bw1, bw2, bw3, bw4, bw5)
- // 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)
- {
- 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
- 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
- // spielId: Die id des Spiels
- // 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;
- cs.unlock();
- return 0;
- }
- 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
- 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
- int InformationClient::getKartenListe(const 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)
- {
- 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
- // karteId: Die Id der Karte
- // 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] = 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
- // karteId: Die Id der Karte
- // 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] = 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
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- // 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
- // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
- // 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 = (Network::Klient*)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
- const char* InformationClient::getLetzterFehler() const
- {
- return err;
- }
|