AnmeldungClient.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  1. #include "AnmeldungClient.h"
  2. #include <Klient.h>
  3. #include "Keys.h"
  4. #include <Globals.h>
  5. using namespace KSGClient;
  6. // Inhalt der Anmeldung Klasse
  7. // Konstruktor
  8. AnmeldungClient::AnmeldungClient(int klientId, unsigned short port, const char* ip, const char* key, unsigned char keyLen)
  9. : ReferenceCounter()
  10. {
  11. this->ip = ip;
  12. this->port = port;
  13. cId = klientId;
  14. k = 0;
  15. this->key = new char[keyLen];
  16. memcpy(this->key, key, keyLen);
  17. this->keyLen = keyLen;
  18. }
  19. // Destruktor
  20. AnmeldungClient::~AnmeldungClient()
  21. {
  22. trenne(1);
  23. delete[] key;
  24. }
  25. // verbindet sich mit dem zugewiesenen Anmeldung Server
  26. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  27. bool AnmeldungClient::verbinde()
  28. {
  29. cs.lock();
  30. if (k)
  31. {
  32. cs.unlock();
  33. return 1;
  34. }
  35. k = new Network::Klient();
  36. int l = 0;
  37. char* key;
  38. Keys::getServerKey(&key, l, Keys::ANMELDUNG, Keys::SENDEN);
  39. k->setSendeKey(key, l);
  40. delete[] key;
  41. Keys::getServerKey(&key, l, Keys::ANMELDUNG, Keys::EMPFANGEN);
  42. k->setEmpfangKey(key, l);
  43. delete[] key;
  44. if (k->verbinde(port, ip))
  45. {
  46. if (k->sendeEncrypted("\1", 1))
  47. {
  48. k->sendeEncrypted((char*)&cId, 4);
  49. char serverReturn = 0;
  50. k->getNachrichtEncrypted(&serverReturn, 1);
  51. if (serverReturn == 3)
  52. {
  53. char byte = 0;
  54. k->getNachrichtEncrypted(&byte, 1);
  55. char* f = new char[byte + 1];
  56. f[byte] = 0;
  57. k->getNachrichtEncrypted(f, byte);
  58. err = "error while identifying client Anmeldung Server returned: ";
  59. err += f;
  60. delete[]f;
  61. trenne(0);
  62. cs.unlock();
  63. return 0;
  64. }
  65. k->setSendeKey(this->key, this->keyLen);
  66. k->setEmpfangKey(this->key, this->keyLen);
  67. }
  68. else
  69. {
  70. err = "network error while sending to Anmeldung Server";
  71. k = (Network::Klient*)k->release();
  72. cs.unlock();
  73. return 0;
  74. }
  75. }
  76. else
  77. {
  78. err = "network error while connecting to Anmeldung Server";
  79. k = (Network::Klient*)k->release();
  80. cs.unlock();
  81. return 0;
  82. }
  83. cs.unlock();
  84. return 1;
  85. }
  86. // erstellt eine gruppe
  87. // karteId: Die Id der Karte für die die Gruppe erstellt werden soll
  88. // Gibt bei Erfolg die Id der Gruppe zurück. Bei misserfolg wird 0 zurückgegeben
  89. int AnmeldungClient::gruppeErstellen(int karteId)
  90. {
  91. cs.lock();
  92. if (!k)
  93. {
  94. err = "Der Client ist nicht verbunden.";
  95. cs.unlock();
  96. return 0;
  97. }
  98. k->sendeEncrypted("\5", 1);
  99. char serverReturn = 0;
  100. k->getNachrichtEncrypted(&serverReturn, 1);
  101. if (serverReturn == 1)
  102. {
  103. k->sendeEncrypted((char*)&karteId, 4);
  104. k->getNachrichtEncrypted(&serverReturn, 1);
  105. if (serverReturn == 1)
  106. {
  107. int gruppeId = 0;
  108. k->getNachrichtEncrypted((char*)&gruppeId, 4);
  109. cs.unlock();
  110. return gruppeId;
  111. }
  112. }
  113. if (serverReturn == 3)
  114. {
  115. char län = 0;
  116. k->getNachrichtEncrypted(&län, 1);
  117. char* message = new char[län + 1];
  118. message[län] = 0;
  119. k->getNachrichtEncrypted(message, län);
  120. err = message;
  121. delete[] message;
  122. cs.unlock();
  123. return 0;
  124. }
  125. err = "Unbekannter Fehler";
  126. cs.unlock();
  127. return 0;
  128. }
  129. // Betritt eine Gruppe
  130. // gruppeId: Die Id der Gruppe
  131. // mitglieder: Nach erfolgreichem Aufruf enthält diese Liste die Lister der Account Ids der Gruppenmitglieder
  132. // anzahl: Nach erfolgreichem Aufruf wird hier die Anzahl der Gruppenmitglieder gespeichert
  133. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  134. bool AnmeldungClient::gruppeBetreten(int gruppeId, Framework::Array< int >* mitglieder, int* anzahl)
  135. {
  136. cs.lock();
  137. if (!k)
  138. {
  139. err = "Der Client ist nicht verbunden.";
  140. cs.unlock();
  141. return 0;
  142. }
  143. k->sendeEncrypted("\x6", 1);
  144. char serverReturn = 0;
  145. k->getNachrichtEncrypted(&serverReturn, 1);
  146. if (serverReturn == 1)
  147. {
  148. k->sendeEncrypted((char*)&gruppeId, 4);
  149. k->getNachrichtEncrypted(&serverReturn, 1);
  150. if (serverReturn == 1)
  151. {
  152. k->getNachrichtEncrypted((char*)anzahl, 4);
  153. for (int i = 0; i < *anzahl; i++)
  154. {
  155. int id = 0;
  156. k->getNachrichtEncrypted((char*)&id, 4);
  157. mitglieder->add(id, i);
  158. }
  159. cs.unlock();
  160. return 1;
  161. }
  162. }
  163. if (serverReturn == 3)
  164. {
  165. char län = 0;
  166. k->getNachrichtEncrypted(&län, 1);
  167. char* message = new char[län + 1];
  168. message[län] = 0;
  169. k->getNachrichtEncrypted(message, län);
  170. err = message;
  171. delete[] message;
  172. cs.unlock();
  173. return 0;
  174. }
  175. err = "Unbekannter Fehler";
  176. cs.unlock();
  177. return 0;
  178. }
  179. // Verlässt eine Gruppe
  180. // gruppeId: Die Id der Gruppe
  181. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  182. bool AnmeldungClient::gruppeVerlassen(int gruppeId)
  183. {
  184. cs.lock();
  185. if (!k)
  186. {
  187. err = "Der Client ist nicht verbunden.";
  188. cs.unlock();
  189. return 0;
  190. }
  191. k->sendeEncrypted("\x7", 1);
  192. char serverReturn = 0;
  193. k->getNachrichtEncrypted(&serverReturn, 1);
  194. if (serverReturn == 1)
  195. {
  196. k->sendeEncrypted((char*)&gruppeId, 4);
  197. k->getNachrichtEncrypted(&serverReturn, 1);
  198. if (serverReturn == 1)
  199. {
  200. cs.unlock();
  201. return 1;
  202. }
  203. }
  204. if (serverReturn == 3)
  205. {
  206. char län = 0;
  207. k->getNachrichtEncrypted(&län, 1);
  208. char* message = new char[län + 1];
  209. message[län] = 0;
  210. k->getNachrichtEncrypted(message, län);
  211. err = message;
  212. delete[] message;
  213. cs.unlock();
  214. return 0;
  215. }
  216. err = "Unbekannter Fehler";
  217. cs.unlock();
  218. return 0;
  219. }
  220. // Trägt die Gruppe in die Warteschlange für die Karte ein (nur für den Gruppen Administrator)
  221. // gruppeId: Die Id der Gruppe
  222. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  223. bool AnmeldungClient::gruppeAnmelden(int gruppeId)
  224. {
  225. cs.lock();
  226. if (!k)
  227. {
  228. err = "Der Client ist nicht verbunden.";
  229. cs.unlock();
  230. return 0;
  231. }
  232. k->sendeEncrypted("\x9", 1);
  233. char serverReturn = 0;
  234. k->getNachrichtEncrypted(&serverReturn, 1);
  235. if (serverReturn == 1)
  236. {
  237. k->sendeEncrypted((char*)&gruppeId, 4);
  238. k->getNachrichtEncrypted(&serverReturn, 1);
  239. if (serverReturn == 1)
  240. {
  241. cs.unlock();
  242. return 1;
  243. }
  244. }
  245. if (serverReturn == 3)
  246. {
  247. char län = 0;
  248. k->getNachrichtEncrypted(&län, 1);
  249. char* message = new char[län + 1];
  250. message[län] = 0;
  251. k->getNachrichtEncrypted(message, län);
  252. err = message;
  253. delete[] message;
  254. cs.unlock();
  255. return 0;
  256. }
  257. err = "Unbekannter Fehler";
  258. cs.unlock();
  259. return 0;
  260. }
  261. // Trägt die Gruppe aus der Warteschlange für die Karte aus (nur für den Gruppen Administrator)
  262. // gruppeId: Die Id der Gruppe
  263. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  264. bool AnmeldungClient::gruppeAbmelden(int gruppeId)
  265. {
  266. cs.lock();
  267. if (!k)
  268. {
  269. err = "Der Client ist nicht verbunden.";
  270. cs.unlock();
  271. return 0;
  272. }
  273. k->sendeEncrypted("\xA", 1);
  274. char serverReturn = 0;
  275. k->getNachrichtEncrypted(&serverReturn, 1);
  276. if (serverReturn == 1)
  277. {
  278. k->sendeEncrypted((char*)&gruppeId, 4);
  279. k->getNachrichtEncrypted(&serverReturn, 1);
  280. if (serverReturn == 1)
  281. {
  282. cs.unlock();
  283. return 1;
  284. }
  285. }
  286. if (serverReturn == 3)
  287. {
  288. char län = 0;
  289. k->getNachrichtEncrypted(&län, 1);
  290. char* message = new char[län + 1];
  291. message[län] = 0;
  292. k->getNachrichtEncrypted(message, län);
  293. err = message;
  294. delete[] message;
  295. cs.unlock();
  296. return 0;
  297. }
  298. err = "Unbekannter Fehler";
  299. cs.unlock();
  300. return 0;
  301. }
  302. // läht Spieler ein die Gruppe zu betreten (nur für den Gruppen Administrator)
  303. // accountId: Die Id des Accounts
  304. // gruppeId: Die Id der Gruppe
  305. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  306. bool AnmeldungClient::gruppeSpielerEinladen(int accountId, int gruppeId)
  307. {
  308. cs.lock();
  309. if (!k)
  310. {
  311. err = "Der Client ist nicht verbunden.";
  312. cs.unlock();
  313. return 0;
  314. }
  315. k->sendeEncrypted("\xB", 1);
  316. char serverReturn = 0;
  317. k->getNachrichtEncrypted(&serverReturn, 1);
  318. if (serverReturn == 1)
  319. {
  320. k->sendeEncrypted((char*)&accountId, 4);
  321. k->sendeEncrypted((char*)&gruppeId, 4);
  322. k->getNachrichtEncrypted(&serverReturn, 1);
  323. if (serverReturn == 1)
  324. {
  325. cs.unlock();
  326. return 1;
  327. }
  328. }
  329. if (serverReturn == 3)
  330. {
  331. char län = 0;
  332. k->getNachrichtEncrypted(&län, 1);
  333. char* message = new char[län + 1];
  334. message[län] = 0;
  335. k->getNachrichtEncrypted(message, län);
  336. err = message;
  337. delete[] message;
  338. cs.unlock();
  339. return 0;
  340. }
  341. err = "Unbekannter Fehler";
  342. cs.unlock();
  343. return 0;
  344. }
  345. // Zieht die Einladung eine Gruppe zu betreten zurück (nur für den Gruppen Administrator)
  346. // accountId: Die Id des Accounts
  347. // gruppeId: Die Id der Gruppe
  348. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  349. bool AnmeldungClient::gruppeEinladungAbbrechen(int accountId, int gruppeId)
  350. {
  351. cs.lock();
  352. if (!k)
  353. {
  354. err = "Der Client ist nicht verbunden.";
  355. cs.unlock();
  356. return 0;
  357. }
  358. k->sendeEncrypted("\x11", 1);
  359. char serverReturn = 0;
  360. k->getNachrichtEncrypted(&serverReturn, 1);
  361. if (serverReturn == 1)
  362. {
  363. k->sendeEncrypted((char*)&gruppeId, 4);
  364. k->sendeEncrypted((char*)&accountId, 4);
  365. k->getNachrichtEncrypted(&serverReturn, 1);
  366. if (serverReturn == 1)
  367. {
  368. cs.unlock();
  369. return 1;
  370. }
  371. }
  372. if (serverReturn == 3)
  373. {
  374. char län = 0;
  375. k->getNachrichtEncrypted(&län, 1);
  376. char* message = new char[län + 1];
  377. message[län] = 0;
  378. k->getNachrichtEncrypted(message, län);
  379. err = message;
  380. delete[] message;
  381. cs.unlock();
  382. return 0;
  383. }
  384. err = "Unbekannter Fehler";
  385. cs.unlock();
  386. return 0;
  387. }
  388. // Einladung zur Gruppe ablehnen
  389. // gruppeId: Die Id der Gruppe
  390. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  391. bool AnmeldungClient::gruppeEinladungAblehnen(int gruppeId)
  392. {
  393. cs.lock();
  394. if (!k)
  395. {
  396. err = "Der Client ist nicht verbunden.";
  397. cs.unlock();
  398. return 0;
  399. }
  400. k->sendeEncrypted("\x12", 1);
  401. char serverReturn = 0;
  402. k->getNachrichtEncrypted(&serverReturn, 1);
  403. if (serverReturn == 1)
  404. {
  405. k->sendeEncrypted((char*)&gruppeId, 4);
  406. k->getNachrichtEncrypted(&serverReturn, 1);
  407. if (serverReturn == 1)
  408. {
  409. cs.unlock();
  410. return 1;
  411. }
  412. }
  413. if (serverReturn == 3)
  414. {
  415. char län = 0;
  416. k->getNachrichtEncrypted(&län, 1);
  417. char* message = new char[län + 1];
  418. message[län] = 0;
  419. k->getNachrichtEncrypted(message, län);
  420. err = message;
  421. delete[] message;
  422. cs.unlock();
  423. return 0;
  424. }
  425. err = "Unbekannter Fehler";
  426. cs.unlock();
  427. return 0;
  428. }
  429. // wirft Spieler aus Gruppe (nur für den Gruppen Administrator)
  430. // accountId: Die Id des Accounts
  431. // gruppeId: Die Id der Gruppe
  432. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  433. bool AnmeldungClient::kickSpielerAusGruppe(int accountId, int gruppeId)
  434. {
  435. cs.lock();
  436. if (!k)
  437. {
  438. err = "Der Client ist nicht verbunden.";
  439. cs.unlock();
  440. return 0;
  441. }
  442. k->sendeEncrypted("\xC", 1);
  443. char serverReturn = 0;
  444. k->getNachrichtEncrypted(&serverReturn, 1);
  445. if (serverReturn == 1)
  446. {
  447. k->sendeEncrypted((char*)&accountId, 4);
  448. k->sendeEncrypted((char*)&gruppeId, 4);
  449. k->getNachrichtEncrypted(&serverReturn, 1);
  450. if (serverReturn == 1)
  451. {
  452. cs.unlock();
  453. return 1;
  454. }
  455. }
  456. if (serverReturn == 3)
  457. {
  458. char län = 0;
  459. k->getNachrichtEncrypted(&län, 1);
  460. char* message = new char[län + 1];
  461. message[län] = 0;
  462. k->getNachrichtEncrypted(message, län);
  463. err = message;
  464. delete[] message;
  465. cs.unlock();
  466. return 0;
  467. }
  468. err = "Unbekannter Fehler";
  469. cs.unlock();
  470. return 0;
  471. }
  472. // Legt fest, ob die Spieler in der Gruppe alleine spielen wollen, oder ob weitere Spieler aus der Warteschlange hinzugefügt werden sollen bis die Karte voll ist
  473. // gruppeId: Die Id der Gruppe
  474. // spielStarte: 1:=alleine spielen, 0:=auf volles Spiel warten
  475. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  476. bool AnmeldungClient::gruppeSpielStarten(int gruppeId, bool spielStarten)
  477. {
  478. cs.lock();
  479. if (!k)
  480. {
  481. err = "Der Client ist nicht verbunden.";
  482. cs.unlock();
  483. return 0;
  484. }
  485. k->sendeEncrypted("\x10", 1);
  486. char serverReturn = 0;
  487. k->getNachrichtEncrypted(&serverReturn, 1);
  488. if (serverReturn == 1)
  489. {
  490. k->sendeEncrypted((char*)&gruppeId, 4);
  491. k->sendeEncrypted((char*)&spielStarten, 1);
  492. k->getNachrichtEncrypted(&serverReturn, 1);
  493. if (serverReturn == 1)
  494. {
  495. cs.unlock();
  496. return 1;
  497. }
  498. }
  499. if (serverReturn == 3)
  500. {
  501. char län = 0;
  502. k->getNachrichtEncrypted(&län, 1);
  503. char* message = new char[län + 1];
  504. message[län] = 0;
  505. k->getNachrichtEncrypted(message, län);
  506. err = message;
  507. delete[] message;
  508. cs.unlock();
  509. return 0;
  510. }
  511. err = "Unbekannter Fehler";
  512. cs.unlock();
  513. return 0;
  514. }
  515. // Sendet eine Nachricht an den Gruppen Chat
  516. // gruppeId: Die Id der Gruppe
  517. // nachricht: Die Nachricht, die gesendet werden soll
  518. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  519. bool AnmeldungClient::gruppeNachricht(int gruppeId, const char* nachricht)
  520. {
  521. cs.lock();
  522. if (!k)
  523. {
  524. err = "Der Client ist nicht verbunden.";
  525. cs.unlock();
  526. return 0;
  527. }
  528. char län = textLength(nachricht);
  529. if (!län)
  530. return 1;
  531. cs.lock();
  532. k->sendeEncrypted("\xD", 1);
  533. char serverReturn = 0;
  534. k->getNachrichtEncrypted(&serverReturn, 1);
  535. if (serverReturn == 1)
  536. {
  537. k->sendeEncrypted((char*)&gruppeId, 4);
  538. k->sendeEncrypted((char*)&län, 1);
  539. k->sendeEncrypted(nachricht, län);
  540. k->getNachrichtEncrypted(&serverReturn, 1);
  541. if (serverReturn == 1)
  542. {
  543. cs.unlock();
  544. return 1;
  545. }
  546. }
  547. if (serverReturn == 3)
  548. {
  549. char län = 0;
  550. k->getNachrichtEncrypted(&län, 1);
  551. char* message = new char[län + 1];
  552. message[län] = 0;
  553. k->getNachrichtEncrypted(message, län);
  554. err = message;
  555. delete[] message;
  556. cs.unlock();
  557. return 0;
  558. }
  559. err = "Unbekannter Fehler";
  560. cs.unlock();
  561. return 0;
  562. }
  563. // Meldet den eingeloggten Account in der Warteschlange für eine Karte an
  564. // karteId: Die Id der Karte
  565. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  566. bool AnmeldungClient::anmelden(int karteId)
  567. {
  568. cs.lock();
  569. if (!k)
  570. {
  571. err = "Der Client ist nicht verbunden.";
  572. cs.unlock();
  573. return 0;
  574. }
  575. k->sendeEncrypted("\xE", 1);
  576. char serverReturn = 0;
  577. k->getNachrichtEncrypted(&serverReturn, 1);
  578. if (serverReturn == 1)
  579. {
  580. k->sendeEncrypted((char*)&karteId, 4);
  581. k->getNachrichtEncrypted(&serverReturn, 1);
  582. if (serverReturn == 1)
  583. {
  584. cs.unlock();
  585. return 1;
  586. }
  587. }
  588. if (serverReturn == 3)
  589. {
  590. char län = 0;
  591. k->getNachrichtEncrypted(&län, 1);
  592. char* message = new char[län + 1];
  593. message[län] = 0;
  594. k->getNachrichtEncrypted(message, län);
  595. err = message;
  596. delete[] message;
  597. cs.unlock();
  598. return 0;
  599. }
  600. err = "Unbekannter Fehler";
  601. cs.unlock();
  602. return 0;
  603. }
  604. // Meldet den eingeloggten Account aus der Warteschlange ab
  605. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  606. bool AnmeldungClient::abmelden()
  607. {
  608. cs.lock();
  609. if (!k)
  610. {
  611. err = "Der Client ist nicht verbunden.";
  612. cs.unlock();
  613. return 0;
  614. }
  615. k->sendeEncrypted("\xF", 1);
  616. char serverReturn = 0;
  617. k->getNachrichtEncrypted(&serverReturn, 1);
  618. if (serverReturn == 1)
  619. {
  620. cs.unlock();
  621. return 1;
  622. }
  623. if (serverReturn == 3)
  624. {
  625. char län = 0;
  626. k->getNachrichtEncrypted(&län, 1);
  627. char* message = new char[län + 1];
  628. message[län] = 0;
  629. k->getNachrichtEncrypted(message, län);
  630. err = message;
  631. delete[] message;
  632. cs.unlock();
  633. return 0;
  634. }
  635. err = "Unbekannter Fehler";
  636. cs.unlock();
  637. return 0;
  638. }
  639. // Erhält die Verbindung aufrecht
  640. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  641. // Sollte während einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
  642. bool AnmeldungClient::keepAlive()
  643. {
  644. if (!k)
  645. return 0;
  646. char res = 0;
  647. if (!cs.tryLock())
  648. return 1;
  649. Framework::logLine((char*)"Verbindungstest zum Anmeldung Server...");
  650. bool ok = k->sendeEncrypted("\x13", 1);
  651. ok &= k->getNachrichtEncrypted(&res, 1);
  652. cs.unlock();
  653. if (res != 1 || !ok)
  654. {
  655. Framework::logLine((char*)"Verbindungsabbruch.");
  656. trenne(0);
  657. }
  658. else
  659. Framework::logLine((char*)"Verbindung besteht.");
  660. return res == 1;
  661. }
  662. // Trennt die Verbindung zum Server
  663. // Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
  664. // Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
  665. bool AnmeldungClient::trenne(bool abmelden)
  666. {
  667. cs.lock();
  668. verbinde();
  669. if (!k)
  670. {
  671. cs.unlock();
  672. return 1;
  673. }
  674. if (abmelden)
  675. {
  676. k->sendeEncrypted("\4", 1);
  677. char ret = 0;
  678. k->getNachrichtEncrypted(&ret, 1);
  679. if (ret == 3)
  680. { // error
  681. k->getNachrichtEncrypted(&ret, 1);
  682. char* msg = new char[ret + 1];
  683. msg[ret] = 0;
  684. if (ret)
  685. k->getNachrichtEncrypted(msg, ret);
  686. err = "error while unregister Client Anmeldung Server returned: ";
  687. err += msg;
  688. delete[] msg;
  689. }
  690. }
  691. k->sendeEncrypted("\3", 1);
  692. char ret = 0;
  693. k->getNachrichtEncrypted(&ret, 1);
  694. if (ret == 3)
  695. { // error
  696. k->getNachrichtEncrypted(&ret, 1);
  697. char* msg = new char[ret + 1];
  698. msg[ret] = 0;
  699. if (ret)
  700. k->getNachrichtEncrypted(msg, ret);
  701. err = "error while trenne Anmeldung Server returned: ";
  702. err += msg;
  703. delete[] msg;
  704. }
  705. k->trenne();
  706. k = (Network::Klient*)k->release();
  707. cs.unlock();
  708. return 1;
  709. }
  710. // Gibt 1 zurück, falls der Client verbunden ist, 0 sonst
  711. bool AnmeldungClient::istVerbunden() const
  712. {
  713. return k != 0;
  714. }
  715. // gibt den Letzten Fehlertext zuück
  716. // sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
  717. const char* AnmeldungClient::getLetzterFehler() const
  718. {
  719. return err;
  720. }