AnmeldungK.cpp 24 KB

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