ChatK.cpp 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167
  1. #include "../KSGKlient.h"
  2. #include "../KSGServer.h"
  3. #include "../../Global/Variablen.h"
  4. // Inhalt der ChatKlient Klasse aus KSGKlient.h
  5. // Konstruktor
  6. ChatKlient::ChatKlient()
  7. {
  8. verbunden = 0;
  9. senden = 0;
  10. empfangen = 0;
  11. fehler = new Text( "" );
  12. klientId = getKlientId();
  13. ref = 1;
  14. InitializeCriticalSection( &cs );
  15. }
  16. // Destruktor
  17. ChatKlient::~ChatKlient()
  18. {
  19. LOCK( &cs );
  20. if( senden )
  21. {
  22. char serverReturn = 0;
  23. if( verbunden )
  24. {
  25. senden->sendeVerschlüsselt( "\4", 1 );
  26. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  27. senden->sendeVerschlüsselt( "\3", 1 );
  28. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  29. senden->trenne();
  30. }
  31. senden = senden->release();
  32. verbunden = 0;
  33. if( empfangen )
  34. {
  35. warteAufThread( 5000 );
  36. ende();
  37. empfangen->trenne();
  38. empfangen = empfangen->release();
  39. }
  40. }
  41. fehler = fehler->release();
  42. UNLOCK( &cs );
  43. DeleteCriticalSection( &cs );
  44. }
  45. // nicht constant
  46. bool ChatKlient::verbinde() // verbindet ich mit dem Chat Server
  47. {
  48. LOCK( &cs );
  49. if( verbunden )
  50. {
  51. UNLOCK( &cs );
  52. return 1;
  53. }
  54. if( !senden )
  55. {
  56. char *msIp = getMainServerIp();
  57. unsigned short msPort = getMainServerPort();
  58. senden = new Klient();
  59. 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 };
  60. senden->setSendeSchlüssel( (char*)schlüssel, 20 );
  61. senden->setEmpfangSchlüssel( (char*)schlüssel, 20 );
  62. if( !senden->verbinde( msPort, msIp ) )
  63. {
  64. fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." );
  65. senden = senden->release();
  66. delete[]msIp;
  67. UNLOCK( &cs );
  68. return 0;
  69. }
  70. delete[]msIp;
  71. senden->sende( "\0", 1 ); // Verschlüsselung aktivieren
  72. senden->sendeVerschlüsselt( "\1", 1 );
  73. senden->sendeVerschlüsselt( (char*)&klientId, 4 );
  74. char serverReturn = 0;
  75. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  76. if( serverReturn == 3 )
  77. {
  78. char län = 0;
  79. senden->getNachrichtVerschlüsselt( &län, 1 );
  80. char *nachricht = new char[ län + 1 ];
  81. nachricht[ län ] = 0;
  82. senden->getNachrichtVerschlüsselt( nachricht, län );
  83. fehler->setText( nachricht );
  84. delete[]nachricht;
  85. senden->sendeVerschlüsselt( "\3", 1 );
  86. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  87. senden->trenne();
  88. senden = senden->release();
  89. UNLOCK( &cs );
  90. return 0;
  91. }
  92. char *sl = 0;
  93. char slLän = getSchlüssel( &sl );
  94. senden->setSendeSchlüssel( sl, slLän );
  95. senden->setEmpfangSchlüssel( sl, slLän );
  96. delete[] sl;
  97. senden->sendeVerschlüsselt( "\6\5", 2 );
  98. char byte = 0;
  99. senden->getNachrichtVerschlüsselt( &byte, 1 );
  100. if( byte == 2 )
  101. {
  102. unsigned char lsIp[ 4 ];
  103. senden->getNachrichtVerschlüsselt( (char *)lsIp, 4 );
  104. unsigned short lsPort = 0;
  105. senden->getNachrichtVerschlüsselt( (char*)&lsPort, 2 );
  106. senden->sendeVerschlüsselt( "\3", 1 );
  107. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  108. senden->trenne();
  109. Text *lsIpT = new Text( "" );
  110. lsIpT->anhängen( (int)lsIp[ 0 ] );
  111. lsIpT->anhängen( "." );
  112. lsIpT->anhängen( (int)lsIp[ 1 ] );
  113. lsIpT->anhängen( "." );
  114. lsIpT->anhängen( (int)lsIp[ 2 ] );
  115. lsIpT->anhängen( "." );
  116. lsIpT->anhängen( (int)lsIp[ 3 ] );
  117. unsigned char schlüssel[ 20 ] = { 79, 20, 190, 133, 10, 175, 51, 96, 62, 1, 180, 194, 126, 50, 211, 154, 105, 227, 22, 101 };
  118. senden->setSendeSchlüssel( (char*)schlüssel, 20 );
  119. senden->setEmpfangSchlüssel( (char*)schlüssel, 20 );
  120. senden->verbinde( lsPort, lsIpT->getText() );
  121. lsIpT = lsIpT->release();
  122. senden->sendeVerschlüsselt( "\3", 1 );
  123. if( !senden->hatNachricht( 5000 ) )
  124. MessageBox( 0, "Der Server antwortet nicht.", "Fehler", MB_ICONERROR );
  125. else
  126. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  127. senden->trenne();
  128. }
  129. if( byte == 3 )
  130. {
  131. senden->getNachrichtVerschlüsselt( &byte, 1 );
  132. char *f = new char[ byte + 1 ];
  133. f[ byte ] = 0;
  134. senden->getNachrichtVerschlüsselt( f, byte );
  135. fehler->setText( f );
  136. delete[]f;
  137. senden->sendeVerschlüsselt( "\3", 1 );
  138. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  139. senden->trenne();
  140. senden = senden->release();
  141. UNLOCK( &cs );
  142. return 0;
  143. }
  144. }
  145. unsigned char schlüssel[ 20 ] = { 79, 20, 190, 133, 10, 175, 51, 96, 62, 1, 180, 194, 126, 50, 211, 154, 105, 227, 22, 101 };
  146. senden->setSendeSchlüssel( (char*)schlüssel, 20 );
  147. senden->setEmpfangSchlüssel( (char*)schlüssel, 20 );
  148. if( senden->verbinde( senden->getServerPort(), senden->getServerIp() ) )
  149. {
  150. if( senden->sendeVerschlüsselt( "\1", 1 ) )
  151. {
  152. senden->sendeVerschlüsselt( (char*)&klientId, 4 );
  153. char ret = 0;
  154. senden->getNachrichtVerschlüsselt( &ret, 1 );
  155. if( ret != 1 )
  156. {
  157. char byte = 0;
  158. senden->getNachrichtVerschlüsselt( &byte, 1 );
  159. char *f = new char[ byte + 1 ];
  160. f[ byte ] = 0;
  161. senden->getNachrichtVerschlüsselt( f, byte );
  162. fehler->setText( f );
  163. delete[]f;
  164. senden->sendeVerschlüsselt( "\3", 1 );
  165. char serverReturn = 0;
  166. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  167. senden->trenne();
  168. UNLOCK( &cs );
  169. return 0;
  170. }
  171. char *sl = 0;
  172. char slLän = getSchlüssel( &sl );
  173. senden->setSendeSchlüssel( sl, slLän );
  174. senden->setEmpfangSchlüssel( sl, slLän );
  175. delete[] sl;
  176. if( !empfangen )
  177. empfangen = new Klient();
  178. unsigned char schlüssel[ 20 ] = { 79, 20, 190, 133, 10, 175, 51, 96, 62, 1, 180, 194, 126, 50, 211, 154, 105, 227, 22, 101 };
  179. empfangen->setSendeSchlüssel( (char*)schlüssel, 20 );
  180. empfangen->setEmpfangSchlüssel( (char*)schlüssel, 20 );
  181. if( empfangen->verbinde( senden->getServerPort(), senden->getServerIp() ) )
  182. {
  183. start();
  184. verbunden = 1;
  185. UNLOCK( &cs );
  186. return 1;
  187. }
  188. else
  189. {
  190. fehler->setText( "Der dir zugewiesene Chat Server kann dir keine Nachrichten senden." );
  191. UNLOCK( &cs );
  192. return 1;
  193. }
  194. }
  195. else
  196. {
  197. fehler->setText( "Der dir zugewiesene Chat Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
  198. senden = senden->release();
  199. }
  200. }
  201. else
  202. {
  203. fehler->setText( "Der dir zugewiesene Chat Server antwortet nicht. Bitte versuche es Später erneut." );
  204. senden = senden->release();
  205. }
  206. UNLOCK( &cs );
  207. return 0;
  208. }
  209. bool ChatKlient::chatNachricht( int zuAccount, const char *nachricht ) // sendet eine Nachricht zu einem Account
  210. {
  211. if( !verbunden )
  212. verbinde();
  213. if( !verbunden )
  214. return 0;
  215. char län = textLänge( nachricht );
  216. if( !län )
  217. return 1;
  218. LOCK( &cs );
  219. senden->sendeVerschlüsselt( "\6", 1 );
  220. char serverReturn = 0;
  221. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  222. if( serverReturn )
  223. {
  224. senden->sendeVerschlüsselt( (char*)&zuAccount, 4 );
  225. senden->sendeVerschlüsselt( &län, 1 );
  226. senden->sendeVerschlüsselt( nachricht, län );
  227. }
  228. else
  229. {
  230. UNLOCK( &cs );
  231. return 0;
  232. }
  233. UNLOCK( &cs );
  234. return 1;
  235. }
  236. bool ChatKlient::accountNameÄndern( const char *name ) // ändert den Account Namen
  237. {
  238. if( !verbunden )
  239. verbinde();
  240. if( !verbunden )
  241. return 0;
  242. char län = textLänge( name );
  243. if( !län )
  244. return 1;
  245. LOCK( &cs );
  246. senden->sendeVerschlüsselt( "\x8", 1 );
  247. char serverReturn = 0;
  248. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  249. if( serverReturn )
  250. {
  251. senden->sendeVerschlüsselt( &län, 1 );
  252. senden->sendeVerschlüsselt( name, län );
  253. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  254. UNLOCK( &cs );
  255. return serverReturn == 1;
  256. }
  257. else
  258. {
  259. UNLOCK( &cs );
  260. return 0;
  261. }
  262. }
  263. bool ChatKlient::freundschaftBeenden( int accountId ) // beendet die Freundschaft mit einem Account
  264. {
  265. if( !verbunden )
  266. verbinde();
  267. if( !verbunden )
  268. return 0;
  269. LOCK( &cs );
  270. senden->sendeVerschlüsselt( "\x9", 1 );
  271. char serverReturn = 0;
  272. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  273. if( serverReturn )
  274. {
  275. senden->sendeVerschlüsselt( (char*)&accountId, 4 );
  276. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  277. UNLOCK( &cs );
  278. return serverReturn == 1;
  279. }
  280. else
  281. {
  282. UNLOCK( &cs );
  283. return 0;
  284. }
  285. }
  286. bool ChatKlient::freundesAnfrage( int accountId ) // sendet eine Freundesanfragezu einem Account
  287. {
  288. if( !verbunden )
  289. verbinde();
  290. if( !verbunden )
  291. return 0;
  292. LOCK( &cs );
  293. senden->sendeVerschlüsselt( "\xA", 1 );
  294. char serverReturn = 0;
  295. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  296. if( serverReturn )
  297. {
  298. senden->sendeVerschlüsselt( (char*)&accountId, 4 );
  299. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  300. UNLOCK( &cs );
  301. return serverReturn == 1;
  302. }
  303. else
  304. {
  305. UNLOCK( &cs );
  306. return 0;
  307. }
  308. }
  309. bool ChatKlient::freundesAnfrageBeantworten( int accountId, bool ja ) // beantwortet eine Freundesanfrage
  310. {
  311. if( !verbunden )
  312. verbinde();
  313. if( !verbunden )
  314. return 0;
  315. LOCK( &cs );
  316. senden->sendeVerschlüsselt( "\xB", 1 );
  317. char serverReturn = 0;
  318. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  319. if( serverReturn )
  320. {
  321. senden->sendeVerschlüsselt( (char*)&accountId, 4 );
  322. char ok = (char)ja;
  323. senden->sendeVerschlüsselt( &ok, 1 );
  324. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  325. UNLOCK( &cs );
  326. return serverReturn == 1;
  327. }
  328. else
  329. {
  330. UNLOCK( &cs );
  331. return 0;
  332. }
  333. }
  334. int ChatKlient::chatroomErstellen( const char *name ) // erstellt ein chatroom
  335. {
  336. if( !verbunden )
  337. verbinde();
  338. if( !verbunden )
  339. return 0;
  340. char län = textLänge( name );
  341. if( !län )
  342. return 0;
  343. LOCK( &cs );
  344. senden->sendeVerschlüsselt( "\xC", 1 );
  345. char serverReturn = 0;
  346. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  347. if( serverReturn )
  348. {
  349. senden->sendeVerschlüsselt( &län, 1 );
  350. senden->sendeVerschlüsselt( name, län );
  351. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  352. if( !serverReturn )
  353. {
  354. UNLOCK( &cs );
  355. return 0;
  356. }
  357. int ret = 0;
  358. senden->getNachrichtVerschlüsselt( (char*)&ret, 4 );
  359. UNLOCK( &cs );
  360. return ret;
  361. }
  362. else
  363. {
  364. UNLOCK( &cs );
  365. return 0;
  366. }
  367. }
  368. bool ChatKlient::chatroomEinladung( int accountId, int chatroomId ) // verschickt eine Einladung zu einem Chatroom
  369. {
  370. if( !verbunden )
  371. verbinde();
  372. if( !verbunden )
  373. return 0;
  374. LOCK( &cs );
  375. senden->sendeVerschlüsselt( "\xD", 1 );
  376. char serverReturn = 0;
  377. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  378. if( serverReturn )
  379. {
  380. senden->sendeVerschlüsselt( (char*)&accountId, 4 );
  381. senden->sendeVerschlüsselt( (char*)&chatroomId, 4 );
  382. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  383. UNLOCK( &cs );
  384. return serverReturn == 1;
  385. }
  386. else
  387. {
  388. UNLOCK( &cs );
  389. return 0;
  390. }
  391. }
  392. bool ChatKlient::chatroomEinladungAblehnen( int accountId, int chatroomId ) // Einladung zum Chatroom wird abgelehnt
  393. {
  394. if( !verbunden )
  395. verbinde();
  396. if( !verbunden )
  397. return 0;
  398. LOCK( &cs );
  399. senden->sendeVerschlüsselt( "\xE", 1 );
  400. char serverReturn = 0;
  401. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  402. if( serverReturn )
  403. {
  404. senden->sendeVerschlüsselt( (char*)&accountId, 4 );
  405. senden->sendeVerschlüsselt( (char*)&chatroomId, 4 );
  406. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  407. UNLOCK( &cs );
  408. return serverReturn == 1;
  409. }
  410. else
  411. {
  412. UNLOCK( &cs );
  413. return 0;
  414. }
  415. }
  416. bool ChatKlient::chatroomBetreten( int chatroomId ) // betritt ein chatroom
  417. {
  418. if( !verbunden )
  419. verbinde();
  420. if( !verbunden )
  421. return 0;
  422. LOCK( &cs );
  423. senden->sendeVerschlüsselt( "\xF", 1 );
  424. char serverReturn = 0;
  425. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  426. if( serverReturn )
  427. {
  428. senden->sendeVerschlüsselt( (char*)&chatroomId, 4 );
  429. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  430. UNLOCK( &cs );
  431. return serverReturn == 1;
  432. }
  433. else
  434. {
  435. UNLOCK( &cs );
  436. return 0;
  437. }
  438. }
  439. bool ChatKlient::chatroomNachricht( int chatroomId, const char *nachricht ) // chatroom Nachricht senden
  440. {
  441. if( !verbunden )
  442. verbinde();
  443. if( !verbunden )
  444. return 0;
  445. char län = textLänge( nachricht );
  446. if( !län )
  447. return 0;
  448. LOCK( &cs );
  449. senden->sendeVerschlüsselt( "\x10", 1 );
  450. char serverReturn = 0;
  451. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  452. if( serverReturn )
  453. {
  454. senden->sendeVerschlüsselt( (char*)&chatroomId, 4 );
  455. senden->sendeVerschlüsselt( &län, 1 );
  456. senden->sendeVerschlüsselt( nachricht, län );
  457. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  458. UNLOCK( &cs );
  459. return serverReturn == 1;
  460. }
  461. else
  462. {
  463. UNLOCK( &cs );
  464. return 0;
  465. }
  466. }
  467. bool ChatKlient::chatroomVerlassen( int chatroomId ) // verlässt chatroom
  468. {
  469. if( !verbunden )
  470. verbinde();
  471. if( !verbunden )
  472. return 0;
  473. LOCK( &cs );
  474. senden->sendeVerschlüsselt( "\x11", 1 );
  475. char serverReturn = 0;
  476. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  477. if( serverReturn )
  478. {
  479. senden->sendeVerschlüsselt( (char*)&chatroomId, 4 );
  480. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  481. UNLOCK( &cs );
  482. return serverReturn == 1;
  483. }
  484. else
  485. {
  486. UNLOCK( &cs );
  487. return 0;
  488. }
  489. }
  490. bool ChatKlient::chatroomKick( int chatroomId, int accountId ) // kickt Spieler aus Chatroom( nur wenn admin )
  491. {
  492. if( !verbunden )
  493. verbinde();
  494. if( !verbunden )
  495. return 0;
  496. LOCK( &cs );
  497. senden->sendeVerschlüsselt( "\x12", 1 );
  498. char serverReturn = 0;
  499. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  500. if( serverReturn )
  501. {
  502. senden->sendeVerschlüsselt( (char*)&chatroomId, 4 );
  503. senden->sendeVerschlüsselt( (char*)&accountId, 4 );
  504. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  505. UNLOCK( &cs );
  506. return serverReturn == 1;
  507. }
  508. else
  509. {
  510. UNLOCK( &cs );
  511. return 0;
  512. }
  513. }
  514. bool ChatKlient::freundesListeAnfragen() // fragt nach allen freunden
  515. {
  516. if( !verbunden )
  517. verbinde();
  518. if( !verbunden )
  519. return 0;
  520. char serverReturn = 0;
  521. LOCK( &cs );
  522. senden->sendeVerschlüsselt( "\x13", 1 );
  523. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  524. UNLOCK( &cs );
  525. return serverReturn == 1;
  526. }
  527. bool ChatKlient::chatNachrichtAnfrage() // fragt nach chat nachrichten in abwesenheit
  528. {
  529. if( !verbunden )
  530. verbinde();
  531. if( !verbunden )
  532. return 0;
  533. char serverReturn = 0;
  534. LOCK( &cs );
  535. senden->sendeVerschlüsselt( "\x14", 1 );
  536. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  537. UNLOCK( &cs );
  538. return serverReturn == 1;
  539. }
  540. bool ChatKlient::keepAlive() // Erhält die Verbindung aufrecht
  541. {
  542. if( !verbunden )
  543. return 0;
  544. char res = 0;
  545. if( !TryEnterCriticalSection( &cs ) )
  546. return 1;
  547. senden->sendeVerschlüsselt( "\x15", 1 );
  548. senden->getNachrichtVerschlüsselt( &res, 1 );
  549. UNLOCK( &cs );
  550. if( res != 1 )
  551. trenne();
  552. return res == 1;
  553. }
  554. bool ChatKlient::trenne() // trennt sich von dem Chat Server
  555. {
  556. if( !verbunden )
  557. return 1;
  558. LOCK( &cs );
  559. senden->sendeVerschlüsselt( "\3", 1 );
  560. char serverReturn = 0;
  561. senden->getNachrichtVerschlüsselt( &serverReturn, 1 );
  562. senden->trenne();
  563. verbunden = 0;
  564. warteAufThread( 5000 );
  565. ende();
  566. if( empfangen )
  567. empfangen->trenne();
  568. UNLOCK( &cs );
  569. return 1;
  570. }
  571. void ChatKlient::thread() // empfangen von Nachrichten
  572. {
  573. if( !verbunden || !empfangen || !senden )
  574. return;
  575. empfangen->sendeVerschlüsselt( "\1", 1 );
  576. empfangen->sendeVerschlüsselt( (char*)&klientId, 4 );
  577. char res = 0;
  578. empfangen->getNachrichtVerschlüsselt( &res, 1 );
  579. if( res == 3 )
  580. {
  581. char län = 0;
  582. senden->getNachrichtVerschlüsselt( &län, 1 );
  583. char *nachricht = new char[ län + 1 ];
  584. nachricht[ län ] = 0;
  585. senden->getNachrichtVerschlüsselt( nachricht, län );
  586. fehler->setText( nachricht );
  587. delete[]nachricht;
  588. }
  589. if( res != 1 )
  590. {
  591. WMessageBox( 0, new Text( "Fehler" ), new Text( "Server akzeptiert den Klient nicht" ), MB_ICONERROR );
  592. return;
  593. }
  594. char *sl = 0;
  595. char slLän = getSchlüssel( &sl );
  596. empfangen->setSendeSchlüssel( sl, slLän );
  597. empfangen->setEmpfangSchlüssel( sl, slLän );
  598. delete[] sl;
  599. char befehl = 0;
  600. while( verbunden )
  601. {
  602. if( !empfangen->getNachrichtVerschlüsselt( &befehl, 1 ) )
  603. return;
  604. switch( befehl )
  605. {
  606. case 0: // verbindung getrennt
  607. return;
  608. break;
  609. case 1: // kick
  610. if( 1 )
  611. {
  612. loginKlient->trenne();
  613. infoKlient->trenne();
  614. chatKlient->trenne();
  615. aktion = 4;
  616. }
  617. break;
  618. case 2: // Server Ausgelastet
  619. aktion = 1;
  620. if( nachLogin && nachLogin->zNachrichtenListe() )
  621. {
  622. hauptScreen->lock();
  623. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Server Ausgelastet" ),
  624. new Text( "Der Chat Server ist derzeit ausgelastet. Es wird versucht auf einen anderen Server auszuweichen." ),
  625. new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  626. hauptScreen->unlock();
  627. }
  628. break;
  629. case 3: // Fehler
  630. if( 1 )
  631. {
  632. char länge = 0;
  633. empfangen->getNachrichtVerschlüsselt( &länge, 1 );
  634. char *txt = new char[ länge + 1 ];
  635. txt[ länge ] = 0;
  636. empfangen->getNachrichtVerschlüsselt( txt, länge );
  637. hauptScreen->lock();
  638. if( nachLogin && nachLogin->zNachrichtenListe() )
  639. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( txt ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  640. hauptScreen->unlock();
  641. delete[]txt;
  642. }
  643. break;
  644. case 4: // Chat Nachricht
  645. if( 1 )
  646. {
  647. int vonAccount = 0;
  648. empfangen->getNachrichtVerschlüsselt( (char*)&vonAccount, 4 );
  649. char länge = 0;
  650. empfangen->getNachrichtVerschlüsselt( &länge, 1 );
  651. char *nachricht = new char[ länge + 1 ];
  652. nachricht[ länge ] = 0;
  653. empfangen->getNachrichtVerschlüsselt( nachricht, länge );
  654. if( nachLogin && nachLogin->zChatLeiste() )
  655. {
  656. hauptScreen->lock();
  657. nachLogin->zChatLeiste()->chatNachricht( vonAccount, nachricht );
  658. hauptScreen->unlock();
  659. }
  660. delete[]nachricht;
  661. }
  662. break;
  663. case 5: // Spiel Einladung
  664. if( 1 )
  665. {
  666. int vonAccount = 0;
  667. empfangen->getNachrichtVerschlüsselt( (char*)&vonAccount, 4 );
  668. int gruppeId = 0;
  669. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  670. if( nachLogin && nachLogin->zNachrichtenListe() )
  671. {
  672. int karteId = infoKlient->getGruppenKarteId( gruppeId );
  673. int spielId = infoKlient->getSpielId( karteId );
  674. Text *spiel = infoKlient->getSpielName( spielId );
  675. Text *karte = infoKlient->getKarteName( karteId );
  676. Text *name = infoKlient->getSpielerName( vonAccount );
  677. Text *titel = new Text( "Spiel Einladung" );
  678. Text *nachricht = new Text( "Von: " );
  679. nachricht->anhängen( name );
  680. nachricht->anhängen( "\nSpiel: " );
  681. nachricht->anhängen( spiel );
  682. nachricht->anhängen( "\nKarte: " );
  683. nachricht->anhängen( karte );
  684. SpielEinladungParam *param = new SpielEinladungParam();
  685. param->gruppeId = gruppeId;
  686. param->vonAccount = vonAccount;
  687. hauptScreen->lock();
  688. nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ), NachrichtType::spielEinladung, param );
  689. hauptScreen->unlock();
  690. }
  691. }
  692. break;
  693. case 6: // Account Status ändert sich
  694. if( 1 )
  695. {
  696. int accountId = 0;
  697. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  698. char län = 0;
  699. empfangen->getNachrichtVerschlüsselt( &län, 1 );
  700. char *status = new char[ län + 1 ];
  701. status[ län ] = 0;
  702. empfangen->getNachrichtVerschlüsselt( status, län );
  703. hauptScreen->lock();
  704. if( nachLogin && nachLogin->zNachrichtenListe() )
  705. nachLogin->zFreundesListe()->setStatus( accountId, status );
  706. hauptScreen->unlock();
  707. delete[]status;
  708. }
  709. break;
  710. case 7: // Account Name ändert sich
  711. if( 1 )
  712. {
  713. int accountId = 0;
  714. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  715. char län = 0;
  716. empfangen->getNachrichtVerschlüsselt( &län, 1 );
  717. char *name = new char[ län + 1 ];
  718. name[ län ] = 0;
  719. empfangen->getNachrichtVerschlüsselt( name, län );
  720. hauptScreen->lock();
  721. if( nachLogin && nachLogin->zNachrichtenListe() )
  722. nachLogin->zFreundesListe()->setName( accountId, name );
  723. hauptScreen->unlock();
  724. delete[]name;
  725. }
  726. break;
  727. case 8: // kein Freund mehr
  728. if( 1 )
  729. {
  730. int accountId = 0;
  731. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  732. hauptScreen->lock();
  733. if( nachLogin && nachLogin->zNachrichtenListe() )
  734. nachLogin->zFreundesListe()->removeMember( accountId );
  735. hauptScreen->unlock();
  736. }
  737. break;
  738. case 9: // Freundesanfrage
  739. if( 1 )
  740. {
  741. int vonAccount = 0;
  742. empfangen->getNachrichtVerschlüsselt( (char*)&vonAccount, 4 );
  743. if( nachLogin->zNachrichtenListe() )
  744. {
  745. Text *titel = new Text( "Freundeseinladung" );
  746. Text *nachricht = new Text( "" );
  747. nachricht->anhängen( infoKlient->getSpielerName( vonAccount ) );
  748. nachricht->anhängen( " möchte sich mit dir befreunden." );
  749. int *accountId = new int;
  750. *accountId = vonAccount;
  751. hauptScreen->lock();
  752. if( nachLogin && nachLogin->zNachrichtenListe() )
  753. {
  754. nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ),
  755. NachrichtType::freundEinladung, (void*)accountId );
  756. }
  757. hauptScreen->unlock();
  758. }
  759. }
  760. break;
  761. case 0xA: // Neuer Freund
  762. if( 1 )
  763. {
  764. int accountId = 0;
  765. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  766. hauptScreen->lock();
  767. if( nachLogin && nachLogin->zNachrichtenListe() )
  768. nachLogin->zFreundesListe()->addMember( accountId );
  769. hauptScreen->unlock();
  770. }
  771. break;
  772. case 0xB: // Freundesanfrage abgelehnt
  773. if( 1 )
  774. {
  775. int vonAccount = 0;
  776. empfangen->getNachrichtVerschlüsselt( (char*)&vonAccount, 4 );
  777. if( nachLogin && nachLogin->zNachrichtenListe() )
  778. {
  779. Text *titel = new Text( "Freundeseinladung Abgelehnt" );
  780. Text *nachricht = new Text( "" );
  781. nachricht->anhängen( infoKlient->getSpielerName( vonAccount ) );
  782. nachricht->anhängen( " hat deine Freundesanfrage abgelehnt." );
  783. hauptScreen->lock();
  784. nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  785. hauptScreen->unlock();
  786. }
  787. }
  788. break;
  789. case 0xC: // Einladung zum Chatroom
  790. if( 1 )
  791. {
  792. int vonAccount = 0;
  793. empfangen->getNachrichtVerschlüsselt( (char*)&vonAccount, 4 );
  794. int chatroomId = 0;
  795. empfangen->getNachrichtVerschlüsselt( (char*)&chatroomId, 4 );
  796. if( nachLogin && nachLogin->zNachrichtenListe() )
  797. {
  798. Text *titel = new Text( "Chatroom Einladung" );
  799. Text *nachricht = new Text( "" );
  800. nachricht->anhängen( infoKlient->getSpielerName( vonAccount ) );
  801. nachricht->anhängen( " lädt dich dazu ein das Chatroom '" );
  802. nachricht->anhängen( infoKlient->getChatroomName( chatroomId ) );
  803. nachricht->anhängen( "' zu betreten." );
  804. ChatroomEinladungParam *param = new ChatroomEinladungParam();
  805. param->chatroomId = chatroomId;
  806. param->vonAccount = vonAccount;
  807. nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "betreten" ), new Text( "ablehnen" ), NachrichtType::chatroomEinladung, param );
  808. }
  809. }
  810. break;
  811. case 0xD: // Einladung zum Chatroom abgelehnt
  812. if( 1 )
  813. {
  814. int accountId = 0;
  815. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  816. int chatroomId = 0;
  817. empfangen->getNachrichtVerschlüsselt( (char*)&chatroomId, 4 );
  818. if( nachLogin && nachLogin->zNachrichtenListe() )
  819. {
  820. Text *titel = new Text( "Chatroom Einladung Abgelehnt" );
  821. Text *nachricht = new Text( "" );
  822. nachricht->anhängen( infoKlient->getSpielerName( accountId ) );
  823. nachricht->anhängen( " möchte dem Chatroom '" );
  824. nachricht->anhängen( infoKlient->getChatroomName( chatroomId ) );
  825. nachricht->anhängen( "' nicht beitreten." );
  826. hauptScreen->lock();
  827. nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  828. hauptScreen->unlock();
  829. }
  830. }
  831. break;
  832. case 0xE: // Spieler betritt Chatroom
  833. if( 1 )
  834. {
  835. int chatroomId = 0;
  836. empfangen->getNachrichtVerschlüsselt( (char*)&chatroomId, 4 );
  837. int accountId = 0;
  838. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  839. hauptScreen->lock();
  840. if( nachLogin && nachLogin->zChatLeiste() )
  841. nachLogin->zChatLeiste()->addSpieler( chatroomId, accountId );
  842. hauptScreen->unlock();
  843. }
  844. break;
  845. case 0xF: // Chatroom Nachricht
  846. if( 1 )
  847. {
  848. int chatroomId = 0;
  849. empfangen->getNachrichtVerschlüsselt( (char*)&chatroomId, 4 );
  850. int vonAccount = 0;
  851. empfangen->getNachrichtVerschlüsselt( (char*)&vonAccount, 4 );
  852. char län = 0;
  853. empfangen->getNachrichtVerschlüsselt( &län, 1 );
  854. char *nachricht = new char[ län + 1 ];
  855. nachricht[ län ] = 0;
  856. if( län )
  857. {
  858. empfangen->getNachrichtVerschlüsselt( nachricht, län );
  859. hauptScreen->lock();
  860. if( nachLogin && nachLogin->zChatLeiste() )
  861. nachLogin->zChatLeiste()->chatroomNachricht( chatroomId, vonAccount, nachricht );
  862. hauptScreen->unlock();
  863. }
  864. delete[]nachricht;
  865. }
  866. break;
  867. case 0x10: // Spieler verlässt Chatroom
  868. if( 1 )
  869. {
  870. int chatroomId = 0;
  871. empfangen->getNachrichtVerschlüsselt( (char*)&chatroomId, 4 );
  872. int accountId = 0;
  873. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  874. hauptScreen->lock();
  875. if( nachLogin && nachLogin->zChatLeiste() )
  876. nachLogin->zChatLeiste()->removeSpieler( chatroomId, accountId );
  877. hauptScreen->unlock();
  878. }
  879. break;
  880. case 0x11: // Freunde
  881. if( 1 )
  882. {
  883. char freundeAnzahl;
  884. empfangen->getNachrichtVerschlüsselt( &freundeAnzahl, 1 );
  885. for( int i = 0; i < freundeAnzahl; i++ )
  886. {
  887. int accountId = 0;
  888. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  889. if( nachLogin )
  890. {
  891. while( !nachLogin->zFreundesListe() )
  892. {
  893. Sleep( 50 );
  894. }
  895. hauptScreen->lock();
  896. nachLogin->zFreundesListe()->addMember( accountId );
  897. hauptScreen->unlock();
  898. }
  899. }
  900. }
  901. break;
  902. case 0x12: // Spieler im Chatroom
  903. if( 1 )
  904. {
  905. int chatroomId = 0;
  906. empfangen->getNachrichtVerschlüsselt( (char*)&chatroomId, 4 );
  907. char anzahl = 0;
  908. empfangen->getNachrichtVerschlüsselt( &anzahl, 1 );
  909. for( char i = 0; i < anzahl; i++ )
  910. {
  911. int accountId = 0;
  912. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  913. hauptScreen->lock();
  914. if( nachLogin && nachLogin->zChatLeiste() )
  915. nachLogin->zChatLeiste()->addSpieler( chatroomId, accountId );
  916. hauptScreen->unlock();
  917. }
  918. }
  919. break;
  920. case 0x13: // Freund online
  921. if( 1 )
  922. {
  923. int accountId = 0;
  924. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  925. hauptScreen->lock();
  926. if( nachLogin && nachLogin->zFreundesListe() )
  927. nachLogin->zFreundesListe()->setOnline( accountId, 1 );
  928. hauptScreen->unlock();
  929. }
  930. break;
  931. case 0x14: // Freund offline
  932. if( 1 )
  933. {
  934. int accountId = 0;
  935. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  936. hauptScreen->lock();
  937. if( nachLogin && nachLogin->zFreundesListe() )
  938. nachLogin->zFreundesListe()->setOnline( accountId, 0 );
  939. hauptScreen->unlock();
  940. }
  941. break;
  942. case 0x15: // Chatroom Admin
  943. if( 1 )
  944. {
  945. int chatroomId = 0;
  946. empfangen->getNachrichtVerschlüsselt( (char*)&chatroomId, 4 );
  947. hauptScreen->lock();
  948. if( nachLogin && nachLogin->zChatLeiste() )
  949. nachLogin->zChatLeiste()->setChatroomAdmin( chatroomId );
  950. hauptScreen->unlock();
  951. }
  952. break;
  953. case 0x16: // Chatroom Kick
  954. if( 1 )
  955. {
  956. int chatroomId = 0;
  957. empfangen->getNachrichtVerschlüsselt( (char*)&chatroomId, 4 );
  958. hauptScreen->lock();
  959. if( nachLogin && nachLogin->zChatLeiste() )
  960. nachLogin->zChatLeiste()->removeChat( 0, chatroomId );
  961. hauptScreen->unlock();
  962. }
  963. break;
  964. case 0x17: // Spieler betritt Gruppe
  965. if( 1 )
  966. {
  967. int accountId = 0;
  968. int gruppeId = 0;
  969. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  970. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  971. if( nachLogin && nachLogin->zSpielenFenster() )
  972. nachLogin->zSpielenFenster()->spielerBetrittGruppe( gruppeId, accountId );
  973. }
  974. break;
  975. case 0x18: // Spieler verlässt Gruppe
  976. if( 1 )
  977. {
  978. int accountId = 0;
  979. int gruppeId = 0;
  980. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  981. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  982. if( nachLogin && nachLogin->zSpielenFenster() )
  983. nachLogin->zSpielenFenster()->spielerVerlässtGruppe( gruppeId, accountId );
  984. }
  985. break;
  986. case 0x19: // gruppe Nachricht
  987. if( 1 )
  988. {
  989. int gruppeId = 0;
  990. char län = 0;
  991. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  992. empfangen->getNachrichtVerschlüsselt( &län, 1 );
  993. if( län )
  994. {
  995. char *nachricht = new char[ län + 1 ];
  996. nachricht[ län ] = 0;
  997. empfangen->getNachrichtVerschlüsselt( nachricht, län );
  998. if( nachLogin && nachLogin->zSpielenFenster() )
  999. nachLogin->zSpielenFenster()->gruppeNachricht( gruppeId, nachricht );
  1000. delete[] nachricht;
  1001. }
  1002. }
  1003. break;
  1004. case 0x1A: // gruppe Angemeldet
  1005. if( 1 )
  1006. {
  1007. int gruppeId = 0;
  1008. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  1009. if( nachLogin && nachLogin->zSpielenFenster() )
  1010. nachLogin->zSpielenFenster()->gruppeAnmelden( gruppeId );
  1011. }
  1012. break;
  1013. case 0x1B: // gruppe Abgemeldet
  1014. if( 1 )
  1015. {
  1016. int gruppeId = 0;
  1017. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  1018. if( nachLogin && nachLogin->zSpielenFenster() )
  1019. nachLogin->zSpielenFenster()->gruppeAbmelden( gruppeId );
  1020. }
  1021. break;
  1022. case 0x1C: // gruppe Spiel starten
  1023. if( 1 )
  1024. {
  1025. int gruppeId = 0;
  1026. char starten = 0;
  1027. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  1028. empfangen->getNachrichtVerschlüsselt( &starten, 1 );
  1029. if( nachLogin && nachLogin->zSpielenFenster() )
  1030. nachLogin->zSpielenFenster()->setGruppeSpielStarten( gruppeId, starten == 1 );
  1031. }
  1032. break;
  1033. case 0x1D: // kick aus Gruppe
  1034. if( 1 )
  1035. {
  1036. int gruppeId = 0;
  1037. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  1038. if( nachLogin && nachLogin->zSpielenFenster() )
  1039. nachLogin->zSpielenFenster()->kickAusGruppe( gruppeId );
  1040. }
  1041. break;
  1042. case 0x1E: // gruppe Admin
  1043. if( 1 )
  1044. {
  1045. int gruppeId = 0;
  1046. int adminId = 0;
  1047. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  1048. empfangen->getNachrichtVerschlüsselt( (char*)&adminId, 4 );
  1049. if( nachLogin && nachLogin->zSpielenFenster() )
  1050. nachLogin->zSpielenFenster()->setGruppeAdmin( gruppeId, adminId );
  1051. }
  1052. break;
  1053. case 0x1F: // gruppe Einladung abgelehnt
  1054. if( 1 )
  1055. {
  1056. int gruppeId;
  1057. int accountId;
  1058. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  1059. empfangen->getNachrichtVerschlüsselt( (char*)&accountId, 4 );
  1060. if( nachLogin && nachLogin->zSpielenFenster() )
  1061. nachLogin->zSpielenFenster()->gruppeEinadungAbgelehnt( gruppeId, accountId );
  1062. }
  1063. break;
  1064. case 0x20: // SpielServer Verbindungs Anfrage
  1065. if( 1 )
  1066. {
  1067. unsigned short port;
  1068. unsigned char *ip = new unsigned char[ 4 ];
  1069. empfangen->getNachrichtVerschlüsselt( (char*)&port, 2 );
  1070. empfangen->getNachrichtVerschlüsselt( (char*)ip, 4 );
  1071. Text *ipT = new Text( "" );
  1072. ipT->anhängen( (int)ip[ 0 ] );
  1073. ipT->anhängen( "." );
  1074. ipT->anhängen( (int)ip[ 1 ] );
  1075. ipT->anhängen( "." );
  1076. ipT->anhängen( (int)ip[ 2 ] );
  1077. ipT->anhängen( "." );
  1078. ipT->anhängen( (int)ip[ 3 ] );
  1079. spielKlient->verbinde( port, ipT->getText() );
  1080. delete[] ip;
  1081. ipT->release();
  1082. }
  1083. break;
  1084. case 0x21: // Gruppe Einladung abgebrochen
  1085. if( 1 )
  1086. {
  1087. int gruppeId = 0;
  1088. int account = 0;
  1089. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  1090. empfangen->getNachrichtVerschlüsselt( (char*)&account, 4 );
  1091. if( nachLogin && nachLogin->zSpielenFenster() )
  1092. nachLogin->zSpielenFenster()->gruppeEinladungAbgebrochen( gruppeId, account );
  1093. }
  1094. break;
  1095. case 0x22: // Gruppe Einladung hinzufügen
  1096. if( 1 )
  1097. {
  1098. int gruppeId = 0;
  1099. int account = 0;
  1100. empfangen->getNachrichtVerschlüsselt( (char*)&gruppeId, 4 );
  1101. empfangen->getNachrichtVerschlüsselt( (char*)&account, 4 );
  1102. if( nachLogin && nachLogin->zSpielenFenster() )
  1103. nachLogin->zSpielenFenster()->gruppeEinladungNeu( gruppeId, account );
  1104. }
  1105. break;
  1106. case 0x23: // ping
  1107. empfangen->sendeVerschlüsselt( "\1", 1 );
  1108. break;
  1109. default: // Unbekannte Servernachricht
  1110. if( nachLogin && nachLogin->zNachrichtenListe() )
  1111. {
  1112. hauptScreen->lock();
  1113. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
  1114. new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
  1115. new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  1116. hauptScreen->unlock();
  1117. }
  1118. break;
  1119. }
  1120. }
  1121. }
  1122. // constant
  1123. bool ChatKlient::istVerbunden() const // prüft, ob mit Chat Server verbunden
  1124. {
  1125. return verbunden;
  1126. }
  1127. char *ChatKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
  1128. {
  1129. return fehler->getText();
  1130. }
  1131. // Reference Counting
  1132. ChatKlient *ChatKlient::getThis()
  1133. {
  1134. ref++;
  1135. return this;
  1136. }
  1137. ChatKlient *ChatKlient::release()
  1138. {
  1139. ref--;
  1140. if( !ref )
  1141. delete this;
  1142. return 0;
  1143. }