InformationK.cpp 59 KB

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