MainClient.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. #include "MainClient.h"
  2. #include <Klient.h>
  3. #include "Keys.h"
  4. #include "ErhaltungClient.h"
  5. #include "PatchClient.h"
  6. #include "NewsClient.h"
  7. #include "RegisterServer.h"
  8. #include "LoginClient.h"
  9. #include "ShopClient.h"
  10. #include "ChatClient.h"
  11. #include "AnmeldungClient.h"
  12. #include "MinigameClient.h"
  13. using namespace KSGClient;
  14. // Inhalt der MainClient Klasse
  15. // Konstruktor
  16. MainClient::MainClient()
  17. {
  18. ref = 1;
  19. port = 0;
  20. cId = 0;
  21. k = 0;
  22. key = 0;
  23. keyLen = 0;
  24. }
  25. MainClient::MainClient( char *ip, unsigned short port, int klientId, char *key, unsigned char keyLen )
  26. {
  27. ref = 1;
  28. this->ip = ip;
  29. this->port = port;
  30. cId = klientId;
  31. k = 0;
  32. this->keyLen = keyLen;
  33. this->key = new char[ keyLen ];
  34. memcpy( this->key, key, keyLen );
  35. }
  36. // Destruktor
  37. MainClient::~MainClient()
  38. {
  39. if( k )
  40. disconnect();
  41. delete[]key;
  42. }
  43. // Meldet den neuen Client beim Serversystem an. Durch diesen Vorgang erhält der Client eine Id und den Port und die Ip Addresse des Main Servers
  44. bool MainClient::registerSSL( char *ip, unsigned short port )
  45. {
  46. cs.lock();
  47. if( cId )
  48. {
  49. cs.unlock();
  50. return 0;
  51. }
  52. Network::SSLKlient *klientSSL = new Network::SSLKlient();
  53. int l = 0;
  54. if( !klientSSL->verbinde( port, ip ) )
  55. {
  56. err = "error while trying to connect to Main SSL Server";
  57. klientSSL->release();
  58. cs.unlock();
  59. return 0;
  60. }
  61. klientSSL->sende( "\1", 5 );
  62. char byte = 0;
  63. klientSSL->getNachricht( &byte, 1 );
  64. if( byte == 3 )
  65. {
  66. klientSSL->getNachricht( &byte, 1 );
  67. char *message = new char[ byte + 1 ];
  68. message[ byte ] = 0;
  69. klientSSL->getNachricht( message, byte );
  70. err = "error while register new client server returned: ";
  71. err += message;
  72. delete[]message;
  73. klientSSL->sende( "\3", 1 );
  74. klientSSL->getNachricht( &byte, 1 );
  75. klientSSL->trenne();
  76. klientSSL->release();
  77. cs.unlock();
  78. return 0;
  79. }
  80. if( byte == 1 )
  81. {
  82. klientSSL->getNachricht( (char*)&this->port, 4 );
  83. klientSSL->getNachricht( (char*)&cId, 4 );
  84. klientSSL->getNachricht( (char*)&keyLen, 1 );
  85. this->ip = ip;
  86. if( keyLen )
  87. {
  88. key = new char[ keyLen ];
  89. klientSSL->getNachricht( key, keyLen );
  90. }
  91. }
  92. klientSSL->sende( "\3", 1 );
  93. klientSSL->getNachricht( &byte, 1 );
  94. klientSSL->trenne();
  95. klientSSL->release();
  96. cs.unlock();
  97. return 1;
  98. }
  99. // Verbindet den Client mit dem Server
  100. // Wird automatisch aufgerufen, falls eine Methode aufgerufen wird, die eine Verbindung erfordert. In diesem Fall wird die Verbindung auch automatisch wieder getrennt.
  101. bool MainClient::connect()
  102. {
  103. cs.lock();
  104. if( k )
  105. {
  106. cs.unlock();
  107. return 1;
  108. }
  109. k = new Network::Klient();
  110. int l = 0;
  111. char *key;
  112. Keys::getServerKey( &key, l, Keys::MAIN, Keys::SENDEN );
  113. k->setSendeKey( key, l );
  114. delete[] key;
  115. Keys::getServerKey( &key, l, Keys::MAIN, Keys::EMPFANGEN );
  116. k->setEmpfangKey( key, l );
  117. delete[] key;
  118. if( !k->verbinde( port, ip ) )
  119. {
  120. err = "error while trying to connect to Main Server";
  121. k = k->release();
  122. cs.unlock();
  123. return 0;
  124. }
  125. k->sende( "\0", 1 ); // Verschlüsselung aktivieren
  126. k->sendeEncrypted( "\1", 1 );
  127. k->sendeEncrypted( (char*)&cId, 4 );
  128. char serverReturn = 0;
  129. k->getNachrichtEncrypted( &serverReturn, 1 );
  130. if( serverReturn == 3 )
  131. {
  132. k->getNachrichtEncrypted( &serverReturn, 1 );
  133. char *message = new char[ serverReturn + 1 ];
  134. message[ serverReturn ] = 0;
  135. k->getNachrichtEncrypted( message, serverReturn );
  136. err = "error while trying to identify registered client server returned: ";
  137. err += message;
  138. delete[] message;
  139. k->sendeEncrypted( "\3", 1 );
  140. k->getNachrichtEncrypted( &serverReturn, 1 );
  141. k->trenne();
  142. k = k->release();
  143. cs.unlock();
  144. return 0;
  145. }
  146. else
  147. {
  148. k->setSendeKey( this->key, keyLen );
  149. k->setEmpfangKey( this->key, keyLen );
  150. cs.unlock();
  151. return 1;
  152. }
  153. }
  154. // Erzeugt einen Erhaltungs Server Client
  155. // Gibt bei misserfolg 0 zurück
  156. ErhaltungServerClient *MainClient::createErhaltungServerClient()
  157. {
  158. cs.lock();
  159. bool connected = k != 0;
  160. if( !connected )
  161. connect();
  162. if( !k )
  163. {
  164. err = "no connection to Main Server";
  165. cs.unlock();
  166. return 0;
  167. }
  168. k->sendeEncrypted( "\6\x8", 2 );
  169. char byte = 0;
  170. k->getNachrichtEncrypted( &byte, 1 );
  171. if( byte == 2 )
  172. {
  173. unsigned char lsIp[ 4 ];
  174. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  175. unsigned short lsPort = 0;
  176. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  177. Framework::Text ipT;
  178. ipT += (int)lsIp[ 0 ];
  179. ipT += ".";
  180. ipT += (int)lsIp[ 1 ];
  181. ipT += ".";
  182. ipT += (int)lsIp[ 2 ];
  183. ipT += ".";
  184. ipT += (int)lsIp[ 3 ];
  185. if( !connected )
  186. disconnect();
  187. cs.unlock();
  188. return new ErhaltungClient( cId, lsPort, ipT, key, keyLen );
  189. }
  190. else if( byte == 3 )
  191. {
  192. k->getNachrichtEncrypted( &byte, 1 );
  193. char *f = new char[ byte + 1 ];
  194. f[ byte ] = 0;
  195. k->getNachrichtEncrypted( f, byte );
  196. err = "error while requesting ErhaltungServer server returned: ";
  197. err += f;
  198. delete[]f;
  199. }
  200. if( !connected )
  201. disconnect();
  202. cs.unlock();
  203. return 0;
  204. }
  205. // Erzeugt einen Patch Server Client
  206. // Gibt bei misserfolg 0 zurück
  207. PatchServerClient *MainClient::createPatchServerClient()
  208. {
  209. cs.lock();
  210. bool connected = k != 0;
  211. if( !connected )
  212. connect();
  213. if( !k )
  214. {
  215. err = "no connection to Main Server";
  216. cs.unlock();
  217. return 0;
  218. }
  219. k->sendeEncrypted( "\6\2", 2 );
  220. char byte = 0;
  221. k->getNachrichtEncrypted( &byte, 1 );
  222. if( byte == 2 )
  223. {
  224. unsigned char lsIp[ 4 ];
  225. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  226. unsigned short lsPort = 0;
  227. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  228. Framework::Text ipT;
  229. ipT += (int)lsIp[ 0 ];
  230. ipT += ".";
  231. ipT += (int)lsIp[ 1 ];
  232. ipT += ".";
  233. ipT += (int)lsIp[ 2 ];
  234. ipT += ".";
  235. ipT += (int)lsIp[ 3 ];
  236. if( !connected )
  237. disconnect();
  238. cs.unlock();
  239. return new PatchClient( cId, lsPort, ipT, key, keyLen );
  240. }
  241. else if( byte == 3 )
  242. {
  243. k->getNachrichtEncrypted( &byte, 1 );
  244. char *f = new char[ byte + 1 ];
  245. f[ byte ] = 0;
  246. k->getNachrichtEncrypted( f, byte );
  247. err = "error while requesting PatchServer server returned: ";
  248. err += f;
  249. delete[]f;
  250. }
  251. if( !connected )
  252. disconnect();
  253. cs.unlock();
  254. return 0;
  255. }
  256. // Erzeugt einen News Server Client
  257. // Gibt bei misserfolg 0 zurück
  258. NewsServerClient *MainClient::createNewsServerClient()
  259. {
  260. cs.lock();
  261. bool connected = k != 0;
  262. if( !connected )
  263. connect();
  264. if( !k )
  265. {
  266. err = "no connection to Main Server";
  267. cs.unlock();
  268. return 0;
  269. }
  270. k->sendeEncrypted( "\6\x9", 2 );
  271. char byte = 0;
  272. k->getNachrichtEncrypted( &byte, 1 );
  273. if( byte == 2 )
  274. {
  275. unsigned char lsIp[ 4 ];
  276. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  277. unsigned short lsPort = 0;
  278. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  279. Framework::Text ipT;
  280. ipT += (int)lsIp[ 0 ];
  281. ipT += ".";
  282. ipT += (int)lsIp[ 1 ];
  283. ipT += ".";
  284. ipT += (int)lsIp[ 2 ];
  285. ipT += ".";
  286. ipT += (int)lsIp[ 3 ];
  287. if( !connected )
  288. disconnect();
  289. cs.unlock();
  290. return new NewsClient( cId, lsPort, ipT, key, keyLen );
  291. }
  292. else if( byte == 3 )
  293. {
  294. k->getNachrichtEncrypted( &byte, 1 );
  295. char *f = new char[ byte + 1 ];
  296. f[ byte ] = 0;
  297. k->getNachrichtEncrypted( f, byte );
  298. err = "error while requesting NewsServer server returned: ";
  299. err += f;
  300. delete[]f;
  301. }
  302. if( !connected )
  303. disconnect();
  304. cs.unlock();
  305. return 0;
  306. }
  307. // Erzeugt einen Register Server Client
  308. // Gibt bei misserfolg 0 zurück
  309. RegisterServerClient *MainClient::createRegisterServerClient()
  310. {
  311. cs.lock();
  312. bool connected = k != 0;
  313. if( !connected )
  314. connect();
  315. if( !k )
  316. {
  317. err = "no connection to Main Server";
  318. cs.unlock();
  319. return 0;
  320. }
  321. k->sendeEncrypted( "\6\1", 2 );
  322. char byte = 0;
  323. k->getNachrichtEncrypted( &byte, 1 );
  324. if( byte == 2 )
  325. {
  326. unsigned char lsIp[ 4 ];
  327. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  328. unsigned short lsPort = 0;
  329. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  330. Framework::Text ipT;
  331. ipT += (int)lsIp[ 0 ];
  332. ipT += ".";
  333. ipT += (int)lsIp[ 1 ];
  334. ipT += ".";
  335. ipT += (int)lsIp[ 2 ];
  336. ipT += ".";
  337. ipT += (int)lsIp[ 3 ];
  338. if( !connected )
  339. disconnect();
  340. cs.unlock();
  341. return new RegisterClient( cId, lsPort, ipT, key, keyLen );
  342. }
  343. else if( byte == 3 )
  344. {
  345. k->getNachrichtEncrypted( &byte, 1 );
  346. char *f = new char[ byte + 1 ];
  347. f[ byte ] = 0;
  348. k->getNachrichtEncrypted( f, byte );
  349. err = "error while requesting RegisterServer server returned: ";
  350. err += f;
  351. delete[]f;
  352. }
  353. if( !connected )
  354. disconnect();
  355. cs.unlock();
  356. return 0;
  357. }
  358. // Erzeugt einen Login Server Client
  359. // Gibt bei misserfolg 0 zurück
  360. LoginServerClient *MainClient::createLoginServerClient()
  361. {
  362. cs.lock();
  363. bool connected = k != 0;
  364. if( !connected )
  365. connect();
  366. if( !k )
  367. {
  368. err = "no connection to Main Server";
  369. cs.unlock();
  370. return 0;
  371. }
  372. k->sendeEncrypted( "\6\3", 2 );
  373. char byte = 0;
  374. k->getNachrichtEncrypted( &byte, 1 );
  375. if( byte == 2 )
  376. {
  377. unsigned char lsIp[ 4 ];
  378. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  379. unsigned short lsPort = 0;
  380. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  381. Framework::Text ipT;
  382. ipT += (int)lsIp[ 0 ];
  383. ipT += ".";
  384. ipT += (int)lsIp[ 1 ];
  385. ipT += ".";
  386. ipT += (int)lsIp[ 2 ];
  387. ipT += ".";
  388. ipT += (int)lsIp[ 3 ];
  389. if( !connected )
  390. disconnect();
  391. cs.unlock();
  392. return new LoginClient( cId, lsPort, ipT, key, keyLen );
  393. }
  394. else if( byte == 3 )
  395. {
  396. k->getNachrichtEncrypted( &byte, 1 );
  397. char *f = new char[ byte + 1 ];
  398. f[ byte ] = 0;
  399. k->getNachrichtEncrypted( f, byte );
  400. err = "error while requesting LoginServer server returned: ";
  401. err += f;
  402. delete[]f;
  403. }
  404. if( !connected )
  405. disconnect();
  406. cs.unlock();
  407. return 0;
  408. }
  409. // Erzeugt einen Information Server Client
  410. // Gibt bei misserfolg 0 zurück
  411. InformationServerClient *MainClient::createInformationServerClient()
  412. {
  413. }
  414. // Erzeugt einen Chat Server Client
  415. // Gibt bei misserfolg 0 zurück
  416. ChatServerClient *MainClient::createChatServerClient()
  417. {
  418. cs.lock();
  419. bool connected = k != 0;
  420. if( !connected )
  421. connect();
  422. if( !k )
  423. {
  424. err = "no connection to Main Server";
  425. cs.unlock();
  426. return 0;
  427. }
  428. k->sendeEncrypted( "\6\5", 2 );
  429. char byte = 0;
  430. k->getNachrichtEncrypted( &byte, 1 );
  431. if( byte == 2 )
  432. {
  433. unsigned char lsIp[ 4 ];
  434. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  435. unsigned short lsPort = 0;
  436. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  437. Framework::Text ipT;
  438. ipT += (int)lsIp[ 0 ];
  439. ipT += ".";
  440. ipT += (int)lsIp[ 1 ];
  441. ipT += ".";
  442. ipT += (int)lsIp[ 2 ];
  443. ipT += ".";
  444. ipT += (int)lsIp[ 3 ];
  445. if( !connected )
  446. disconnect();
  447. cs.unlock();
  448. return new ChatClient( cId, lsPort, ipT, key, keyLen );
  449. }
  450. else if( byte == 3 )
  451. {
  452. k->getNachrichtEncrypted( &byte, 1 );
  453. char *f = new char[ byte + 1 ];
  454. f[ byte ] = 0;
  455. k->getNachrichtEncrypted( f, byte );
  456. err = "error while requesting ChatServer server returned: ";
  457. err += f;
  458. delete[]f;
  459. }
  460. if( !connected )
  461. disconnect();
  462. cs.unlock();
  463. return 0;
  464. }
  465. // Erzeugt einen Shop Server Client
  466. // Gibt bei misserfolg 0 zurück
  467. ShopServerClient *MainClient::createShopServerClient()
  468. {
  469. cs.lock();
  470. bool connected = k != 0;
  471. if( !connected )
  472. connect();
  473. if( !k )
  474. {
  475. err = "no connection to Main Server";
  476. cs.unlock();
  477. return 0;
  478. }
  479. k->sendeEncrypted( "\6\7", 2 );
  480. char byte = 0;
  481. k->getNachrichtEncrypted( &byte, 1 );
  482. if( byte == 2 )
  483. {
  484. unsigned char lsIp[ 4 ];
  485. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  486. unsigned short lsPort = 0;
  487. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  488. Framework::Text ipT;
  489. ipT += (int)lsIp[ 0 ];
  490. ipT += ".";
  491. ipT += (int)lsIp[ 1 ];
  492. ipT += ".";
  493. ipT += (int)lsIp[ 2 ];
  494. ipT += ".";
  495. ipT += (int)lsIp[ 3 ];
  496. if( !connected )
  497. disconnect();
  498. cs.unlock();
  499. return new ShopClient( cId, lsPort, ipT, key, keyLen );
  500. }
  501. else if( byte == 3 )
  502. {
  503. k->getNachrichtEncrypted( &byte, 1 );
  504. char *f = new char[ byte + 1 ];
  505. f[ byte ] = 0;
  506. k->getNachrichtEncrypted( f, byte );
  507. err = "error while requesting ShopServer server returned: ";
  508. err += f;
  509. delete[]f;
  510. }
  511. if( !connected )
  512. disconnect();
  513. cs.unlock();
  514. return 0;
  515. }
  516. // Erzeugt einen Anmeldung Server Client
  517. // Gibt bei misserfolg 0 zurück
  518. AnmeldungServerClient *MainClient::createAnmeldungServerClient()
  519. {
  520. cs.lock();
  521. bool connected = k != 0;
  522. if( !connected )
  523. connect();
  524. if( !k )
  525. {
  526. err = "no connection to Main Server";
  527. cs.unlock();
  528. return 0;
  529. }
  530. k->sendeEncrypted( "\6\6", 2 );
  531. char byte = 0;
  532. k->getNachrichtEncrypted( &byte, 1 );
  533. if( byte == 2 )
  534. {
  535. unsigned char lsIp[ 4 ];
  536. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  537. unsigned short lsPort = 0;
  538. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  539. Framework::Text ipT;
  540. ipT += (int)lsIp[ 0 ];
  541. ipT += ".";
  542. ipT += (int)lsIp[ 1 ];
  543. ipT += ".";
  544. ipT += (int)lsIp[ 2 ];
  545. ipT += ".";
  546. ipT += (int)lsIp[ 3 ];
  547. if( !connected )
  548. disconnect();
  549. cs.unlock();
  550. return new AnmeldungClient( cId, lsPort, ipT, key, keyLen );
  551. }
  552. else if( byte == 3 )
  553. {
  554. k->getNachrichtEncrypted( &byte, 1 );
  555. char *f = new char[ byte + 1 ];
  556. f[ byte ] = 0;
  557. k->getNachrichtEncrypted( f, byte );
  558. err = "error while requesting ShopServer server returned: ";
  559. err += f;
  560. delete[]f;
  561. }
  562. if( !connected )
  563. disconnect();
  564. cs.unlock();
  565. return 0;
  566. }
  567. // Erzeugt einen Minigame Server Client
  568. // Gibt bei misserfolg 0 zurück
  569. MinigameServerClient *MainClient::createMinigameServerClient()
  570. {
  571. cs.lock();
  572. bool connected = k != 0;
  573. if( !connected )
  574. connect();
  575. if( !k )
  576. {
  577. err = "no connection to minigame Server";
  578. cs.unlock();
  579. return 0;
  580. }
  581. k->sendeEncrypted( "\6\xA", 2 );
  582. char byte = 0;
  583. k->getNachrichtEncrypted( &byte, 1 );
  584. if( byte == 2 )
  585. {
  586. unsigned char lsIp[ 4 ];
  587. k->getNachrichtEncrypted( (char *)lsIp, 4 );
  588. unsigned short lsPort = 0;
  589. k->getNachrichtEncrypted( (char*)&lsPort, 2 );
  590. Framework::Text ipT;
  591. ipT += (int)lsIp[ 0 ];
  592. ipT += ".";
  593. ipT += (int)lsIp[ 1 ];
  594. ipT += ".";
  595. ipT += (int)lsIp[ 2 ];
  596. ipT += ".";
  597. ipT += (int)lsIp[ 3 ];
  598. if( !connected )
  599. disconnect();
  600. cs.unlock();
  601. return new MinigameClient( cId, lsPort, ipT, key, keyLen );
  602. }
  603. else if( byte == 3 )
  604. {
  605. k->getNachrichtEncrypted( &byte, 1 );
  606. char *f = new char[ byte + 1 ];
  607. f[ byte ] = 0;
  608. k->getNachrichtEncrypted( f, byte );
  609. err = "error while requesting ShopServer server returned: ";
  610. err += f;
  611. delete[]f;
  612. }
  613. if( !connected )
  614. disconnect();
  615. cs.unlock();
  616. return 0;
  617. }
  618. // Trennt die Verbindung zum Server. Muss nur aufgerufen werden, wenn vorher manuell connect aufgerufen wurde
  619. bool MainClient::disconnect()
  620. {
  621. cs.lock();
  622. if( !k )
  623. {
  624. cs.unlock();
  625. return 1;
  626. }
  627. char serverReturn = 0;
  628. k->sendeEncrypted( "\3", 1 );
  629. k->getNachrichtEncrypted( &serverReturn, 1 );
  630. k->trenne();
  631. k = k->release();
  632. cs.unlock();
  633. return 1;
  634. }
  635. // Meldet den Client vom Server ab. Alle zuvor von diesem Client erzeugten Clients werden durch diesen Vorgang unbrauchbar
  636. bool MainClient::unregister()
  637. {
  638. cs.lock();
  639. bool connected = k != 0;
  640. if( !connected )
  641. connect();
  642. if( !k )
  643. {
  644. err = "no connection to Main Server";
  645. cs.unlock();
  646. return 0;
  647. }
  648. k->sendeEncrypted( "\7", 1 );
  649. char serverReturn = 0;
  650. k->getNachrichtEncrypted( &serverReturn, 1 );
  651. if( serverReturn == 3 )
  652. {
  653. k->getNachrichtEncrypted( &serverReturn, 1 );
  654. char *message = new char[ serverReturn + 1 ];
  655. message[ serverReturn ] = 0;
  656. k->getNachrichtEncrypted( message, serverReturn );
  657. err = "error while trying to unregistere client server returned: ";
  658. err += message;
  659. delete[] message;
  660. if( !connected )
  661. disconnect();
  662. cs.unlock();
  663. return 0;
  664. }
  665. disconnect();
  666. cId = 0;
  667. delete key;
  668. key = 0;
  669. keyLen = 0;
  670. port = 0;
  671. ip = "";
  672. cs.unlock();
  673. return 1;
  674. }
  675. // Gibt die dem Client zugewiesene Id zurück.
  676. // sollte erst nach dem Aufruf von registerSSL verwendet werden.
  677. int MainClient::getClientId() const
  678. {
  679. return cId;
  680. }
  681. // Gibt die Ip Adresse des dem Client zugewiesenen Main Servers zurück.
  682. // sollte erst nach dem Aufruf von registerSSL verwendet werden.
  683. Framework::Text *MainClient::getServerIp() const
  684. {
  685. return new Text( ip.getText() );
  686. }
  687. // Gibt den Port des dem Client zugewiesenen Main Servers zurück.
  688. // sollte erst nach dem Aufruf von registerSSL verwendet werden.
  689. unsigned short MainClient::getServerPort() const
  690. {
  691. return port;
  692. }
  693. // Gibt den Zeiger auf den Schlüssel zurück
  694. // sollte erst nach dem Aufruf von registerSSL verwendet werden.
  695. char *MainClient::zKey() const
  696. {
  697. return key;
  698. }
  699. // Gibt die Länge des Schlüssels zurück
  700. // sollte erst nach dem Aufruf von registerSSL verwendet werden.
  701. unsigned char MainClient::getKeyLen() const
  702. {
  703. return keyLen;
  704. }
  705. // gibt den Letzten Fehlertext zuück
  706. // sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
  707. char *MainClient::getLetzterFehler() const
  708. {
  709. return err;
  710. }
  711. // Erhöht den Reference Counter um 1 un gibt this zurück
  712. MainServerClient *MainClient::getThis()
  713. {
  714. ref++;
  715. return this;
  716. }
  717. // Verringert den Reference Counter um 1 und gibt 0 zurück.
  718. // Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst
  719. MainServerClient *MainClient::release()
  720. {
  721. if( !--ref )
  722. delete this;
  723. return 0;
  724. }