AnmeldungK.cpp 25 KB

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