AnmeldungK.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814
  1. #include "../KSGKlient.h"
  2. #include "../KSGServer.h"
  3. // Inhalt der AnmeldungKlient Klasse aus KSGKlient.h
  4. // Konstruktor
  5. AnmeldungKlient::AnmeldungKlient()
  6. {
  7. verbunden = 0;
  8. klient = 0;
  9. fehler = new Text( "" );
  10. spielHistorie = 0;
  11. klientId = getKlientId();
  12. ref = 1;
  13. InitializeCriticalSection( &cs );
  14. }
  15. // Destruktor
  16. AnmeldungKlient::~AnmeldungKlient()
  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 ] = { 158, 10, 37, 155, 117, 58, 28, 197, 132, 76, 252, 83, 84, 222, 11, 125, 240, 218, 25, 201 };
  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 AnmeldungKlient::verbinde() // verbindet ich mit dem Chat Server
  88. {
  89. LOCK( &cs );
  90. if( verbunden )
  91. {
  92. UNLOCK( &cs );
  93. return 1;
  94. }
  95. spielHistorie = 0;
  96. if( !klient )
  97. {
  98. char *msIp = getMainServerIp();
  99. unsigned short msPort = getMainServerPort();
  100. klient = new Klient();
  101. 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 };
  102. klient->setSendeSchlüssel( (char*)schlüssel, 20 );
  103. klient->setEmpfangSchlüssel( (char*)schlüssel, 20 );
  104. if( !klient->verbinde( msPort, msIp ) )
  105. {
  106. fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." );
  107. klient = klient->release();
  108. delete[]msIp;
  109. UNLOCK( &cs );
  110. return 0;
  111. }
  112. delete[]msIp;
  113. klient->sende( "\0", 1 ); // Verschlüsselung aktivieren
  114. klient->sendeVerschlüsselt( "\1", 1 );
  115. klient->sendeVerschlüsselt( (char*)&klientId, 4 );
  116. char serverReturn = 0;
  117. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  118. if( serverReturn == 3 )
  119. {
  120. char län = 0;
  121. klient->getNachrichtVerschlüsselt( &län, 1 );
  122. char *nachricht = new char[ län + 1 ];
  123. nachricht[ län ] = 0;
  124. klient->getNachrichtVerschlüsselt( nachricht, län );
  125. fehler->setText( nachricht );
  126. delete[]nachricht;
  127. klient->sendeVerschlüsselt( "\3", 1 );
  128. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  129. klient->trenne();
  130. klient = klient->release();
  131. UNLOCK( &cs );
  132. return 0;
  133. }
  134. char *sl = 0;
  135. char slLän = getSchlüssel( &sl );
  136. klient->setSendeSchlüssel( sl, slLän );
  137. klient->setEmpfangSchlüssel( sl, slLän );
  138. delete[] sl;
  139. klient->sendeVerschlüsselt( "\6\6", 2 );
  140. char byte = 0;
  141. klient->getNachrichtVerschlüsselt( &byte, 1 );
  142. if( byte == 2 )
  143. {
  144. unsigned char lsIp[ 4 ];
  145. klient->getNachrichtVerschlüsselt( (char *)lsIp, 4 );
  146. unsigned short lsPort = 0;
  147. klient->getNachrichtVerschlüsselt( (char*)&lsPort, 2 );
  148. klient->sendeVerschlüsselt( "\3", 1 );
  149. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  150. klient->trenne();
  151. Text *lsIpT = new Text( "" );
  152. lsIpT->anhängen( (int)lsIp[ 0 ] );
  153. lsIpT->anhängen( "." );
  154. lsIpT->anhängen( (int)lsIp[ 1 ] );
  155. lsIpT->anhängen( "." );
  156. lsIpT->anhängen( (int)lsIp[ 2 ] );
  157. lsIpT->anhängen( "." );
  158. lsIpT->anhängen( (int)lsIp[ 3 ] );
  159. unsigned char schlüssel[ 20 ] = { 158, 10, 37, 155, 117, 58, 28, 197, 132, 76, 252, 83, 84, 222, 11, 125, 240, 218, 25, 201 };
  160. klient->setSendeSchlüssel( (char*)schlüssel, 20 );
  161. klient->setEmpfangSchlüssel( (char*)schlüssel, 20 );
  162. klient->verbinde( lsPort, lsIpT->getText() );
  163. lsIpT = lsIpT->release();
  164. klient->sendeVerschlüsselt( "\3", 1 );
  165. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  166. klient->trenne();
  167. }
  168. if( byte == 3 )
  169. {
  170. klient->getNachrichtVerschlüsselt( &byte, 1 );
  171. char *f = new char[ byte + 1 ];
  172. f[ byte ] = 0;
  173. klient->getNachrichtVerschlüsselt( f, byte );
  174. fehler->setText( f );
  175. delete[]f;
  176. klient->sendeVerschlüsselt( "\3", 1 );
  177. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  178. klient->trenne();
  179. klient = klient->release();
  180. UNLOCK( &cs );
  181. return 0;
  182. }
  183. }
  184. unsigned char schlüssel[ 20 ] = { 158, 10, 37, 155, 117, 58, 28, 197, 132, 76, 252, 83, 84, 222, 11, 125, 240, 218, 25, 201 };
  185. klient->setSendeSchlüssel( (char*)schlüssel, 20 );
  186. klient->setEmpfangSchlüssel( (char*)schlüssel, 20 );
  187. if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
  188. {
  189. if( klient->sendeVerschlüsselt( "\1", 1 ) )
  190. {
  191. klient->sendeVerschlüsselt( (char*)&klientId, 4 );
  192. char serverReturn = 0;
  193. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  194. if( serverReturn == 3 )
  195. {
  196. char byte = 0;
  197. klient->getNachrichtVerschlüsselt( &byte, 1 );
  198. char *f = new char[ byte + 1 ];
  199. f[ byte ] = 0;
  200. klient->getNachrichtVerschlüsselt( f, byte );
  201. fehler->setText( f );
  202. delete[]f;
  203. klient->sendeVerschlüsselt( "\3", 1 );
  204. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  205. klient->trenne();
  206. UNLOCK( &cs );
  207. return 0;
  208. }
  209. char *sl = 0;
  210. char slLän = getSchlüssel( &sl );
  211. klient->setSendeSchlüssel( sl, slLän );
  212. klient->setEmpfangSchlüssel( sl, slLän );
  213. delete[] sl;
  214. verbunden = 1;
  215. UNLOCK( &cs );
  216. return 1;
  217. }
  218. else
  219. {
  220. fehler->setText( "Der dir zugewiesene Anmeldung Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
  221. klient = klient->release();
  222. }
  223. }
  224. else
  225. {
  226. fehler->setText( "Der dir zugewiesene Anmeldung Server antwortet nicht. Bitte versuche es Später erneut." );
  227. klient = klient->release();
  228. }
  229. UNLOCK( &cs );
  230. return 0;
  231. }
  232. int AnmeldungKlient::gruppeErstellen( int karteId ) // erstellt eine gruppe
  233. {
  234. if( !verbunden )
  235. verbinde();
  236. if( !verbunden )
  237. return 0;
  238. LOCK( &cs );
  239. klient->sendeVerschlüsselt( "\5", 1 );
  240. char serverReturn = 0;
  241. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  242. if( serverReturn == 3 )
  243. {
  244. char län = 0;
  245. klient->getNachrichtVerschlüsselt( &län, 1 );
  246. char *message = new char[ län + 1 ];
  247. message[ län ] = 0;
  248. klient->getNachrichtVerschlüsselt( message, län );
  249. fehler->setText( message );
  250. delete[] message;
  251. UNLOCK( &cs );
  252. return 0;
  253. }
  254. klient->sendeVerschlüsselt( (char*)&karteId, 4 );
  255. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  256. if( serverReturn == 3 )
  257. {
  258. char län = 0;
  259. klient->getNachrichtVerschlüsselt( &län, 1 );
  260. char *message = new char[ län + 1 ];
  261. message[ län ] = 0;
  262. klient->getNachrichtVerschlüsselt( message, län );
  263. fehler->setText( message );
  264. delete[] message;
  265. UNLOCK( &cs );
  266. return 0;
  267. }
  268. int gruppeId = 0;
  269. klient->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  270. UNLOCK( &cs );
  271. return gruppeId;
  272. }
  273. bool AnmeldungKlient::gruppeBetreten( int gruppeId, Array< int > *mitglieder, int *anzahl ) // betritt Gruppe
  274. {
  275. if( !verbunden )
  276. verbinde();
  277. if( !verbunden )
  278. return 0;
  279. LOCK( &cs );
  280. klient->sendeVerschlüsselt( "\x6", 1 );
  281. char serverReturn = 0;
  282. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  283. if( serverReturn == 3 )
  284. {
  285. char län = 0;
  286. klient->getNachrichtVerschlüsselt( &län, 1 );
  287. char *message = new char[ län + 1 ];
  288. message[ län ] = 0;
  289. klient->getNachrichtVerschlüsselt( message, län );
  290. fehler->setText( message );
  291. delete[] message;
  292. UNLOCK( &cs );
  293. return 0;
  294. }
  295. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  296. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  297. if( serverReturn == 3 )
  298. {
  299. char län = 0;
  300. klient->getNachrichtVerschlüsselt( &län, 1 );
  301. char *message = new char[ län + 1 ];
  302. message[ län ] = 0;
  303. klient->getNachrichtVerschlüsselt( message, län );
  304. fehler->setText( message );
  305. delete[] message;
  306. UNLOCK( &cs );
  307. return 0;
  308. }
  309. klient->getNachrichtVerschlüsselt( (char*)anzahl, 4 );
  310. for( int i = 0; i < *anzahl; i++ )
  311. {
  312. int id = 0;
  313. klient->getNachrichtVerschlüsselt( (char*)&id, 4 );
  314. mitglieder->add( id, i );
  315. }
  316. UNLOCK( &cs );
  317. return 1;
  318. }
  319. bool AnmeldungKlient::gruppeVerlassen( int gruppeId ) // Verlässt die gruppe
  320. {
  321. if( !verbunden )
  322. verbinde();
  323. if( !verbunden )
  324. return 0;
  325. LOCK( &cs );
  326. klient->sendeVerschlüsselt( "\x7", 1 );
  327. char serverReturn = 0;
  328. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  329. if( serverReturn == 3 )
  330. {
  331. char län = 0;
  332. klient->getNachrichtVerschlüsselt( &län, 1 );
  333. char *message = new char[ län + 1 ];
  334. message[ län ] = 0;
  335. klient->getNachrichtVerschlüsselt( message, län );
  336. fehler->setText( message );
  337. delete[] message;
  338. UNLOCK( &cs );
  339. return 0;
  340. }
  341. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  342. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  343. if( serverReturn == 3 )
  344. {
  345. char län = 0;
  346. klient->getNachrichtVerschlüsselt( &län, 1 );
  347. char *message = new char[ län + 1 ];
  348. message[ län ] = 0;
  349. klient->getNachrichtVerschlüsselt( message, län );
  350. fehler->setText( message );
  351. delete[] message;
  352. UNLOCK( &cs );
  353. return 0;
  354. }
  355. UNLOCK( &cs );
  356. return 1;
  357. }
  358. bool AnmeldungKlient::gruppeAnmelden( int gruppeId ) // meldet gruppe an
  359. {
  360. if( !verbunden )
  361. verbinde();
  362. if( !verbunden )
  363. return 0;
  364. LOCK( &cs );
  365. klient->sendeVerschlüsselt( "\x9", 1 );
  366. char serverReturn = 0;
  367. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  368. if( serverReturn == 3 )
  369. {
  370. char län = 0;
  371. klient->getNachrichtVerschlüsselt( &län, 1 );
  372. char *message = new char[ län + 1 ];
  373. message[ län ] = 0;
  374. klient->getNachrichtVerschlüsselt( message, län );
  375. fehler->setText( message );
  376. delete[] message;
  377. UNLOCK( &cs );
  378. return 0;
  379. }
  380. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  381. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  382. if( serverReturn == 3 )
  383. {
  384. char län = 0;
  385. klient->getNachrichtVerschlüsselt( &län, 1 );
  386. char *message = new char[ län + 1 ];
  387. message[ län ] = 0;
  388. klient->getNachrichtVerschlüsselt( message, län );
  389. fehler->setText( message );
  390. delete[] message;
  391. UNLOCK( &cs );
  392. return 0;
  393. }
  394. UNLOCK( &cs );
  395. return 1;
  396. }
  397. bool AnmeldungKlient::gruppeAbmelden( int gruppeId ) // meldet gruppe ab
  398. {
  399. if( !verbunden )
  400. verbinde();
  401. if( !verbunden )
  402. return 0;
  403. LOCK( &cs );
  404. klient->sendeVerschlüsselt( "\xA", 1 );
  405. char serverReturn = 0;
  406. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  407. if( serverReturn == 3 )
  408. {
  409. char län = 0;
  410. klient->getNachrichtVerschlüsselt( &län, 1 );
  411. char *message = new char[ län + 1 ];
  412. message[ län ] = 0;
  413. klient->getNachrichtVerschlüsselt( message, län );
  414. fehler->setText( message );
  415. delete[] message;
  416. UNLOCK( &cs );
  417. return 0;
  418. }
  419. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  420. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  421. if( serverReturn == 3 )
  422. {
  423. char län = 0;
  424. klient->getNachrichtVerschlüsselt( &län, 1 );
  425. char *message = new char[ län + 1 ];
  426. message[ län ] = 0;
  427. klient->getNachrichtVerschlüsselt( message, län );
  428. fehler->setText( message );
  429. delete[] message;
  430. UNLOCK( &cs );
  431. return 0;
  432. }
  433. UNLOCK( &cs );
  434. return 1;
  435. }
  436. bool AnmeldungKlient::gruppeSpielerEinladen( int accountId, int gruppeId ) // läht Spieler ein die Gruppe zu betreten
  437. {
  438. if( !verbunden )
  439. verbinde();
  440. if( !verbunden )
  441. return 0;
  442. LOCK( &cs );
  443. klient->sendeVerschlüsselt( "\xB", 1 );
  444. char serverReturn = 0;
  445. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  446. if( serverReturn == 3 )
  447. {
  448. char län = 0;
  449. klient->getNachrichtVerschlüsselt( &län, 1 );
  450. char *message = new char[ län + 1 ];
  451. message[ län ] = 0;
  452. klient->getNachrichtVerschlüsselt( message, län );
  453. fehler->setText( message );
  454. delete[] message;
  455. UNLOCK( &cs );
  456. return 0;
  457. }
  458. klient->sendeVerschlüsselt( (char*)&accountId, 4 );
  459. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  460. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  461. if( serverReturn == 3 )
  462. {
  463. char län = 0;
  464. klient->getNachrichtVerschlüsselt( &län, 1 );
  465. char *message = new char[ län + 1 ];
  466. message[ län ] = 0;
  467. klient->getNachrichtVerschlüsselt( message, län );
  468. fehler->setText( message );
  469. delete[] message;
  470. UNLOCK( &cs );
  471. return 0;
  472. }
  473. UNLOCK( &cs );
  474. return 1;
  475. }
  476. bool AnmeldungKlient::gruppeEinladungAbbrechen( int accountId, int gruppeId ) // bricht einladung ab
  477. {
  478. if( !verbunden )
  479. verbinde();
  480. if( !verbunden )
  481. return 0;
  482. LOCK( &cs );
  483. klient->sendeVerschlüsselt( "\x11", 1 );
  484. char serverReturn = 0;
  485. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  486. if( serverReturn == 3 )
  487. {
  488. char län = 0;
  489. klient->getNachrichtVerschlüsselt( &län, 1 );
  490. char *message = new char[ län + 1 ];
  491. message[ län ] = 0;
  492. klient->getNachrichtVerschlüsselt( message, län );
  493. fehler->setText( message );
  494. delete[] message;
  495. UNLOCK( &cs );
  496. return 0;
  497. }
  498. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  499. klient->sendeVerschlüsselt( (char*)&accountId, 4 );
  500. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  501. if( serverReturn == 3 )
  502. {
  503. char län = 0;
  504. klient->getNachrichtVerschlüsselt( &län, 1 );
  505. char *message = new char[ län + 1 ];
  506. message[ län ] = 0;
  507. klient->getNachrichtVerschlüsselt( message, län );
  508. fehler->setText( message );
  509. delete[] message;
  510. UNLOCK( &cs );
  511. return 0;
  512. }
  513. UNLOCK( &cs );
  514. return 1;
  515. }
  516. bool AnmeldungKlient::gruppeEinladungAblehnen( int gruppeId ) // Einladung zur Gruppe ablehnen
  517. {
  518. if( !verbunden )
  519. verbinde();
  520. if( !verbunden )
  521. return 0;
  522. LOCK( &cs );
  523. klient->sendeVerschlüsselt( "\x12", 1 );
  524. char serverReturn = 0;
  525. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  526. if( serverReturn == 3 )
  527. {
  528. char län = 0;
  529. klient->getNachrichtVerschlüsselt( &län, 1 );
  530. char *message = new char[ län + 1 ];
  531. message[ län ] = 0;
  532. klient->getNachrichtVerschlüsselt( message, län );
  533. fehler->setText( message );
  534. delete[] message;
  535. UNLOCK( &cs );
  536. return 0;
  537. }
  538. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  539. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  540. if( serverReturn == 3 )
  541. {
  542. char län = 0;
  543. klient->getNachrichtVerschlüsselt( &län, 1 );
  544. char *message = new char[ län + 1 ];
  545. message[ län ] = 0;
  546. klient->getNachrichtVerschlüsselt( message, län );
  547. fehler->setText( message );
  548. delete[] message;
  549. UNLOCK( &cs );
  550. return 0;
  551. }
  552. UNLOCK( &cs );
  553. return 1;
  554. }
  555. bool AnmeldungKlient::kickSpielerAusGruppe( int accountId, int gruppeId ) // wirft Spieler aus Gruppe
  556. {
  557. if( !verbunden )
  558. verbinde();
  559. if( !verbunden )
  560. return 0;
  561. LOCK( &cs );
  562. klient->sendeVerschlüsselt( "\xC", 1 );
  563. char serverReturn = 0;
  564. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  565. if( serverReturn == 3 )
  566. {
  567. char län = 0;
  568. klient->getNachrichtVerschlüsselt( &län, 1 );
  569. char *message = new char[ län + 1 ];
  570. message[ län ] = 0;
  571. klient->getNachrichtVerschlüsselt( message, län );
  572. fehler->setText( message );
  573. delete[] message;
  574. UNLOCK( &cs );
  575. return 0;
  576. }
  577. klient->sendeVerschlüsselt( (char*)&accountId, 4 );
  578. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  579. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  580. if( serverReturn == 3 )
  581. {
  582. char län = 0;
  583. klient->getNachrichtVerschlüsselt( &län, 1 );
  584. char *message = new char[ län + 1 ];
  585. message[ län ] = 0;
  586. klient->getNachrichtVerschlüsselt( message, län );
  587. fehler->setText( message );
  588. delete[] message;
  589. UNLOCK( &cs );
  590. return 0;
  591. }
  592. UNLOCK( &cs );
  593. return 1;
  594. }
  595. bool AnmeldungKlient::gruppeSpielStarten( int gruppeId, bool spielStarten ) // startet das Spiel der Gruppe
  596. {
  597. if( !verbunden )
  598. verbinde();
  599. if( !verbunden )
  600. return 0;
  601. LOCK( &cs );
  602. klient->sendeVerschlüsselt( "\x10", 1 );
  603. char serverReturn = 0;
  604. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  605. if( serverReturn == 3 )
  606. {
  607. char län = 0;
  608. klient->getNachrichtVerschlüsselt( &län, 1 );
  609. char *message = new char[ län + 1 ];
  610. message[ län ] = 0;
  611. klient->getNachrichtVerschlüsselt( message, län );
  612. fehler->setText( message );
  613. delete[] message;
  614. UNLOCK( &cs );
  615. return 0;
  616. }
  617. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  618. klient->sendeVerschlüsselt( (char*)&spielStarten, 1 );
  619. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  620. if( serverReturn == 3 )
  621. {
  622. char län = 0;
  623. klient->getNachrichtVerschlüsselt( &län, 1 );
  624. char *message = new char[ län + 1 ];
  625. message[ län ] = 0;
  626. klient->getNachrichtVerschlüsselt( message, län );
  627. fehler->setText( message );
  628. delete[] message;
  629. UNLOCK( &cs );
  630. return 0;
  631. }
  632. UNLOCK( &cs );
  633. return 1;
  634. }
  635. bool AnmeldungKlient::gruppeNachricht( int gruppeId, char *nachricht ) // nachricht an gruppe senden
  636. {
  637. if( !verbunden )
  638. verbinde();
  639. if( !verbunden )
  640. return 0;
  641. char län = textLänge( nachricht );
  642. if( !län )
  643. return 1;
  644. LOCK( &cs );
  645. klient->sendeVerschlüsselt( "\xD", 1 );
  646. char serverReturn = 0;
  647. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  648. if( serverReturn == 3 )
  649. {
  650. char län = 0;
  651. klient->getNachrichtVerschlüsselt( &län, 1 );
  652. char *message = new char[ län + 1 ];
  653. message[ län ] = 0;
  654. klient->getNachrichtVerschlüsselt( message, län );
  655. fehler->setText( message );
  656. delete[] message;
  657. UNLOCK( &cs );
  658. return 0;
  659. }
  660. klient->sendeVerschlüsselt( (char*)&gruppeId, 4 );
  661. klient->sendeVerschlüsselt( (char*)&län, 1 );
  662. klient->sendeVerschlüsselt( nachricht, län );
  663. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  664. if( serverReturn == 3 )
  665. {
  666. char län = 0;
  667. klient->getNachrichtVerschlüsselt( &län, 1 );
  668. char *message = new char[ län + 1 ];
  669. message[ län ] = 0;
  670. klient->getNachrichtVerschlüsselt( message, län );
  671. fehler->setText( message );
  672. delete[] message;
  673. UNLOCK( &cs );
  674. return 0;
  675. }
  676. UNLOCK( &cs );
  677. return 1;
  678. }
  679. bool AnmeldungKlient::anmelden( int karteId ) // betritt warteschlange
  680. {
  681. if( !verbunden )
  682. verbinde();
  683. if( !verbunden )
  684. return 0;
  685. LOCK( &cs );
  686. klient->sendeVerschlüsselt( "\xE", 1 );
  687. char serverReturn = 0;
  688. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  689. if( serverReturn == 3 )
  690. {
  691. char län = 0;
  692. klient->getNachrichtVerschlüsselt( &län, 1 );
  693. char *message = new char[ län + 1 ];
  694. message[ län ] = 0;
  695. klient->getNachrichtVerschlüsselt( message, län );
  696. fehler->setText( message );
  697. delete[] message;
  698. UNLOCK( &cs );
  699. return 0;
  700. }
  701. klient->sendeVerschlüsselt( (char*)&karteId, 4 );
  702. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  703. if( serverReturn == 3 )
  704. {
  705. char län = 0;
  706. klient->getNachrichtVerschlüsselt( &län, 1 );
  707. char *message = new char[ län + 1 ];
  708. message[ län ] = 0;
  709. klient->getNachrichtVerschlüsselt( message, län );
  710. fehler->setText( message );
  711. delete[] message;
  712. UNLOCK( &cs );
  713. return 0;
  714. }
  715. UNLOCK( &cs );
  716. return 1;
  717. }
  718. bool AnmeldungKlient::abmelden() // verlässt warteschlange
  719. {
  720. if( !verbunden )
  721. verbinde();
  722. if( !verbunden )
  723. return 0;
  724. LOCK( &cs );
  725. klient->sendeVerschlüsselt( "\xF", 1 );
  726. char serverReturn = 0;
  727. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  728. if( serverReturn == 3 )
  729. {
  730. char län = 0;
  731. klient->getNachrichtVerschlüsselt( &län, 1 );
  732. char *message = new char[ län + 1 ];
  733. message[ län ] = 0;
  734. klient->getNachrichtVerschlüsselt( message, län );
  735. fehler->setText( message );
  736. delete[] message;
  737. UNLOCK( &cs );
  738. return 0;
  739. }
  740. UNLOCK( &cs );
  741. return 1;
  742. }
  743. bool AnmeldungKlient::keepAlive() // Erhält die Verbindung aufrecht
  744. {
  745. if( !verbunden )
  746. return 0;
  747. char res = 0;
  748. if( !TryEnterCriticalSection( &cs ) )
  749. return 1;
  750. klient->sendeVerschlüsselt( "\x13", 1 );
  751. klient->getNachrichtVerschlüsselt( &res, 1 );
  752. UNLOCK( &cs );
  753. if( res != 1 )
  754. trenne();
  755. return res == 1;
  756. }
  757. bool AnmeldungKlient::trenne() // trennt sich von dem Chat Server
  758. {
  759. if( !verbunden )
  760. return 1;
  761. LOCK( &cs );
  762. klient->sendeVerschlüsselt( "\3", 1 );
  763. char serverReturn = 0;
  764. klient->getNachrichtVerschlüsselt( &serverReturn, 1 );
  765. klient->trenne();
  766. verbunden = 0;
  767. klient->trenne();
  768. UNLOCK( &cs );
  769. return 1;
  770. }
  771. // constant
  772. bool AnmeldungKlient::istVerbunden() const // prüft, ob mit Chat Server verbunden
  773. {
  774. return verbunden;
  775. }
  776. char *AnmeldungKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
  777. {
  778. return fehler->getText();
  779. }
  780. // Reference Counting
  781. AnmeldungKlient *AnmeldungKlient::getThis()
  782. {
  783. ref++;
  784. return this;
  785. }
  786. AnmeldungKlient *AnmeldungKlient::release()
  787. {
  788. ref--;
  789. if( !ref )
  790. delete this;
  791. return 0;
  792. }