InformationK.cpp 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097
  1. #include "../KSGKlient.h"
  2. #include "../KSGServer.h"
  3. #include "../../NachLogin/Account/Historie/AccountHistorieDaten.h"
  4. #include <iostream>
  5. #include "../Keys.h"
  6. #include <Globals.h>
  7. int waiting = 0;
  8. // Inhalt der InformationKlient Klasse aus KSGKlient.h
  9. // Konstruktor
  10. InformationKlient::InformationKlient()
  11. {
  12. verbunden = 0;
  13. klient = 0;
  14. fehler = new Text( "" );
  15. klientId = getKlientId();
  16. ref = 1;
  17. std::cout << "Initialize CS INF\n";
  18. }
  19. // Destruktor
  20. InformationKlient::~InformationKlient() // wenn verbunden, dann trennen
  21. {
  22. cs.lock();
  23. if( klient )
  24. {
  25. char serverReturn = 0;
  26. if( verbunden )
  27. {
  28. klient->sendeEncrypted( "\4", 1 );
  29. klient->getNachrichtEncrypted( &serverReturn, 1 );
  30. if( serverReturn == 3 )
  31. {
  32. char län = 0;
  33. klient->getNachrichtEncrypted( &län, 1 );
  34. char *nachricht = new char[ län + 1 ];
  35. nachricht[ län ] = 0;
  36. klient->getNachrichtEncrypted( nachricht, län );
  37. delete[]nachricht;
  38. }
  39. klient->sendeEncrypted( "\3", 1 );
  40. klient->getNachrichtEncrypted( &serverReturn, 1 );
  41. klient->trenne();
  42. }
  43. else
  44. {
  45. int keyLen = 0;
  46. char *key = 0;
  47. Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN );
  48. klient->setSendeKey( key, keyLen );
  49. delete[] key;
  50. Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN );
  51. klient->setEmpfangKey( key, keyLen );
  52. delete[] key;
  53. klient->verbinde( klient->getServerPort(), klient->getServerIp() );
  54. klient->sendeEncrypted( "\1", 1 );
  55. klient->sendeEncrypted( (char*)&klientId, 4 );
  56. klient->getNachrichtEncrypted( &serverReturn, 1 );
  57. if( serverReturn == 3 )
  58. {
  59. char län = 0;
  60. klient->getNachrichtEncrypted( &län, 1 );
  61. char *nachricht = new char[ län + 1 ];
  62. nachricht[ län ] = 0;
  63. klient->getNachrichtEncrypted( nachricht, län );
  64. delete[]nachricht;
  65. }
  66. else
  67. {
  68. char *sl = 0;
  69. char slLän = getSchlüssel( &sl );
  70. klient->setSendeKey( sl, slLän );
  71. klient->setEmpfangKey( sl, slLän );
  72. delete[] sl;
  73. klient->sendeEncrypted( "\4", 1 );
  74. klient->getNachrichtEncrypted( &serverReturn, 1 );
  75. if( serverReturn == 3 )
  76. {
  77. char län = 0;
  78. klient->getNachrichtEncrypted( &län, 1 );
  79. char *nachricht = new char[ län + 1 ];
  80. nachricht[ län ] = 0;
  81. klient->getNachrichtEncrypted( nachricht, län );
  82. delete[]nachricht;
  83. }
  84. }
  85. klient->sendeEncrypted( "\3", 1 );
  86. klient->getNachrichtEncrypted( &serverReturn, 1 );
  87. klient->trenne();
  88. }
  89. klient = klient->release();
  90. }
  91. fehler = fehler->release();
  92. cs.unlock();
  93. std::cout << "DELETE CS INF\n";
  94. }
  95. // nicht constant
  96. bool InformationKlient::verbinde() // verbindet ich mit dem Informaion Server
  97. {
  98. cs.lock();
  99. if( verbunden )
  100. {
  101. cs.unlock();
  102. return 1;
  103. }
  104. if( !klient )
  105. {
  106. char *msIp = getMainServerIp();
  107. unsigned short msPort = getMainServerPort();
  108. Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
  109. klient = new Klient();
  110. int keyLen = 0;
  111. char *key = 0;
  112. Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
  113. klient->setSendeKey( key, keyLen );
  114. delete[] key;
  115. Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
  116. klient->setEmpfangKey( key, keyLen );
  117. delete[] key;
  118. if( !klient->verbinde( msPort, msIp ) )
  119. {
  120. Framework::logLine( "ERROR: Server nicht erreichbar." );
  121. fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." );
  122. klient = klient->release();
  123. delete[]msIp;
  124. cs.unlock();
  125. return 0;
  126. }
  127. delete[]msIp;
  128. klient->sende( "\0", 1 ); // Verschlüsselung aktivieren
  129. klient->sendeEncrypted( "\1", 1 );
  130. klient->sendeEncrypted( (char*)&klientId, 4 );
  131. char serverReturn = 0;
  132. klient->getNachrichtEncrypted( &serverReturn, 1 );
  133. if( serverReturn == 3 )
  134. {
  135. char län = 0;
  136. klient->getNachrichtEncrypted( &län, 1 );
  137. char *nachricht = new char[ län + 1 ];
  138. nachricht[ län ] = 0;
  139. klient->getNachrichtEncrypted( nachricht, län );
  140. fehler->setText( nachricht );
  141. Framework::logLine( Text( "ERROR: " ) += nachricht );
  142. delete[]nachricht;
  143. klient->sendeEncrypted( "\3", 1 );
  144. klient->getNachrichtEncrypted( &serverReturn, 1 );
  145. klient->trenne();
  146. klient = klient->release();
  147. cs.unlock();
  148. return 0;
  149. }
  150. char *sl = 0;
  151. char slLän = getSchlüssel( &sl );
  152. klient->setSendeKey( sl, slLän );
  153. klient->setEmpfangKey( sl, slLän );
  154. delete[] sl;
  155. klient->sendeEncrypted( "\6\4", 2 );
  156. char byte = 0;
  157. klient->getNachrichtEncrypted( &byte, 1 );
  158. if( byte == 2 )
  159. {
  160. unsigned char lsIp[ 4 ];
  161. klient->getNachrichtEncrypted( (char *)lsIp, 4 );
  162. unsigned short lsPort = 0;
  163. klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
  164. klient->sendeEncrypted( "\3", 1 );
  165. klient->getNachrichtEncrypted( &serverReturn, 1 );
  166. klient->trenne();
  167. Text *lsIpT = new Text( "" );
  168. lsIpT->append( (int)lsIp[ 0 ] );
  169. lsIpT->append( "." );
  170. lsIpT->append( (int)lsIp[ 1 ] );
  171. lsIpT->append( "." );
  172. lsIpT->append( (int)lsIp[ 2 ] );
  173. lsIpT->append( "." );
  174. lsIpT->append( (int)lsIp[ 3 ] );
  175. Framework::logLine( ( ( Text( "Zugeteilter Information Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
  176. int keyLen = 0;
  177. char *key = 0;
  178. Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN );
  179. klient->setSendeKey( key, keyLen );
  180. delete[] key;
  181. Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN );
  182. klient->setEmpfangKey( key, keyLen );
  183. delete[] key;
  184. klient->verbinde( lsPort, lsIpT->getText() );
  185. lsIpT = lsIpT->release();
  186. klient->sendeEncrypted( "\3", 1 );
  187. klient->getNachrichtEncrypted( &serverReturn, 1 );
  188. klient->trenne();
  189. }
  190. if( byte == 3 )
  191. {
  192. klient->getNachrichtEncrypted( &byte, 1 );
  193. char *f = new char[ byte + 1 ];
  194. f[ byte ] = 0;
  195. klient->getNachrichtEncrypted( f, byte );
  196. fehler->setText( f );
  197. Framework::logLine( Text( "ERROR: " ) += f );
  198. delete[]f;
  199. klient->sendeEncrypted( "\3", 1 );
  200. klient->getNachrichtEncrypted( &serverReturn, 1 );
  201. klient->trenne();
  202. klient = klient->release();
  203. cs.unlock();
  204. return 0;
  205. }
  206. }
  207. Framework::logLine( "Verbinung mit Information Server wird hergestellt..." );
  208. int keyLen = 0;
  209. char *key = 0;
  210. Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN );
  211. klient->setSendeKey( key, keyLen );
  212. delete[] key;
  213. Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN );
  214. klient->setEmpfangKey( key, keyLen );
  215. delete[] key;
  216. if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
  217. {
  218. if( klient->sendeEncrypted( "\1", 1 ) )
  219. {
  220. klient->sendeEncrypted( (char*)&klientId, 4 );
  221. char serverReturn = 0;
  222. klient->getNachrichtEncrypted( &serverReturn, 1 );
  223. if( serverReturn == 3 )
  224. {
  225. char byte = 0;
  226. klient->getNachrichtEncrypted( &byte, 1 );
  227. char *f = new char[ byte + 1 ];
  228. f[ byte ] = 0;
  229. klient->getNachrichtEncrypted( f, byte );
  230. fehler->setText( f );
  231. Framework::logLine( Text( "ERROR: " ) += f );
  232. delete[]f;
  233. klient->sendeEncrypted( "\3", 1 );
  234. klient->getNachrichtEncrypted( &serverReturn, 1 );
  235. klient->trenne();
  236. cs.unlock();
  237. return 0;
  238. }
  239. char *sl = 0;
  240. char slLän = getSchlüssel( &sl );
  241. klient->setSendeKey( sl, slLän );
  242. klient->setEmpfangKey( sl, slLän );
  243. delete[] sl;
  244. verbunden = 1;
  245. cs.unlock();
  246. Framework::logLine( "Erfolgreich mit Information Server verbunden." );
  247. return 1;
  248. }
  249. else
  250. {
  251. Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
  252. fehler->setText( "Der dir zugewiesene Informations Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
  253. klient = klient->release();
  254. }
  255. }
  256. else
  257. {
  258. Framework::logLine( "ERROR: Server nicht erreichbar." );
  259. fehler->setText( "Der dir zugewiesene Informations Server antwortet nicht. Bitte versuche es Später erneut." );
  260. klient = klient->release();
  261. }
  262. cs.unlock();
  263. return 0;
  264. }
  265. bool InformationKlient::getInformationText( Text *txt, int *typ ) // fragt nach Informationstext
  266. {
  267. cs.lock();
  268. if( !verbunden )
  269. verbinde();
  270. if( !verbunden )
  271. {
  272. cs.unlock();
  273. return 0;
  274. }
  275. bool ret = 1;
  276. ret = ret & klient->sendeEncrypted( "\5", 1 );
  277. char serverReturn = 0;
  278. klient->getNachrichtEncrypted( &serverReturn, 1 );
  279. if( serverReturn == 3 )
  280. {
  281. char byte = 0;
  282. klient->getNachrichtEncrypted( &byte, 1 );
  283. char *f = new char[ byte + 1 ];
  284. f[ byte ] = 0;
  285. klient->getNachrichtEncrypted( f, byte );
  286. fehler->setText( f );
  287. delete[]f;
  288. cs.unlock();
  289. return 0;
  290. }
  291. short län = 0;
  292. ret = ret & klient->getNachrichtEncrypted( (char*)&län, 2 );
  293. char *text = new char[ län + 1 ];
  294. text[ län ] = 0;
  295. if( län )
  296. ret = ret & klient->getNachrichtEncrypted( text, län );
  297. txt->setText( text );
  298. delete[]text;
  299. char type = 0;
  300. ret = ret & klient->getNachrichtEncrypted( &type, 1 );
  301. *typ = type;
  302. if( !ret )
  303. fehler->setText( "Verbindungsfehler" );
  304. cs.unlock();
  305. return ret;
  306. }
  307. bool InformationKlient::istSpielErlaubt( int spielId ) // fragt, ob das entsprechende Spiel vom Server gesperrt wurde
  308. {
  309. cs.lock();
  310. if( !verbunden )
  311. verbinde();
  312. if( !verbunden )
  313. {
  314. cs.unlock();
  315. return 0;
  316. }
  317. klient->sendeEncrypted( "\6", 1 );
  318. char serverReturn = 0;
  319. klient->getNachrichtEncrypted( &serverReturn, 1 );
  320. if( serverReturn == 3 )
  321. {
  322. char byte = 0;
  323. klient->getNachrichtEncrypted( &byte, 1 );
  324. char *f = new char[ byte + 1 ];
  325. f[ byte ] = 0;
  326. klient->getNachrichtEncrypted( f, byte );
  327. fehler->setText( f );
  328. delete[]f;
  329. cs.unlock();
  330. return 0;
  331. }
  332. klient->sendeEncrypted( (char*)&spielId, 4 );
  333. char ret = 0;
  334. klient->getNachrichtEncrypted( &ret, 1 );
  335. cs.unlock();
  336. return ret != 0;
  337. }
  338. bool InformationKlient::istKarteErlaubt( int karteId ) // fragt, ob die entsprechende Karte vom Server gesperrt wurde
  339. {
  340. cs.lock();
  341. if( !verbunden )
  342. verbinde();
  343. if( !verbunden )
  344. {
  345. cs.unlock();
  346. return 0;
  347. }
  348. klient->sendeEncrypted( "\7", 1 );
  349. char serverReturn = 0;
  350. klient->getNachrichtEncrypted( &serverReturn, 1 );
  351. if( serverReturn == 3 )
  352. {
  353. char byte = 0;
  354. klient->getNachrichtEncrypted( &byte, 1 );
  355. char *f = new char[ byte + 1 ];
  356. f[ byte ] = 0;
  357. klient->getNachrichtEncrypted( f, byte );
  358. fehler->setText( f );
  359. delete[]f;
  360. cs.unlock();
  361. return 0;
  362. }
  363. klient->sendeEncrypted( (char*)&karteId, 4 );
  364. char ret = 0;
  365. klient->getNachrichtEncrypted( &ret, 1 );
  366. cs.unlock();
  367. return ret != 0;
  368. }
  369. int InformationKlient::getKarteId( char *name ) // fragt nach der Id einer Karte
  370. {
  371. cs.lock();
  372. if( !verbunden )
  373. verbinde();
  374. if( !verbunden )
  375. {
  376. cs.unlock();
  377. return 0;
  378. }
  379. klient->sendeEncrypted( "\x9", 1 );
  380. char serverReturn = 0;
  381. klient->getNachrichtEncrypted( &serverReturn, 1 );
  382. if( serverReturn == 3 )
  383. {
  384. char byte = 0;
  385. klient->getNachrichtEncrypted( &byte, 1 );
  386. char *f = new char[ byte + 1 ];
  387. f[ byte ] = 0;
  388. klient->getNachrichtEncrypted( f, byte );
  389. fehler->setText( f );
  390. delete[]f;
  391. cs.unlock();
  392. return 0;
  393. }
  394. char län = textLength( name );
  395. klient->sendeEncrypted( &län, 1 );
  396. klient->sendeEncrypted( name, län );
  397. int id = 0;
  398. klient->getNachrichtEncrypted( (char*)&id, 4 );
  399. cs.unlock();
  400. return id;
  401. }
  402. int InformationKlient::getSpielId( char *name ) // fragt nach der id eines Spiels
  403. {
  404. cs.lock();
  405. if( !verbunden )
  406. verbinde();
  407. if( !verbunden )
  408. {
  409. cs.unlock();
  410. return 0;
  411. }
  412. klient->sendeEncrypted( "\x8", 1 );
  413. char serverReturn = 0;
  414. klient->getNachrichtEncrypted( &serverReturn, 1 );
  415. if( serverReturn == 3 )
  416. {
  417. char byte = 0;
  418. klient->getNachrichtEncrypted( &byte, 1 );
  419. char *f = new char[ byte + 1 ];
  420. f[ byte ] = 0;
  421. klient->getNachrichtEncrypted( f, byte );
  422. fehler->setText( f );
  423. delete[]f;
  424. cs.unlock();
  425. return 0;
  426. }
  427. char län = textLength( name );
  428. klient->sendeEncrypted( &län, 1 );
  429. klient->sendeEncrypted( name, län );
  430. int id = 0;
  431. klient->getNachrichtEncrypted( (char*)&id, 4 );
  432. cs.unlock();
  433. return id;
  434. }
  435. Text *InformationKlient::getSpielerName( int accountId ) // fragt nach dem Namen eines Accounts
  436. {
  437. cs.lock();
  438. if( !verbunden )
  439. verbinde();
  440. if( !verbunden )
  441. {
  442. cs.unlock();
  443. return 0;
  444. }
  445. klient->sendeEncrypted( "\xA", 1 );
  446. char serverReturn = 0;
  447. klient->getNachrichtEncrypted( &serverReturn, 1 );
  448. if( serverReturn == 3 )
  449. {
  450. char byte = 0;
  451. klient->getNachrichtEncrypted( &byte, 1 );
  452. char *f = new char[ byte + 1 ];
  453. f[ byte ] = 0;
  454. klient->getNachrichtEncrypted( f, byte );
  455. fehler->setText( f );
  456. delete[]f;
  457. cs.unlock();
  458. return 0;
  459. }
  460. klient->sendeEncrypted( (char*)&accountId, 4 );
  461. char län = 0;
  462. klient->getNachrichtEncrypted( &län, 1 );
  463. char *name = new char[ län + 1 ];
  464. name[ län ] = 0;
  465. if( län )
  466. klient->getNachrichtEncrypted( name, län );
  467. Text *ret = new Text( name );
  468. delete[]name;
  469. cs.unlock();
  470. return ret;
  471. }
  472. bool InformationKlient::getSpielStatistik( int accountId, int spielId, Array< int > *werte ) // fragt nach der Spiel Statistik eines Accounts
  473. {
  474. cs.lock();
  475. if( !verbunden )
  476. verbinde();
  477. if( !verbunden )
  478. {
  479. cs.unlock();
  480. return 0;
  481. }
  482. bool ret = 1;
  483. ret = ret & klient->sendeEncrypted( "\xB", 1 );
  484. char serverReturn = 0;
  485. klient->getNachrichtEncrypted( &serverReturn, 1 );
  486. if( serverReturn == 3 )
  487. {
  488. char byte = 0;
  489. klient->getNachrichtEncrypted( &byte, 1 );
  490. char *f = new char[ byte + 1 ];
  491. f[ byte ] = 0;
  492. klient->getNachrichtEncrypted( f, byte );
  493. fehler->setText( f );
  494. delete[]f;
  495. cs.unlock();
  496. return 0;
  497. }
  498. ret = ret & klient->sendeEncrypted( (char*)&accountId, 4 );
  499. ret = ret & klient->sendeEncrypted( (char*)&spielId, 4 );
  500. for( int i = 0; i < 10; i++ )
  501. {
  502. int tmp = 0;
  503. ret = ret & klient->getNachrichtEncrypted( (char*)&tmp, 4 );
  504. werte->add( tmp, i );
  505. }
  506. if( !ret )
  507. fehler->setText( "Verbindungsfehler" );
  508. cs.unlock();
  509. return ret;
  510. }
  511. Text *InformationKlient::getKarteName( int karteId ) // fragt nach dem Namen einer Karte
  512. {
  513. cs.lock();
  514. if( !verbunden )
  515. verbinde();
  516. if( !verbunden )
  517. {
  518. cs.unlock();
  519. return 0;
  520. }
  521. klient->sendeEncrypted( "\xE", 1 );
  522. char serverReturn = 0;
  523. klient->getNachrichtEncrypted( &serverReturn, 1 );
  524. if( serverReturn == 3 )
  525. {
  526. char byte = 0;
  527. klient->getNachrichtEncrypted( &byte, 1 );
  528. char *f = new char[ byte + 1 ];
  529. f[ byte ] = 0;
  530. klient->getNachrichtEncrypted( f, byte );
  531. fehler->setText( f );
  532. delete[]f;
  533. cs.unlock();
  534. return 0;
  535. }
  536. klient->sendeEncrypted( (char*)&karteId, 4 );
  537. char län = 0;
  538. klient->getNachrichtEncrypted( &län, 1 );
  539. char *name = new char[ län + 1 ];
  540. name[ län ] = 0;
  541. if( län )
  542. klient->getNachrichtEncrypted( name, län );
  543. Text *ret = new Text( name );
  544. delete[]name;
  545. cs.unlock();
  546. return ret;
  547. }
  548. Text *InformationKlient::getSpielName( int spielId ) // fragt nach dem Namen einer Spielart
  549. {
  550. cs.lock();
  551. if( !verbunden )
  552. verbinde();
  553. if( !verbunden )
  554. {
  555. cs.unlock();
  556. return 0;
  557. }
  558. klient->sendeEncrypted( "\xF", 1 );
  559. char serverReturn = 0;
  560. klient->getNachrichtEncrypted( &serverReturn, 1 );
  561. if( serverReturn == 3 )
  562. {
  563. char byte = 0;
  564. klient->getNachrichtEncrypted( &byte, 1 );
  565. char *f = new char[ byte + 1 ];
  566. f[ byte ] = 0;
  567. klient->getNachrichtEncrypted( f, byte );
  568. fehler->setText( f );
  569. delete[]f;
  570. cs.unlock();
  571. return 0;
  572. }
  573. klient->sendeEncrypted( (char*)&spielId, 4 );
  574. char län = 0;
  575. klient->getNachrichtEncrypted( &län, 1 );
  576. char *name = new char[ län + 1 ];
  577. name[ län ] = 0;
  578. if( län )
  579. klient->getNachrichtEncrypted( name, län );
  580. Text *ret = new Text( name );
  581. delete[]name;
  582. cs.unlock();
  583. return ret;
  584. }
  585. Text *InformationKlient::getChatroomName( int chatroomId ) // fragt nach dem Namen eines Chatrooms
  586. {
  587. cs.lock();
  588. if( !verbunden )
  589. verbinde();
  590. if( !verbunden )
  591. {
  592. cs.unlock();
  593. return 0;
  594. }
  595. klient->sendeEncrypted( "\x10", 1 );
  596. char serverReturn = 0;
  597. klient->getNachrichtEncrypted( &serverReturn, 1 );
  598. if( serverReturn == 3 )
  599. {
  600. char byte = 0;
  601. klient->getNachrichtEncrypted( &byte, 1 );
  602. char *f = new char[ byte + 1 ];
  603. f[ byte ] = 0;
  604. klient->getNachrichtEncrypted( f, byte );
  605. fehler->setText( f );
  606. delete[]f;
  607. cs.unlock();
  608. return 0;
  609. }
  610. klient->sendeEncrypted( (char*)&chatroomId, 4 );
  611. char län = 0;
  612. klient->getNachrichtEncrypted( &län, 1 );
  613. char *name = new char[ län + 1 ];
  614. name[ län ] = 0;
  615. if( län )
  616. klient->getNachrichtEncrypted( name, län );
  617. Text *ret = new Text( name );
  618. delete[]name;
  619. cs.unlock();
  620. return ret;
  621. }
  622. int InformationKlient::getSpielId( int karteId ) // fragt zu welcher Spielart die Karte gehört
  623. {
  624. cs.lock();
  625. if( !verbunden )
  626. verbinde();
  627. if( !verbunden )
  628. {
  629. cs.unlock();
  630. return 0;
  631. }
  632. klient->sendeEncrypted( "\x11", 1 );
  633. char serverReturn = 0;
  634. klient->getNachrichtEncrypted( &serverReturn, 1 );
  635. if( serverReturn == 3 )
  636. {
  637. char byte = 0;
  638. klient->getNachrichtEncrypted( &byte, 1 );
  639. char *f = new char[ byte + 1 ];
  640. f[ byte ] = 0;
  641. klient->getNachrichtEncrypted( f, byte );
  642. fehler->setText( f );
  643. delete[]f;
  644. cs.unlock();
  645. return 0;
  646. }
  647. klient->sendeEncrypted( (char*)&karteId, 4 );
  648. int ret = 0;
  649. klient->getNachrichtEncrypted( (char*)&ret, 4 );
  650. cs.unlock();
  651. return ret;
  652. }
  653. int InformationKlient::getAccountId( char *name ) // gibt die Id des Accounts zurück
  654. {
  655. cs.lock();
  656. if( !verbunden )
  657. verbinde();
  658. if( !verbunden )
  659. {
  660. cs.unlock();
  661. return 0;
  662. }
  663. char län = textLength( name );
  664. if( !län )
  665. {
  666. cs.unlock();
  667. return 0;
  668. }
  669. klient->sendeEncrypted( "\x12", 1 );
  670. char serverReturn = 0;
  671. klient->getNachrichtEncrypted( &serverReturn, 1 );
  672. if( serverReturn == 3 )
  673. {
  674. char byte = 0;
  675. klient->getNachrichtEncrypted( &byte, 1 );
  676. char *f = new char[ byte + 1 ];
  677. f[ byte ] = 0;
  678. klient->getNachrichtEncrypted( f, byte );
  679. fehler->setText( f );
  680. delete[]f;
  681. cs.unlock();
  682. return 0;
  683. }
  684. klient->sendeEncrypted( &län, 1 );
  685. klient->sendeEncrypted( name, län );
  686. int ret = 0;
  687. klient->getNachrichtEncrypted( (char*)&ret, 4 );
  688. cs.unlock();
  689. return ret;
  690. }
  691. int InformationKlient::getChatroomId( char *name ) // gibt die Id des Chatrooms zurück
  692. {
  693. cs.lock();
  694. if( !verbunden )
  695. verbinde();
  696. if( !verbunden )
  697. {
  698. cs.unlock();
  699. return 0;
  700. }
  701. char län = textLength( name );
  702. if( !län )
  703. {
  704. cs.unlock();
  705. return 0;
  706. }
  707. klient->sendeEncrypted( "\x13", 1 );
  708. char serverReturn = 0;
  709. klient->getNachrichtEncrypted( &serverReturn, 1 );
  710. if( serverReturn == 3 )
  711. {
  712. char byte = 0;
  713. klient->getNachrichtEncrypted( &byte, 1 );
  714. char *f = new char[ byte + 1 ];
  715. f[ byte ] = 0;
  716. klient->getNachrichtEncrypted( f, byte );
  717. fehler->setText( f );
  718. delete[]f;
  719. cs.unlock();
  720. return 0;
  721. }
  722. klient->sendeEncrypted( &län, 1 );
  723. klient->sendeEncrypted( name, län );
  724. int ret = 0;
  725. klient->getNachrichtEncrypted( (char*)&ret, 4 );
  726. cs.unlock();
  727. return ret;
  728. }
  729. int InformationKlient::getGruppenKarteId( int gruppenId ) // gibt die karten Id der gruppe zurück
  730. {
  731. cs.lock();
  732. if( !verbunden )
  733. verbinde();
  734. if( !verbunden )
  735. {
  736. cs.unlock();
  737. return 0;
  738. }
  739. klient->sendeEncrypted( "\xD", 1 );
  740. char serverReturn = 0;
  741. klient->getNachrichtEncrypted( &serverReturn, 1 );
  742. if( serverReturn == 3 )
  743. {
  744. char byte = 0;
  745. klient->getNachrichtEncrypted( &byte, 1 );
  746. char *f = new char[ byte + 1 ];
  747. f[ byte ] = 0;
  748. klient->getNachrichtEncrypted( f, byte );
  749. fehler->setText( f );
  750. delete[]f;
  751. cs.unlock();
  752. return 0;
  753. }
  754. klient->sendeEncrypted( (char*)&gruppenId, 4 );
  755. int id = 0;
  756. klient->getNachrichtEncrypted( (char*)&id, 4 );
  757. cs.unlock();
  758. return id;
  759. }
  760. bool InformationKlient::getGruppeSpielerHinzufügen( int gruppeId ) // gibt die Spieler hinzufügen Funktion der Gruppe zurück
  761. {
  762. cs.lock();
  763. if( !verbunden )
  764. verbinde();
  765. if( !verbunden )
  766. {
  767. cs.unlock();
  768. return 0;
  769. }
  770. klient->sendeEncrypted( "\x1E", 1 );
  771. char serverReturn = 0;
  772. klient->getNachrichtEncrypted( &serverReturn, 1 );
  773. if( serverReturn == 3 )
  774. {
  775. char byte = 0;
  776. klient->getNachrichtEncrypted( &byte, 1 );
  777. char *f = new char[ byte + 1 ];
  778. f[ byte ] = 0;
  779. klient->getNachrichtEncrypted( f, byte );
  780. fehler->setText( f );
  781. delete[]f;
  782. cs.unlock();
  783. return 0;
  784. }
  785. klient->sendeEncrypted( (char*)&gruppeId, 4 );
  786. char sh = 0;
  787. klient->getNachrichtEncrypted( (char*)&sh, 1 );
  788. cs.unlock();
  789. return sh == 1;
  790. }
  791. int InformationKlient::getGruppeAdminId( int gruppeId ) // gibt den Gruppen Administrator zurück
  792. {
  793. cs.lock();
  794. if( !verbunden )
  795. verbinde();
  796. if( !verbunden )
  797. {
  798. cs.unlock();
  799. return 0;
  800. }
  801. klient->sendeEncrypted( "\x15", 1 );
  802. char serverReturn = 0;
  803. klient->getNachrichtEncrypted( &serverReturn, 1 );
  804. if( serverReturn == 3 )
  805. {
  806. char byte = 0;
  807. klient->getNachrichtEncrypted( &byte, 1 );
  808. char *f = new char[ byte + 1 ];
  809. f[ byte ] = 0;
  810. klient->getNachrichtEncrypted( f, byte );
  811. fehler->setText( f );
  812. delete[]f;
  813. cs.unlock();
  814. return 0;
  815. }
  816. klient->sendeEncrypted( (char*)&gruppeId, 4 );
  817. int id = 0;
  818. klient->getNachrichtEncrypted( (char*)&id, 4 );
  819. cs.unlock();
  820. return id;
  821. }
  822. int InformationKlient::getSpielerPunkte( int accountId, int spielId ) // gibt die Punkte eines Spielers zurück
  823. {
  824. cs.lock();
  825. if( !verbunden )
  826. verbinde();
  827. if( !verbunden )
  828. {
  829. cs.unlock();
  830. return 0;
  831. }
  832. klient->sendeEncrypted( "\x14", 1 );
  833. char serverReturn = 0;
  834. klient->getNachrichtEncrypted( &serverReturn, 1 );
  835. if( serverReturn == 3 )
  836. {
  837. char byte = 0;
  838. klient->getNachrichtEncrypted( &byte, 1 );
  839. char *f = new char[ byte + 1 ];
  840. f[ byte ] = 0;
  841. klient->getNachrichtEncrypted( f, byte );
  842. fehler->setText( f );
  843. delete[]f;
  844. cs.unlock();
  845. return 0;
  846. }
  847. klient->sendeEncrypted( (char*)&spielId, 4 );
  848. klient->sendeEncrypted( (char*)&accountId, 4 );
  849. int punkte = 0;
  850. klient->getNachrichtEncrypted( (char*)&punkte, 4 );
  851. cs.unlock();
  852. return punkte;
  853. }
  854. Array< int > *InformationKlient::getAccountSpielArtListe() // gibt eine Liste mit gekauften Spielen zurück
  855. {
  856. char ret = 0;
  857. cs.lock();
  858. if( !verbunden )
  859. verbinde();
  860. if( !verbunden )
  861. {
  862. cs.unlock();
  863. return 0;
  864. }
  865. klient->sendeEncrypted( "\x16", 1 );
  866. klient->getNachrichtEncrypted( &ret, 1 );
  867. if( ret == 1 )
  868. {
  869. int anz = 0;
  870. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  871. Array< int > *list = new Array< int >();
  872. for( int i = 0; i < anz; i++ )
  873. {
  874. int id = 0;
  875. klient->getNachrichtEncrypted( (char*)&id, 4 );
  876. list->add( id );
  877. }
  878. cs.unlock();
  879. return list;
  880. }
  881. if( ref == 3 )
  882. {
  883. klient->getNachrichtEncrypted( &ret, 1 );
  884. char *err = new char[ ret + 1 ];
  885. err[ ret ] = 0;
  886. if( ret )
  887. klient->getNachrichtEncrypted( err, ret );
  888. fehler->setText( err );
  889. delete[] err;
  890. }
  891. cs.unlock();
  892. return 0;
  893. }
  894. int InformationKlient::getSpielVersion( int spielId ) // gibt die neuste Version eines Spiels zurück
  895. {
  896. cs.lock();
  897. if( !verbunden )
  898. verbinde();
  899. if( !verbunden )
  900. {
  901. cs.unlock();
  902. return 0;
  903. }
  904. klient->sendeEncrypted( "\x17", 1 );
  905. char serverReturn = 0;
  906. klient->getNachrichtEncrypted( &serverReturn, 1 );
  907. if( serverReturn == 3 )
  908. {
  909. char byte = 0;
  910. klient->getNachrichtEncrypted( &byte, 1 );
  911. char *f = new char[ byte + 1 ];
  912. f[ byte ] = 0;
  913. klient->getNachrichtEncrypted( f, byte );
  914. fehler->setText( f );
  915. delete[] f;
  916. cs.unlock();
  917. return 0;
  918. }
  919. klient->sendeEncrypted( (char*)&spielId, 4 );
  920. int version = 0;
  921. klient->getNachrichtEncrypted( (char*)&version, 4 );
  922. cs.unlock();
  923. return version;
  924. }
  925. int InformationKlient::getKupfer() // gibt das Kupfer des Accounts zurück
  926. {
  927. cs.lock();
  928. if( !verbunden )
  929. verbinde();
  930. if( !verbunden )
  931. {
  932. cs.unlock();
  933. return 0;
  934. }
  935. klient->sendeEncrypted( "\x18", 1 );
  936. char serverReturn = 0;
  937. klient->getNachrichtEncrypted( &serverReturn, 1 );
  938. if( serverReturn == 3 )
  939. {
  940. char byte = 0;
  941. klient->getNachrichtEncrypted( &byte, 1 );
  942. char *f = new char[ byte + 1 ];
  943. f[ byte ] = 0;
  944. klient->getNachrichtEncrypted( f, byte );
  945. fehler->setText( f );
  946. delete[] f;
  947. cs.unlock();
  948. return 0;
  949. }
  950. int kupfer = 0;
  951. klient->getNachrichtEncrypted( (char*)&kupfer, 4 );
  952. cs.unlock();
  953. return kupfer;
  954. }
  955. int InformationKlient::getDateiGruppeIdVonSpiel( int spielId ) // Gibt die Dateigruppe eines Spieles zurück
  956. {
  957. cs.lock();
  958. if( !verbunden )
  959. verbinde();
  960. if( !verbunden )
  961. {
  962. cs.unlock();
  963. return 0;
  964. }
  965. klient->sendeEncrypted( "\x19", 1 );
  966. char serverReturn = 0;
  967. klient->getNachrichtEncrypted( &serverReturn, 1 );
  968. if( serverReturn == 3 )
  969. {
  970. char byte = 0;
  971. klient->getNachrichtEncrypted( &byte, 1 );
  972. char *f = new char[ byte + 1 ];
  973. f[ byte ] = 0;
  974. klient->getNachrichtEncrypted( f, byte );
  975. fehler->setText( f );
  976. delete[] f;
  977. cs.unlock();
  978. return 0;
  979. }
  980. klient->sendeEncrypted( (char*)&spielId, 4 );
  981. int dgId = 0;
  982. klient->getNachrichtEncrypted( (char*)&dgId, 4 );
  983. cs.unlock();
  984. return dgId;
  985. }
  986. Text *InformationKlient::getDateiGruppePfad( int dgId ) // Gibt den Dateigruppen Pfad zurück
  987. {
  988. cs.lock();
  989. if( !verbunden )
  990. verbinde();
  991. if( !verbunden )
  992. {
  993. cs.unlock();
  994. return 0;
  995. }
  996. klient->sendeEncrypted( "\x1A", 1 );
  997. char serverReturn = 0;
  998. klient->getNachrichtEncrypted( &serverReturn, 1 );
  999. if( serverReturn == 1 )
  1000. {
  1001. klient->sendeEncrypted( (char*)&dgId, 4 );
  1002. klient->getNachrichtEncrypted( &serverReturn, 1 );
  1003. if( serverReturn == 1 )
  1004. {
  1005. char län = 0;
  1006. klient->getNachrichtEncrypted( &län, 1 );
  1007. char *pf = new char[ län + 1 ];
  1008. pf[ län ] = 0;
  1009. if( län )
  1010. klient->getNachrichtEncrypted( pf, län );
  1011. Text *pfad = new Text( pf );
  1012. delete[] pf;
  1013. cs.unlock();
  1014. return pfad;
  1015. }
  1016. }
  1017. if( serverReturn == 3 )
  1018. {
  1019. char byte = 0;
  1020. klient->getNachrichtEncrypted( &byte, 1 );
  1021. char *f = new char[ byte + 1 ];
  1022. f[ byte ] = 0;
  1023. klient->getNachrichtEncrypted( f, byte );
  1024. fehler->setText( f );
  1025. delete[] f;
  1026. cs.unlock();
  1027. return 0;
  1028. }
  1029. cs.unlock();
  1030. return 0;
  1031. }
  1032. Array< int > *InformationKlient::getAccountKarteListe( int spielId ) // gibt eine Liste mit gekauften Karten zurück
  1033. {
  1034. char ret = 0;
  1035. cs.lock();
  1036. if( !verbunden )
  1037. verbinde();
  1038. if( !verbunden )
  1039. {
  1040. cs.unlock();
  1041. return 0;
  1042. }
  1043. klient->sendeEncrypted( "\x1B", 1 );
  1044. klient->getNachrichtEncrypted( &ret, 1 );
  1045. if( ret == 1 )
  1046. {
  1047. klient->sendeEncrypted( (char*)&spielId, 4 );
  1048. int anz = 0;
  1049. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  1050. Array< int > *list = new Array< int >();
  1051. for( int i = 0; i < anz; i++ )
  1052. {
  1053. int id = 0;
  1054. klient->getNachrichtEncrypted( (char*)&id, 4 );
  1055. list->add( id );
  1056. }
  1057. cs.unlock();
  1058. return list;
  1059. }
  1060. if( ref == 3 )
  1061. {
  1062. klient->getNachrichtEncrypted( &ret, 1 );
  1063. char *err = new char[ ret + 1 ];
  1064. err[ ret ] = 0;
  1065. if( ret )
  1066. klient->getNachrichtEncrypted( err, ret );
  1067. fehler->setText( err );
  1068. delete[] err;
  1069. }
  1070. cs.unlock();
  1071. return 0;
  1072. }
  1073. int InformationKlient::getDateiGruppeIdVonPfad( char *pfad ) // Gibt die Dateigruppe eines Pfades zurück
  1074. {
  1075. char län = textLength( pfad );
  1076. if( !län )
  1077. return 0;
  1078. cs.lock();
  1079. if( !verbunden )
  1080. verbinde();
  1081. if( !verbunden )
  1082. {
  1083. cs.unlock();
  1084. return 0;
  1085. }
  1086. klient->sendeEncrypted( "\x2A", 1 );
  1087. char serverReturn = 0;
  1088. klient->getNachrichtEncrypted( &serverReturn, 1 );
  1089. if( serverReturn == 3 )
  1090. {
  1091. char byte = 0;
  1092. klient->getNachrichtEncrypted( &byte, 1 );
  1093. char *f = new char[ byte + 1 ];
  1094. f[ byte ] = 0;
  1095. klient->getNachrichtEncrypted( f, byte );
  1096. fehler->setText( f );
  1097. delete[] f;
  1098. cs.unlock();
  1099. return 0;
  1100. }
  1101. klient->sendeEncrypted( (char*)&län, 1 );
  1102. klient->sendeEncrypted( (char*)pfad, län );
  1103. int dgId = 0;
  1104. klient->getNachrichtEncrypted( (char*)&dgId, 4 );
  1105. cs.unlock();
  1106. return dgId;
  1107. }
  1108. int InformationKlient::getDateiGruppeVersion( int dg ) // gibt die neuste Version einer Dateigruppe zurück
  1109. {
  1110. cs.lock();
  1111. if( !verbunden )
  1112. verbinde();
  1113. if( !verbunden )
  1114. {
  1115. cs.unlock();
  1116. return 0;
  1117. }
  1118. klient->sendeEncrypted( "\x2B", 1 );
  1119. char serverReturn = 0;
  1120. klient->getNachrichtEncrypted( &serverReturn, 1 );
  1121. if( serverReturn == 3 )
  1122. {
  1123. char byte = 0;
  1124. klient->getNachrichtEncrypted( &byte, 1 );
  1125. char *f = new char[ byte + 1 ];
  1126. f[ byte ] = 0;
  1127. klient->getNachrichtEncrypted( f, byte );
  1128. fehler->setText( f );
  1129. delete[] f;
  1130. cs.unlock();
  1131. return 0;
  1132. }
  1133. klient->sendeEncrypted( (char*)&dg, 4 );
  1134. int version = 0;
  1135. klient->getNachrichtEncrypted( (char*)&version, 4 );
  1136. cs.unlock();
  1137. return version;
  1138. }
  1139. int InformationKlient::getSpielerListe( char *suche, int *seite, int *maxSeite, char sortSpalte, char rückwärts,
  1140. Array< int > *accounts, RCArray< Text > *name, RCArray< Text > *zuletztOnline,
  1141. RCArray< Text > *letztesSpiel, RCArray< Text > *letzteKarte, RCArray< Text > *punkte ) // sucht nach Spielern
  1142. {
  1143. char län = textLength( suche );
  1144. if( !län )
  1145. return -1;
  1146. cs.lock();
  1147. if( !verbunden )
  1148. verbinde();
  1149. if( !verbunden )
  1150. {
  1151. cs.unlock();
  1152. return -1;
  1153. }
  1154. char serverReturn = 0;
  1155. klient->sendeEncrypted( "\xC", 1 );
  1156. klient->getNachrichtEncrypted( &serverReturn, 1 );
  1157. if( serverReturn == 1 )
  1158. {
  1159. klient->sendeEncrypted( &län, 1 );
  1160. klient->sendeEncrypted( suche, län );
  1161. klient->sendeEncrypted( (char*)seite, 4 );
  1162. klient->sendeEncrypted( &sortSpalte, 1 );
  1163. klient->sendeEncrypted( &rückwärts, 1 );
  1164. klient->getNachrichtEncrypted( (char*)seite, 4 );
  1165. klient->getNachrichtEncrypted( (char*)maxSeite, 4 );
  1166. int ret = 0;
  1167. klient->getNachrichtEncrypted( (char*)&ret, 4 );
  1168. for( int i = 0; i < ret; i++ )
  1169. {
  1170. int accId = 0;
  1171. klient->getNachrichtEncrypted( (char*)&accId, 4 );
  1172. accounts->set( accId, i );
  1173. klient->getNachrichtEncrypted( &län, 1 );
  1174. char *txt = new char[ län + 1 ];
  1175. txt[ län ] = 0;
  1176. klient->getNachrichtEncrypted( txt, län );
  1177. name->set( new Text( txt ), i );
  1178. delete[] txt;
  1179. klient->getNachrichtEncrypted( &län, 1 );
  1180. txt = new char[ län + 1 ];
  1181. txt[ län ] = 0;
  1182. klient->getNachrichtEncrypted( txt, län );
  1183. zuletztOnline->set( new Text( txt ), i );
  1184. delete[] txt;
  1185. klient->getNachrichtEncrypted( &län, 1 );
  1186. txt = new char[ län + 1 ];
  1187. txt[ län ] = 0;
  1188. klient->getNachrichtEncrypted( txt, län );
  1189. letztesSpiel->set( new Text( txt ), i );
  1190. delete[] txt;
  1191. klient->getNachrichtEncrypted( &län, 1 );
  1192. txt = new char[ län + 1 ];
  1193. txt[ län ] = 0;
  1194. klient->getNachrichtEncrypted( txt, län );
  1195. letzteKarte->set( new Text( txt ), i );
  1196. delete[] txt;
  1197. klient->getNachrichtEncrypted( &län, 1 );
  1198. txt = new char[ län + 1 ];
  1199. txt[ län ] = 0;
  1200. klient->getNachrichtEncrypted( txt, län );
  1201. punkte->set( new Text( txt ), i );
  1202. delete[] txt;
  1203. }
  1204. cs.unlock();
  1205. return ret;
  1206. }
  1207. if( serverReturn == 3 )
  1208. {
  1209. char byte = 0;
  1210. klient->getNachrichtEncrypted( &byte, 1 );
  1211. char *f = new char[ byte + 1 ];
  1212. f[ byte ] = 0;
  1213. klient->getNachrichtEncrypted( f, byte );
  1214. fehler->setText( f );
  1215. delete[] f;
  1216. }
  1217. cs.unlock();
  1218. return -1;
  1219. }
  1220. bool InformationKlient::getSpielerAktivität( int accId, RCArray< Text > *datum, Array< double > *stOnline, Array< double > *stGespielt,
  1221. Array< int > *anzSpiele, Array< int > *anzGewonnen ) // ermittelt die aktivität eines Spielers
  1222. {
  1223. cs.lock();
  1224. if( !verbunden )
  1225. verbinde();
  1226. if( !verbunden )
  1227. {
  1228. cs.unlock();
  1229. return 0;
  1230. }
  1231. char ret = 0;
  1232. klient->sendeEncrypted( "\x1F", 1 );
  1233. klient->getNachrichtEncrypted( &ret, 1 );
  1234. if( ret == 1 )
  1235. {
  1236. klient->sendeEncrypted( (char*)&accId, 4 );
  1237. klient->getNachrichtEncrypted( &ret, 1 );
  1238. if( ret == 1 )
  1239. {
  1240. klient->getNachrichtEncrypted( &ret, 1 );
  1241. for( int i = 0; ret; i++ )
  1242. {
  1243. char *txt = new char[ ret + 1 ];
  1244. txt[ ret ] = 0;
  1245. klient->getNachrichtEncrypted( txt, ret );
  1246. datum->set( new Text( txt ), i );
  1247. delete[] txt;
  1248. double sto = 0;
  1249. klient->getNachrichtEncrypted( (char*)&sto, 8 );
  1250. stOnline->set( sto, i );
  1251. double sts = 0;
  1252. klient->getNachrichtEncrypted( (char*)&sts, 8 );
  1253. stGespielt->set( sts, i );
  1254. int anzs = 0;
  1255. klient->getNachrichtEncrypted( (char*)&anzs, 4 );
  1256. anzSpiele->set( anzs, i );
  1257. int anzg = 0;
  1258. klient->getNachrichtEncrypted( (char*)&anzg, 4 );
  1259. anzGewonnen->set( anzg, i );
  1260. klient->getNachrichtEncrypted( &ret, 1 );
  1261. }
  1262. }
  1263. }
  1264. if( ret == 3 )
  1265. {
  1266. char byte = 0;
  1267. klient->getNachrichtEncrypted( &byte, 1 );
  1268. char *f = new char[ byte + 1 ];
  1269. f[ byte ] = 0;
  1270. klient->getNachrichtEncrypted( f, byte );
  1271. fehler->setText( f );
  1272. delete[] f;
  1273. cs.unlock();
  1274. return 0;
  1275. }
  1276. cs.unlock();
  1277. return 1;
  1278. }
  1279. int InformationKlient::getAccountKarteSpiele( int account, int karte ) // Gibt zurück, wie oft ein Spieler eine Karte schon gespielt hat
  1280. {
  1281. cs.lock();
  1282. if( !verbunden )
  1283. verbinde();
  1284. if( !verbunden )
  1285. {
  1286. cs.unlock();
  1287. return 0;
  1288. }
  1289. char ret = 0;
  1290. klient->sendeEncrypted( "\x20", 1 );
  1291. klient->getNachrichtEncrypted( &ret, 1 );
  1292. if( ret == 1 )
  1293. {
  1294. klient->sendeEncrypted( (char*)&account, 4 );
  1295. klient->sendeEncrypted( (char*)&karte, 4 );
  1296. int anz = 0;
  1297. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  1298. cs.unlock();
  1299. return anz;
  1300. }
  1301. if( ret == 3 )
  1302. {
  1303. char byte = 0;
  1304. klient->getNachrichtEncrypted( &byte, 1 );
  1305. char *f = new char[ byte + 1 ];
  1306. f[ byte ] = 0;
  1307. klient->getNachrichtEncrypted( f, byte );
  1308. fehler->setText( f );
  1309. delete[] f;
  1310. cs.unlock();
  1311. return 0;
  1312. }
  1313. cs.unlock();
  1314. return 0;
  1315. }
  1316. int InformationKlient::getAccountKarteSpieleGewonnen( int account, int karte ) // Gibt zurück, wie oft ein Spieler eine Karte schon gewonnen hat
  1317. {
  1318. cs.lock();
  1319. if( !verbunden )
  1320. verbinde();
  1321. if( !verbunden )
  1322. {
  1323. cs.unlock();
  1324. return 0;
  1325. }
  1326. char ret = 0;
  1327. klient->sendeEncrypted( "\x21", 1 );
  1328. klient->getNachrichtEncrypted( &ret, 1 );
  1329. if( ret == 1 )
  1330. {
  1331. klient->sendeEncrypted( (char*)&account, 4 );
  1332. klient->sendeEncrypted( (char*)&karte, 4 );
  1333. int anz = 0;
  1334. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  1335. cs.unlock();
  1336. return anz;
  1337. }
  1338. if( ret == 3 )
  1339. {
  1340. char byte = 0;
  1341. klient->getNachrichtEncrypted( &byte, 1 );
  1342. char *f = new char[ byte + 1 ];
  1343. f[ byte ] = 0;
  1344. klient->getNachrichtEncrypted( f, byte );
  1345. fehler->setText( f );
  1346. delete[] f;
  1347. cs.unlock();
  1348. return 0;
  1349. }
  1350. cs.unlock();
  1351. return 0;
  1352. }
  1353. bool InformationKlient::hatAccountKarte( int account, int karte ) // Gibt zurück, ob ein Spieler die Karte im Besitz hat
  1354. {
  1355. cs.lock();
  1356. if( !verbunden )
  1357. verbinde();
  1358. if( !verbunden )
  1359. {
  1360. cs.unlock();
  1361. return 0;
  1362. }
  1363. char ret = 0;
  1364. klient->sendeEncrypted( "\x22", 1 );
  1365. klient->getNachrichtEncrypted( &ret, 1 );
  1366. if( ret == 1 )
  1367. {
  1368. klient->sendeEncrypted( (char*)&account, 4 );
  1369. klient->sendeEncrypted( (char*)&karte, 4 );
  1370. char status = 0;
  1371. klient->getNachrichtEncrypted( &status, 1 );
  1372. cs.unlock();
  1373. return status != 0;
  1374. }
  1375. if( ret == 3 )
  1376. {
  1377. char byte = 0;
  1378. klient->getNachrichtEncrypted( &byte, 1 );
  1379. char *f = new char[ byte + 1 ];
  1380. f[ byte ] = 0;
  1381. klient->getNachrichtEncrypted( f, byte );
  1382. fehler->setText( f );
  1383. delete[] f;
  1384. cs.unlock();
  1385. return 0;
  1386. }
  1387. cs.unlock();
  1388. return 0;
  1389. }
  1390. bool InformationKlient::hatAccountSpiel( int account, int spiel ) // Gibt zurück, ob ein Spieler ein Spiel im Besitz hat
  1391. {
  1392. cs.lock();
  1393. if( !verbunden )
  1394. verbinde();
  1395. if( !verbunden )
  1396. {
  1397. cs.unlock();
  1398. return 0;
  1399. }
  1400. char ret = 0;
  1401. klient->sendeEncrypted( "\x23", 1 );
  1402. klient->getNachrichtEncrypted( &ret, 1 );
  1403. if( ret == 1 )
  1404. {
  1405. klient->sendeEncrypted( (char*)&account, 4 );
  1406. klient->sendeEncrypted( (char*)&spiel, 4 );
  1407. char status = 0;
  1408. klient->getNachrichtEncrypted( &status, 1 );
  1409. cs.unlock();
  1410. return status != 0;
  1411. }
  1412. if( ret == 3 )
  1413. {
  1414. char byte = 0;
  1415. klient->getNachrichtEncrypted( &byte, 1 );
  1416. char *f = new char[ byte + 1 ];
  1417. f[ byte ] = 0;
  1418. klient->getNachrichtEncrypted( f, byte );
  1419. fehler->setText( f );
  1420. delete[] f;
  1421. cs.unlock();
  1422. return 0;
  1423. }
  1424. cs.unlock();
  1425. return 0;
  1426. }
  1427. Array< int > *InformationKlient::getAccountKarteGespieltListe( int account, int spielId ) // gibt eine Liste mit Karten zurück, die von einem Spieler bereits gespielt wurden
  1428. {
  1429. cs.lock();
  1430. if( !verbunden )
  1431. verbinde();
  1432. if( !verbunden )
  1433. {
  1434. cs.unlock();
  1435. return 0;
  1436. }
  1437. klient->sendeEncrypted( "\x24", 1 );
  1438. char ret = 0;
  1439. klient->getNachrichtEncrypted( &ret, 1 );
  1440. if( ret == 1 )
  1441. {
  1442. klient->sendeEncrypted( (char*)&account, 4 );
  1443. klient->sendeEncrypted( (char*)&spielId, 4 );
  1444. int anz = 0;
  1445. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  1446. Array< int > *ret = new Array< int >();
  1447. for( int i = 0; i < anz; i++ )
  1448. {
  1449. int val = 0;
  1450. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1451. ret->set( val, i );
  1452. }
  1453. cs.unlock();
  1454. return ret;
  1455. }
  1456. if( ret == 3 )
  1457. {
  1458. char byte = 0;
  1459. klient->getNachrichtEncrypted( &byte, 1 );
  1460. char *f = new char[ byte + 1 ];
  1461. f[ byte ] = 0;
  1462. klient->getNachrichtEncrypted( f, byte );
  1463. fehler->setText( f );
  1464. delete[] f;
  1465. cs.unlock();
  1466. return 0;
  1467. }
  1468. cs.unlock();
  1469. return 0;
  1470. }
  1471. Array< int > *InformationKlient::getAccountSpielGespieltListe( int account ) // gibt eine Liste mit Spielen zurück, die von einem Spieler bereits gespielt wurden
  1472. {
  1473. cs.lock();
  1474. if( !verbunden )
  1475. verbinde();
  1476. if( !verbunden )
  1477. {
  1478. cs.unlock();
  1479. return 0;
  1480. }
  1481. klient->sendeEncrypted( "\x25", 1 );
  1482. char ret = 0;
  1483. klient->getNachrichtEncrypted( &ret, 1 );
  1484. if( ret == 1 )
  1485. {
  1486. klient->sendeEncrypted( (char*)&account, 4 );
  1487. int anz = 0;
  1488. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  1489. Array< int > *ret = new Array< int >();
  1490. for( int i = 0; i < anz; i++ )
  1491. {
  1492. int val = 0;
  1493. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1494. ret->set( val, i );
  1495. }
  1496. cs.unlock();
  1497. return ret;
  1498. }
  1499. if( ret == 3 )
  1500. {
  1501. char byte = 0;
  1502. klient->getNachrichtEncrypted( &byte, 1 );
  1503. char *f = new char[ byte + 1 ];
  1504. f[ byte ] = 0;
  1505. klient->getNachrichtEncrypted( f, byte );
  1506. fehler->setText( f );
  1507. delete[] f;
  1508. cs.unlock();
  1509. return 0;
  1510. }
  1511. cs.unlock();
  1512. return 0;
  1513. }
  1514. bool InformationKlient::getSpielPartnerListe( int account, Array< int > *spieler, Array< int > *karten, Array< int > *anzahl ) // Gibt eine Liste von Spiel Partnern eines Spielers zurück
  1515. {
  1516. cs.lock();
  1517. if( !verbunden )
  1518. verbinde();
  1519. if( !verbunden )
  1520. {
  1521. cs.unlock();
  1522. return 0;
  1523. }
  1524. klient->sendeEncrypted( "\x26", 1 );
  1525. char ret = 0;
  1526. klient->getNachrichtEncrypted( &ret, 1 );
  1527. if( ret == 1 )
  1528. {
  1529. klient->sendeEncrypted( (char*)&account, 4 );
  1530. int anz = 0;
  1531. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  1532. for( int i = 0; i < anz; i++ )
  1533. {
  1534. int val = 0;
  1535. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1536. spieler->set( val, i );
  1537. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1538. karten->set( val, i );
  1539. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1540. anzahl->set( val, i );
  1541. }
  1542. cs.unlock();
  1543. return 1;
  1544. }
  1545. if( ret == 3 )
  1546. {
  1547. char byte = 0;
  1548. klient->getNachrichtEncrypted( &byte, 1 );
  1549. char *f = new char[ byte + 1 ];
  1550. f[ byte ] = 0;
  1551. klient->getNachrichtEncrypted( f, byte );
  1552. fehler->setText( f );
  1553. delete[] f;
  1554. cs.unlock();
  1555. return 0;
  1556. }
  1557. cs.unlock();
  1558. return 0;
  1559. }
  1560. bool InformationKlient::getStatistikListe( int account, int *seite, int *maxSeite, char sortSpalte, char rückwärts,
  1561. RCArray< Array< int > > *werte, RCArray< Text > *namen ) // Gibt eine Liste mit Spiel Statistiken zurück
  1562. {
  1563. if( !*seite )
  1564. *seite = 1;
  1565. cs.lock();
  1566. if( !verbunden )
  1567. verbinde();
  1568. if( !verbunden )
  1569. {
  1570. cs.unlock();
  1571. return 0;
  1572. }
  1573. char serverReturn = 0;
  1574. klient->sendeEncrypted( "\x27", 1 );
  1575. klient->getNachrichtEncrypted( &serverReturn, 1 );
  1576. if( serverReturn == 1 )
  1577. {
  1578. klient->sendeEncrypted( (char*)&account, 4 );
  1579. klient->sendeEncrypted( (char*)seite, 4 );
  1580. klient->sendeEncrypted( &sortSpalte, 1 );
  1581. klient->sendeEncrypted( &rückwärts, 1 );
  1582. klient->getNachrichtEncrypted( (char*)seite, 4 );
  1583. klient->getNachrichtEncrypted( (char*)maxSeite, 4 );
  1584. int zAnz = 0;
  1585. int sAnz = 0;
  1586. klient->getNachrichtEncrypted( (char*)&zAnz, 4 );
  1587. klient->getNachrichtEncrypted( (char*)&sAnz, 4 );
  1588. for( int i = 0; i < zAnz; i++ )
  1589. {
  1590. Array< int > *tmp = new Array< int >();
  1591. for( int j = 0; j < sAnz; j++ )
  1592. {
  1593. if( j != 1 )
  1594. {
  1595. int val = 0;
  1596. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1597. tmp->set( val, j );
  1598. }
  1599. else
  1600. {
  1601. char län = 0;
  1602. klient->getNachrichtEncrypted( &län, 1 );
  1603. char *n = new char[ län + 1 ];
  1604. n[ län ] = 0;
  1605. if( län )
  1606. klient->getNachrichtEncrypted( n, län );
  1607. namen->set( new Text( n ), i );
  1608. delete[] n;
  1609. }
  1610. }
  1611. werte->set( tmp, i );
  1612. }
  1613. cs.unlock();
  1614. return 1;
  1615. }
  1616. if( serverReturn == 3 )
  1617. {
  1618. char byte = 0;
  1619. klient->getNachrichtEncrypted( &byte, 1 );
  1620. char *f = new char[ byte + 1 ];
  1621. f[ byte ] = 0;
  1622. klient->getNachrichtEncrypted( f, byte );
  1623. fehler->setText( f );
  1624. delete[] f;
  1625. }
  1626. cs.unlock();
  1627. return 0;
  1628. }
  1629. AHDaten *InformationKlient::getSpielHistorieDaten( int account ) // Gibt eine Liste mit den letzten 20 Spielen zurück
  1630. {
  1631. cs.lock();
  1632. if( !verbunden )
  1633. verbinde();
  1634. if( !verbunden )
  1635. {
  1636. cs.unlock();
  1637. return 0;
  1638. }
  1639. klient->sendeEncrypted( "\x28", 1 );
  1640. char ret = 0;
  1641. klient->getNachrichtEncrypted( &ret, 1 );
  1642. if( ret == 1 )
  1643. {
  1644. klient->sendeEncrypted( (char*)&account, 4 );
  1645. AHDaten *ret = new AHDaten();
  1646. char anz = 0;
  1647. klient->getNachrichtEncrypted( &anz, 1 );
  1648. for( char i = 0; i < anz; i++ )
  1649. {
  1650. AHSpielDaten *spiel = new AHSpielDaten();
  1651. klient->getNachrichtEncrypted( (char*)&spiel->id, 4 );
  1652. klient->getNachrichtEncrypted( (char*)&spiel->karteId, 4 );
  1653. char län = 0;
  1654. klient->getNachrichtEncrypted( &län, 1 );
  1655. char *txt = new char[ län + 1 ];
  1656. txt[ län ] = 0;
  1657. if( län )
  1658. klient->getNachrichtEncrypted( txt, län );
  1659. spiel->spiel->setText( txt );
  1660. delete[] txt;
  1661. klient->getNachrichtEncrypted( &län, 1 );
  1662. txt = new char[ län + 1 ];
  1663. txt[ län ] = 0;
  1664. if( län )
  1665. klient->getNachrichtEncrypted( txt, län );
  1666. spiel->karte->setText( txt );
  1667. delete[] txt;
  1668. klient->getNachrichtEncrypted( &län, 1 );
  1669. txt = new char[ län + 1 ];
  1670. txt[ län ] = 0;
  1671. if( län )
  1672. klient->getNachrichtEncrypted( txt, län );
  1673. spiel->datum->setText( txt );
  1674. delete[] txt;
  1675. klient->getNachrichtEncrypted( &län, 1 );
  1676. txt = new char[ län + 1 ];
  1677. txt[ län ] = 0;
  1678. if( län )
  1679. klient->getNachrichtEncrypted( txt, län );
  1680. spiel->status->setText( txt );
  1681. delete[] txt;
  1682. klient->getNachrichtEncrypted( &län, 1 );
  1683. txt = new char[ län + 1 ];
  1684. txt[ län ] = 0;
  1685. if( län )
  1686. klient->getNachrichtEncrypted( txt, län );
  1687. spiel->dauer->setText( txt );
  1688. delete[] txt;
  1689. klient->getNachrichtEncrypted( &län, 1 );
  1690. txt = new char[ län + 1 ];
  1691. txt[ län ] = 0;
  1692. if( län )
  1693. klient->getNachrichtEncrypted( txt, län );
  1694. spiel->spielStatus->setText( txt );
  1695. delete[] txt;
  1696. klient->getNachrichtEncrypted( &län, 1 );
  1697. txt = new char[ län + 1 ];
  1698. txt[ län ] = 0;
  1699. if( län )
  1700. klient->getNachrichtEncrypted( txt, län );
  1701. spiel->gewinner->setText( txt );
  1702. delete[] txt;
  1703. klient->getNachrichtEncrypted( (char*)&spiel->sAnzahl, 4 );
  1704. char tAnz = 0;
  1705. klient->getNachrichtEncrypted( &tAnz, 1 );
  1706. for( char j = 0; j < tAnz; j++ )
  1707. {
  1708. AHSpielTeamDaten *team = new AHSpielTeamDaten();
  1709. char län = 0;
  1710. klient->getNachrichtEncrypted( &län, 1 );
  1711. char *txt = new char[ län + 1 ];
  1712. txt[ län ] = 0;
  1713. if( län )
  1714. klient->getNachrichtEncrypted( txt, län );
  1715. team->name->setText( txt );
  1716. delete[] txt;
  1717. klient->getNachrichtEncrypted( (char*)&team->sAnzahl, 4 );
  1718. klient->getNachrichtEncrypted( &län, 1 );
  1719. txt = new char[ län + 1 ];
  1720. txt[ län ] = 0;
  1721. if( län )
  1722. klient->getNachrichtEncrypted( txt, län );
  1723. team->status->setText( txt );
  1724. delete[] txt;
  1725. klient->getNachrichtEncrypted( (char*)&team->farbe, 4 );
  1726. char sAnz = 0;
  1727. klient->getNachrichtEncrypted( &sAnz, 1 );
  1728. for( char k = 0; k < sAnz; k++ )
  1729. {
  1730. AHSpielSpielerDaten *spieler = new AHSpielSpielerDaten();
  1731. char län = 0;
  1732. klient->getNachrichtEncrypted( &län, 1 );
  1733. char *txt = new char[ län + 1 ];
  1734. txt[ län ] = 0;
  1735. if( län )
  1736. klient->getNachrichtEncrypted( txt, län );
  1737. spieler->name->setText( txt );
  1738. delete[] txt;
  1739. klient->getNachrichtEncrypted( (char*)&spieler->punkte, 4 );
  1740. klient->getNachrichtEncrypted( &län, 1 );
  1741. txt = new char[ län + 1 ];
  1742. txt[ län ] = 0;
  1743. if( län )
  1744. klient->getNachrichtEncrypted( txt, län );
  1745. spieler->status->setText( txt );
  1746. delete[] txt;
  1747. klient->getNachrichtEncrypted( (char*)&spieler->farbe, 4 );
  1748. team->spieler->set( spieler, k );
  1749. }
  1750. spiel->teams->set( team, j );
  1751. }
  1752. ret->spiele->set( spiel, i );
  1753. }
  1754. cs.unlock();
  1755. return ret;
  1756. }
  1757. if( ret == 3 )
  1758. {
  1759. char byte = 0;
  1760. klient->getNachrichtEncrypted( &byte, 1 );
  1761. char *f = new char[ byte + 1 ];
  1762. f[ byte ] = 0;
  1763. klient->getNachrichtEncrypted( f, byte );
  1764. fehler->setText( f );
  1765. delete[] f;
  1766. cs.unlock();
  1767. return 0;
  1768. }
  1769. cs.unlock();
  1770. return 0;
  1771. }
  1772. bool InformationKlient::getHistorieServer( int spielId, int *port, Text *ip ) // sucht nach dem Historie Server von einem Spiel
  1773. {
  1774. cs.lock();
  1775. if( !verbunden )
  1776. verbinde();
  1777. if( !verbunden )
  1778. {
  1779. cs.unlock();
  1780. return 0;
  1781. }
  1782. klient->sendeEncrypted( "\x29", 1 );
  1783. char ret = 0;
  1784. klient->getNachrichtEncrypted( &ret, 1 );
  1785. if( ret == 1 )
  1786. {
  1787. klient->sendeEncrypted( (char*)&spielId, 4 );
  1788. klient->getNachrichtEncrypted( (char*)&ret, 1 );
  1789. if( ret == 1 )
  1790. {
  1791. klient->getNachrichtEncrypted( (char*)port, 4 );
  1792. char län = 0;
  1793. klient->getNachrichtEncrypted( &län, 1 );
  1794. ip->fillText( ' ', län );
  1795. klient->getNachrichtEncrypted( ip->getText(), län );
  1796. cs.unlock();
  1797. return 1;
  1798. }
  1799. }
  1800. if( ret == 3 )
  1801. {
  1802. char byte = 0;
  1803. klient->getNachrichtEncrypted( &byte, 1 );
  1804. char *f = new char[ byte + 1 ];
  1805. f[ byte ] = 0;
  1806. klient->getNachrichtEncrypted( f, byte );
  1807. fehler->setText( f );
  1808. delete[] f;
  1809. }
  1810. cs.unlock();
  1811. return 0;
  1812. }
  1813. bool InformationKlient::keepAlive() // Erhält die Verbindung aufrecht
  1814. {
  1815. if( !verbunden )
  1816. return 0;
  1817. char res = 0;
  1818. if( !cs.tryLock() )
  1819. return 1;
  1820. Framework::logLine( "Verbindungstest zum Information Server..." );
  1821. bool ok = klient->sendeEncrypted( "\x2C", 1 );
  1822. ok &= klient->getNachrichtEncrypted( &res, 1 );
  1823. cs.unlock();
  1824. if( res != 1 || !ok )
  1825. {
  1826. Framework::logLine( "Verbindungsabbruch." );
  1827. trenne();
  1828. }
  1829. else
  1830. Framework::logLine( "Verbindung besteht." );
  1831. return res == 1;
  1832. }
  1833. bool InformationKlient::hatRecht( int recht ) // Prüft ob Berechtigung vorhanden
  1834. {
  1835. cs.lock();
  1836. if( !verbunden )
  1837. verbinde();
  1838. if( !verbunden )
  1839. {
  1840. cs.unlock();
  1841. return 0;
  1842. }
  1843. klient->sendeEncrypted( "\x2D", 1 );
  1844. char ret = 0;
  1845. klient->getNachrichtEncrypted( &ret, 1 );
  1846. if( ret == 1 )
  1847. {
  1848. klient->sendeEncrypted( (char*)&recht, 4 );
  1849. klient->getNachrichtEncrypted( (char*)&ret, 1 );
  1850. }
  1851. if( ret == 3 )
  1852. {
  1853. char byte = 0;
  1854. klient->getNachrichtEncrypted( &byte, 1 );
  1855. char *f = new char[ byte + 1 ];
  1856. f[ byte ] = 0;
  1857. klient->getNachrichtEncrypted( f, byte );
  1858. fehler->setText( f );
  1859. delete[] f;
  1860. }
  1861. cs.unlock();
  1862. return ret == 1;
  1863. }
  1864. int InformationKlient::getKartenListe( char *filter, char sortSpalte, char absteigend, Array< int > *kId, RCArray< Text > *kName, RCArray< Text > *sName,
  1865. Array< int > *kupfer, Array< int > *verkauft, Array< int > *maxSpieler ) // Gibt eine Liste mit Karten zurück
  1866. {
  1867. cs.lock();
  1868. if( !verbunden )
  1869. verbinde();
  1870. if( !verbunden )
  1871. {
  1872. cs.unlock();
  1873. return 0;
  1874. }
  1875. klient->sendeEncrypted( "\x2E", 1 );
  1876. char res = 0;
  1877. klient->getNachrichtEncrypted( &res, 1 );
  1878. int ret = 0;
  1879. if( res == 1 )
  1880. {
  1881. char län = textLength( filter );
  1882. klient->sendeEncrypted( &län, 1 );
  1883. klient->sendeEncrypted( filter, län );
  1884. klient->sendeEncrypted( &sortSpalte, 1 );
  1885. klient->sendeEncrypted( &absteigend, 1 );
  1886. klient->getNachrichtEncrypted( (char*)&ret, 4 );
  1887. for( int i = 0; i < ret; i++ )
  1888. {
  1889. int val = 0;
  1890. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1891. kId->set( val, i );
  1892. klient->getNachrichtEncrypted( &län, 1 );
  1893. char *txt = new char[ län + 1 ];
  1894. txt[ län ] = 0;
  1895. if( län )
  1896. klient->getNachrichtEncrypted( txt, län );
  1897. kName->set( new Text( txt ), i );
  1898. delete[] txt;
  1899. klient->getNachrichtEncrypted( &län, 1 );
  1900. txt = new char[ län + 1 ];
  1901. txt[ län ] = 0;
  1902. if( län )
  1903. klient->getNachrichtEncrypted( txt, län );
  1904. sName->set( new Text( txt ), i );
  1905. delete[] txt;
  1906. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1907. kupfer->set( val, i );
  1908. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1909. verkauft->set( val, i );
  1910. klient->getNachrichtEncrypted( (char*)&val, 4 );
  1911. maxSpieler->set( val, i );
  1912. }
  1913. }
  1914. if( res == 3 )
  1915. {
  1916. char byte = 0;
  1917. klient->getNachrichtEncrypted( &byte, 1 );
  1918. char *f = new char[ byte + 1 ];
  1919. f[ byte ] = 0;
  1920. klient->getNachrichtEncrypted( f, byte );
  1921. fehler->setText( f );
  1922. delete[] f;
  1923. }
  1924. cs.unlock();
  1925. return ret;
  1926. }
  1927. bool InformationKlient::getEditorServer( int karteId, int *port, Text *ip ) // sucht nach dem Editor Server von einer Karte
  1928. {
  1929. cs.lock();
  1930. if( !verbunden )
  1931. verbinde();
  1932. if( !verbunden )
  1933. {
  1934. cs.unlock();
  1935. return 0;
  1936. }
  1937. klient->sendeEncrypted( "\x2F", 1 );
  1938. char ret = 0;
  1939. klient->getNachrichtEncrypted( &ret, 1 );
  1940. if( ret == 1 )
  1941. {
  1942. klient->sendeEncrypted( (char*)&karteId, 4 );
  1943. klient->getNachrichtEncrypted( (char*)&ret, 1 );
  1944. if( ret == 1 )
  1945. {
  1946. klient->getNachrichtEncrypted( (char*)port, 4 );
  1947. char län = 0;
  1948. klient->getNachrichtEncrypted( &län, 1 );
  1949. ip->fillText( ' ', län );
  1950. klient->getNachrichtEncrypted( ip->getText(), län );
  1951. cs.unlock();
  1952. return 1;
  1953. }
  1954. }
  1955. if( ret == 3 )
  1956. {
  1957. char byte = 0;
  1958. klient->getNachrichtEncrypted( &byte, 1 );
  1959. char *f = new char[ byte + 1 ];
  1960. f[ byte ] = 0;
  1961. klient->getNachrichtEncrypted( f, byte );
  1962. fehler->setText( f );
  1963. delete[] f;
  1964. }
  1965. cs.unlock();
  1966. return 0;
  1967. }
  1968. bool InformationKlient::getKartenServer( int karteId, int *port, Text *ip ) // sucht nach dem Karten Server von einer Karte
  1969. {
  1970. cs.lock();
  1971. if( !verbunden )
  1972. verbinde();
  1973. if( !verbunden )
  1974. {
  1975. cs.unlock();
  1976. return 0;
  1977. }
  1978. klient->sendeEncrypted( "\x30", 1 );
  1979. char ret = 0;
  1980. klient->getNachrichtEncrypted( &ret, 1 );
  1981. if( ret == 1 )
  1982. {
  1983. klient->sendeEncrypted( (char*)&karteId, 4 );
  1984. klient->getNachrichtEncrypted( (char*)&ret, 1 );
  1985. if( ret == 1 )
  1986. {
  1987. klient->getNachrichtEncrypted( (char*)port, 4 );
  1988. char län = 0;
  1989. klient->getNachrichtEncrypted( &län, 1 );
  1990. ip->fillText( ' ', län );
  1991. klient->getNachrichtEncrypted( ip->getText(), län );
  1992. cs.unlock();
  1993. return 1;
  1994. }
  1995. }
  1996. if( ret == 3 )
  1997. {
  1998. char byte = 0;
  1999. klient->getNachrichtEncrypted( &byte, 1 );
  2000. char *f = new char[ byte + 1 ];
  2001. f[ byte ] = 0;
  2002. klient->getNachrichtEncrypted( f, byte );
  2003. fehler->setText( f );
  2004. delete[] f;
  2005. }
  2006. cs.unlock();
  2007. return 0;
  2008. }
  2009. bool InformationKlient::trenne() // trennt sich von dem Informaion Server
  2010. {
  2011. cs.lock();
  2012. if( !verbunden )
  2013. {
  2014. cs.unlock();
  2015. return 1;
  2016. }
  2017. Framework::logLine( "Verbindung zum Information Server wird getrennt..." );
  2018. klient->sendeEncrypted( "\3", 1 );
  2019. Sleep( 100 );
  2020. klient->trenne();
  2021. verbunden = 0;
  2022. cs.unlock();
  2023. return 1;
  2024. }
  2025. // constant
  2026. bool InformationKlient::istVerbunden() const // prüft, ob mit Informaion Server verbunden
  2027. {
  2028. return verbunden;
  2029. }
  2030. char *InformationKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
  2031. {
  2032. return fehler->getText();
  2033. }
  2034. // Reference Counting
  2035. InformationKlientV *InformationKlient::getThis()
  2036. {
  2037. ref++;
  2038. return this;
  2039. }
  2040. InformationKlientV *InformationKlient::release()
  2041. {
  2042. ref--;
  2043. if( !ref )
  2044. delete this;
  2045. return 0;
  2046. }