InformationK.cpp 60 KB

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