MinigameK.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. #include "../KSGKlient.h"
  2. #include "../KSGServer.h"
  3. #include "../Keys.h"
  4. #include <Globals.h>
  5. // Inhalt der MinigameClient Klasse
  6. // Konstruktor
  7. MinigameClient::MinigameClient()
  8. {
  9. verbunden = 0;
  10. fehler = 0;
  11. klient = 0;
  12. needCapture = 0;
  13. klientId = getKlientId();
  14. ref = 1;
  15. }
  16. // Destruktor
  17. MinigameClient::~MinigameClient()
  18. {
  19. cs.lock();
  20. if( klient )
  21. {
  22. char serverReturn = 0;
  23. if( verbunden )
  24. {
  25. if( needCapture )
  26. klient->sendeEncrypted( "\0\0\0\0", 4 );
  27. needCapture = 0;
  28. klient->sendeEncrypted( "\4", 1 );
  29. klient->getNachrichtEncrypted( &serverReturn, 1 );
  30. if( serverReturn == 3 )
  31. {
  32. char län = 0;
  33. klient->getNachrichtEncrypted( &län, 1 );
  34. char *nachricht = new char[ län + 1 ];
  35. nachricht[ län ] = 0;
  36. klient->getNachrichtEncrypted( nachricht, län );
  37. delete[]nachricht;
  38. }
  39. klient->sendeEncrypted( "\3", 1 );
  40. klient->getNachrichtEncrypted( &serverReturn, 1 );
  41. klient->trenne();
  42. }
  43. else
  44. {
  45. int keyLen = 0;
  46. char *key = 0;
  47. Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::SENDEN );
  48. klient->setSendeKey( key, keyLen );
  49. delete[] key;
  50. Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::EMPFANGEN );
  51. klient->setEmpfangKey( key, keyLen );
  52. delete[] key;
  53. klient->verbinde( klient->getServerPort(), klient->getServerIp() );
  54. klient->sendeEncrypted( "\1", 1 );
  55. klient->sendeEncrypted( (char*)&klientId, 4 );
  56. klient->getNachrichtEncrypted( &serverReturn, 1 );
  57. if( serverReturn == 3 )
  58. {
  59. char län = 0;
  60. klient->getNachrichtEncrypted( &län, 1 );
  61. char *nachricht = new char[ län + 1 ];
  62. nachricht[ län ] = 0;
  63. klient->getNachrichtEncrypted( nachricht, län );
  64. delete[]nachricht;
  65. }
  66. else
  67. {
  68. char *sl = 0;
  69. char slLän = getSchlüssel( &sl );
  70. klient->setSendeKey( sl, slLän );
  71. klient->setEmpfangKey( sl, slLän );
  72. delete[] sl;
  73. klient->sendeEncrypted( "\4", 1 );
  74. klient->getNachrichtEncrypted( &serverReturn, 1 );
  75. if( serverReturn == 3 )
  76. {
  77. char län = 0;
  78. klient->getNachrichtEncrypted( &län, 1 );
  79. char *nachricht = new char[ län + 1 ];
  80. nachricht[ län ] = 0;
  81. klient->getNachrichtEncrypted( nachricht, län );
  82. delete[]nachricht;
  83. }
  84. }
  85. klient->sendeEncrypted( "\3", 1 );
  86. klient->getNachrichtEncrypted( &serverReturn, 1 );
  87. klient->trenne();
  88. }
  89. klient = klient->release();
  90. }
  91. delete[]fehler;
  92. cs.unlock();
  93. }
  94. // verbindet ich mit dem Minigame Server
  95. bool MinigameClient::verbinde()
  96. {
  97. cs.lock();
  98. if( verbunden )
  99. {
  100. cs.unlock();
  101. return 1;
  102. }
  103. if( !klient )
  104. {
  105. char *msIp = getMainServerIp();
  106. unsigned short msPort = getMainServerPort();
  107. Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
  108. klient = new Klient();
  109. int keyLen = 0;
  110. char *key = 0;
  111. Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
  112. klient->setSendeKey( key, keyLen );
  113. delete[] key;
  114. Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
  115. klient->setEmpfangKey( key, keyLen );
  116. delete[] key;
  117. if( !klient->verbinde( msPort, msIp ) )
  118. {
  119. Framework::logLine( "ERROR: Server nicht erreichbar." );
  120. char *err = "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut.";
  121. delete[]fehler;
  122. fehler = new char[ textLength( err ) + 1 ];
  123. fehler[ textLength( err ) ] = 0;
  124. memcpy( fehler, err, textLength( err ) );
  125. klient = klient->release();
  126. delete[]msIp;
  127. cs.unlock();
  128. return 0;
  129. }
  130. delete[]msIp;
  131. klient->sende( "\0", 1 ); // verschlüsselung aktivieren
  132. klient->sendeEncrypted( "\1", 1 );
  133. klient->sendeEncrypted( (char*)&klientId, 4 );
  134. char serverReturn = 0;
  135. klient->getNachrichtEncrypted( &serverReturn, 1 );
  136. if( serverReturn == 3 )
  137. {
  138. char byte = 0;
  139. klient->getNachrichtEncrypted( &byte, 1 );
  140. delete[]fehler;
  141. fehler = new char[ byte + 1 ];
  142. fehler[ byte ] = 0;
  143. klient->getNachrichtEncrypted( fehler, byte );
  144. Framework::logLine( Text( "ERROR: " ) += fehler );
  145. klient->sendeEncrypted( "\3", 1 );
  146. klient->getNachrichtEncrypted( &serverReturn, 1 );
  147. klient->trenne();
  148. klient = klient->release();
  149. cs.unlock();
  150. return 0;
  151. }
  152. char *sl = 0;
  153. char slLän = getSchlüssel( &sl );
  154. klient->setSendeKey( sl, slLän );
  155. klient->setEmpfangKey( sl, slLän );
  156. delete[] sl;
  157. klient->sendeEncrypted( "\6\xA", 2 );
  158. char byte = 0;
  159. klient->getNachrichtEncrypted( &byte, 1 );
  160. if( byte == 2 )
  161. {
  162. unsigned char lsIp[ 4 ];
  163. klient->getNachrichtEncrypted( (char *)lsIp, 4 );
  164. unsigned short lsPort = 0;
  165. klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
  166. klient->sendeEncrypted( "\3", 1 );
  167. klient->getNachrichtEncrypted( &serverReturn, 1 );
  168. klient->trenne();
  169. Text *lsIpT = new Text( "" );
  170. lsIpT->append( (int)lsIp[ 0 ] );
  171. lsIpT->append( "." );
  172. lsIpT->append( (int)lsIp[ 1 ] );
  173. lsIpT->append( "." );
  174. lsIpT->append( (int)lsIp[ 2 ] );
  175. lsIpT->append( "." );
  176. lsIpT->append( (int)lsIp[ 3 ] );
  177. Framework::logLine( ( ( Text( "Zugeteilter Minigame Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
  178. int keyLen = 0;
  179. char *key = 0;
  180. Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::SENDEN );
  181. klient->setSendeKey( key, keyLen );
  182. delete[] key;
  183. Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::EMPFANGEN );
  184. klient->setEmpfangKey( key, keyLen );
  185. delete[] key;
  186. klient->verbinde( lsPort, lsIpT->getText() );
  187. lsIpT = lsIpT->release();
  188. klient->sendeEncrypted( "\3", 1 );
  189. klient->getNachrichtEncrypted( &serverReturn, 1 );
  190. klient->trenne();
  191. }
  192. if( byte == 3 )
  193. {
  194. klient->getNachrichtEncrypted( &byte, 1 );
  195. delete[]fehler;
  196. fehler = new char[ byte + 1 ];
  197. fehler[ byte ] = 0;
  198. klient->getNachrichtEncrypted( fehler, byte );
  199. Framework::logLine( Text( "ERROR: " ) += fehler );
  200. klient->sendeEncrypted( "\3", 1 );
  201. klient->getNachrichtEncrypted( &serverReturn, 1 );
  202. klient->trenne();
  203. klient = klient->release();
  204. cs.unlock();
  205. return 0;
  206. }
  207. }
  208. Framework::logLine( "Verbinung mit Minigame Server wird hergestellt..." );
  209. int keyLen = 0;
  210. char *key = 0;
  211. Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::SENDEN );
  212. klient->setSendeKey( key, keyLen );
  213. delete[] key;
  214. Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::EMPFANGEN );
  215. klient->setEmpfangKey( key, keyLen );
  216. delete[] key;
  217. if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
  218. {
  219. if( klient->sendeEncrypted( "\1", 1 ) )
  220. {
  221. klient->sendeEncrypted( (char*)&klientId, 4 );
  222. char serverReturn = 0;
  223. klient->getNachrichtEncrypted( &serverReturn, 1 );
  224. if( serverReturn == 3 )
  225. {
  226. char byte = 0;
  227. klient->getNachrichtEncrypted( &byte, 1 );
  228. delete[]fehler;
  229. fehler = new char[ byte + 1 ];
  230. fehler[ byte ] = 0;
  231. klient->getNachrichtEncrypted( fehler, byte );
  232. Framework::logLine( Text( "ERROR: " ) += fehler );
  233. klient->sendeEncrypted( "\3", 1 );
  234. klient->getNachrichtEncrypted( &serverReturn, 1 );
  235. klient->trenne();
  236. cs.unlock();
  237. return 0;
  238. }
  239. char *sl = 0;
  240. char slLän = getSchlüssel( &sl );
  241. klient->setSendeKey( sl, slLän );
  242. klient->setEmpfangKey( sl, slLän );
  243. delete[] sl;
  244. verbunden = 1;
  245. cs.unlock();
  246. Framework::logLine( "Erfolgreich mit Minigame Server verbunden." );
  247. return 1;
  248. }
  249. else
  250. {
  251. Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
  252. char *err = "Der dir zugewiesene Minigame Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut.";
  253. delete[]fehler;
  254. fehler = new char[ textLength( err ) + 1 ];
  255. fehler[ textLength( err ) ] = 0;
  256. memcpy( fehler, err, textLength( err ) );
  257. klient = klient->release();
  258. }
  259. }
  260. else
  261. {
  262. Framework::logLine( "ERROR: Server nicht erreichbar." );
  263. char *err = "Der dir zugewiesene Minigame Server antwortet nicht. Bitte versuche es Später erneut.";
  264. delete[]fehler;
  265. fehler = new char[ textLength( err ) + 1 ];
  266. fehler[ textLength( err ) ] = 0;
  267. memcpy( fehler, err, textLength( err ) );
  268. klient = klient->release();
  269. }
  270. cs.unlock();
  271. return 0;
  272. }
  273. // Gibt die liste mit allen Optionen zu einem Minigame zurück, zu denen es Welt beste Scores gibt
  274. // mName: Der Name des Minigames
  275. // zOptionList: Ein Zeiger auf ein Array von Texten, in denen die Optionen gespeichert werden
  276. // return: Anzahl der Optionen
  277. int MinigameClient::getMinigameOptionList( char *mName, RCArray< Text > *zOptionList )
  278. {
  279. if( !verbunden )
  280. verbinde();
  281. if( !verbunden )
  282. return 0;
  283. if( needCapture )
  284. return 0;
  285. cs.lock();
  286. klient->sendeEncrypted( "\x6", 1 );
  287. char ret = 0;
  288. klient->getNachrichtEncrypted( &ret, 1 );
  289. if( ret == 1 )
  290. {
  291. char l = (char)textLength( mName );
  292. klient->sendeEncrypted( &l, 1 );
  293. klient->sendeEncrypted( mName, l );
  294. int anz = 0;
  295. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  296. for( int i = 0; i < anz; i++ )
  297. {
  298. klient->getNachrichtEncrypted( &l, 1 );
  299. char *option = new char[ l + 1 ];
  300. option[ l ] = 0;
  301. klient->getNachrichtEncrypted( option, l );
  302. zOptionList->add( new Text( option ) );
  303. delete[] option;
  304. }
  305. cs.unlock();
  306. return anz;
  307. }
  308. if( ret == 3 )
  309. {
  310. char l = 0;
  311. klient->getNachrichtEncrypted( &l, 1 );
  312. delete[] fehler;
  313. fehler = new char[ l + 1 ];
  314. fehler[ l ] = 0;
  315. klient->getNachrichtEncrypted( fehler, l );
  316. }
  317. cs.unlock();
  318. return 0;
  319. }
  320. // Gibt eine Liste mit den Weltbesten Scores zurück
  321. // mName: Der Name des Minigames
  322. // zScore: (rückgabe) Ein Array von Scores
  323. // zPlayerList: (rückgabe) Ein Array von Spielernamen, die die Scores erreicht haben.
  324. // zOptionList: (rückgabe) Ein Array von Optionen, die beim erreichen der Scores aktiv waren.
  325. // return: Anzahl der Scores
  326. int MinigameClient::getMinigameBestscoreList( char *mName, Array< int > *zScore, RCArray< Text > *zPlayerList, RCArray< Text > *zOptionList )
  327. {
  328. if( !verbunden )
  329. verbinde();
  330. if( !verbunden )
  331. return 0;
  332. if( needCapture )
  333. return 0;
  334. cs.lock();
  335. klient->sendeEncrypted( "\x7", 1 );
  336. char ret = 0;
  337. klient->getNachrichtEncrypted( &ret, 1 );
  338. if( ret == 1 )
  339. {
  340. char l = (char)textLength( mName );
  341. klient->sendeEncrypted( &l, 1 );
  342. klient->sendeEncrypted( mName, l );
  343. int anz = 0;
  344. klient->getNachrichtEncrypted( (char*)&anz, 4 );
  345. for( int i = 0; i < anz; i++ )
  346. {
  347. int score = 0;
  348. klient->getNachrichtEncrypted( (char*)&score, 4 );
  349. zScore->add( score );
  350. klient->getNachrichtEncrypted( &l, 1 );
  351. char *player = new char[ l + 1 ];
  352. player[ l ] = 0;
  353. klient->getNachrichtEncrypted( player, l );
  354. zPlayerList->add( new Text( player ) );
  355. delete[] player;
  356. klient->getNachrichtEncrypted( &l, 1 );
  357. char *option = new char[ l + 1 ];
  358. option[ l ] = 0;
  359. klient->getNachrichtEncrypted( option, l );
  360. zOptionList->add( new Text( option ) );
  361. delete[] option;
  362. }
  363. cs.unlock();
  364. return anz;
  365. }
  366. if( ret == 3 )
  367. {
  368. char l = 0;
  369. klient->getNachrichtEncrypted( &l, 1 );
  370. delete[] fehler;
  371. fehler = new char[ l + 1 ];
  372. fehler[ l ] = 0;
  373. klient->getNachrichtEncrypted( fehler, l );
  374. }
  375. cs.unlock();
  376. return 0;
  377. }
  378. // Gibt den Welt bestscore zu einem Bestimmten Minigame mit bestimmten Optionen zurück.
  379. // mName: Der Name des Minigames
  380. // oName: Die Optionen
  381. // zPlayer: (rückgabe) Der Spielername, der den Score erreicht hat
  382. // return: Der Score der erreicht wurde
  383. int MinigameClient::getMinigameOptionBestscore( char *mName, char *oName, Text *zPlayer )
  384. {
  385. if( !verbunden )
  386. verbinde();
  387. if( !verbunden )
  388. return 0;
  389. if( needCapture )
  390. return 0;
  391. cs.lock();
  392. klient->sendeEncrypted( "\x8", 1 );
  393. char ret = 0;
  394. klient->getNachrichtEncrypted( &ret, 1 );
  395. if( ret == 1 )
  396. {
  397. char l = (char)textLength( mName );
  398. klient->sendeEncrypted( &l, 1 );
  399. klient->sendeEncrypted( mName, l );
  400. l = (char)textLength( oName );
  401. klient->sendeEncrypted( &l, 1 );
  402. klient->sendeEncrypted( oName, l );
  403. int score = 0;
  404. klient->getNachrichtEncrypted( (char*)&score, 4 );
  405. klient->getNachrichtEncrypted( &l, 1 );
  406. char *player = new char[ l + 1 ];
  407. player[ l ] = 0;
  408. klient->getNachrichtEncrypted( player, l );
  409. zPlayer->setText( player );
  410. delete[] player;
  411. cs.unlock();
  412. return score;
  413. }
  414. if( ret == 3 )
  415. {
  416. char l = 0;
  417. klient->getNachrichtEncrypted( &l, 1 );
  418. delete[] fehler;
  419. fehler = new char[ l + 1 ];
  420. fehler[ l ] = 0;
  421. klient->getNachrichtEncrypted( fehler, l );
  422. }
  423. cs.unlock();
  424. return 0;
  425. }
  426. // Meldet die Beendigung eines Minigames
  427. // mName: Der Name des Minigames
  428. // oName: Die Optionen mit denen gespielt wurde
  429. // score: Der Erreichte Score
  430. // return: 0: Im Falle eines Fehlers, 1: Im Falle eines Erfolgs, 2: Falls ein Game Capture hochgeladen werden muss
  431. int MinigameClient::reportEndOfGame( char *mName, char *oName, int score )
  432. {
  433. if( !verbunden )
  434. verbinde();
  435. if( !verbunden )
  436. return 0;
  437. if( needCapture )
  438. return 0;
  439. cs.lock();
  440. klient->sendeEncrypted( "\x9", 1 );
  441. char ret = 0;
  442. klient->getNachrichtEncrypted( &ret, 1 );
  443. if( ret == 1 )
  444. {
  445. char l = (char)textLength( mName );
  446. klient->sendeEncrypted( &l, 1 );
  447. klient->sendeEncrypted( mName, l );
  448. l = (char)textLength( oName );
  449. klient->sendeEncrypted( &l, 1 );
  450. klient->sendeEncrypted( oName, l );
  451. klient->sendeEncrypted( (char*)&score, 4 );
  452. klient->getNachrichtEncrypted( &ret, 1 );
  453. if( ret == 1 )
  454. {
  455. cs.unlock();
  456. needCapture = 1;
  457. return 2;
  458. }
  459. cs.unlock();
  460. return 1;
  461. }
  462. if( ret == 3 )
  463. {
  464. char l = 0;
  465. klient->getNachrichtEncrypted( &l, 1 );
  466. delete[] fehler;
  467. fehler = new char[ l + 1 ];
  468. fehler[ l ] = 0;
  469. klient->getNachrichtEncrypted( fehler, l );
  470. }
  471. cs.unlock();
  472. return 0;
  473. }
  474. // Lädt ein Game Capture hoch
  475. // zCapture: Ein Zeiger auf die Capture Datei
  476. // return: 1, falls erfolgreich
  477. bool MinigameClient::uploadGameCapture( Datei *zCapture )
  478. {
  479. if( !verbunden )
  480. verbinde();
  481. if( !verbunden )
  482. return 0;
  483. if( !needCapture )
  484. return 0;
  485. cs.lock();
  486. int size = (int)zCapture->getSize();
  487. if( !zCapture->istOffen() )
  488. zCapture->open( Datei::Style::lesen );
  489. klient->sendeEncrypted( (char*)&size, 4 );
  490. char *buffer = new char[ 2048 ];
  491. while( size > 0 )
  492. {
  493. int l = size > 2048 ? 2048 : size;
  494. zCapture->lese( buffer, l );
  495. klient->sendeEncrypted( buffer, l );
  496. size -= l;
  497. }
  498. delete[] buffer;
  499. zCapture->close();
  500. needCapture = 0;
  501. cs.unlock();
  502. return 1;
  503. }
  504. // Lädt ein Game Capture herunter
  505. // mName: Der Name des Minigames
  506. // oName: Die Optionen
  507. // return: Ein Zeiger auf die Datei mit dem Capture
  508. Datei *MinigameClient::downloadGameCapture( char *mName, char *oName )
  509. {
  510. if( !verbunden )
  511. verbinde();
  512. if( !verbunden )
  513. return 0;
  514. if( needCapture )
  515. return 0;
  516. cs.lock();
  517. klient->sendeEncrypted( "\xA", 1 );
  518. char ret = 0;
  519. klient->getNachrichtEncrypted( &ret, 1 );
  520. if( ret == 1 )
  521. {
  522. char l = (char)textLength( mName );
  523. klient->sendeEncrypted( &l, 1 );
  524. klient->sendeEncrypted( mName, l );
  525. l = (char)textLength( oName );
  526. klient->sendeEncrypted( &l, 1 );
  527. klient->sendeEncrypted( oName, l );
  528. klient->getNachrichtEncrypted( &ret, 1 );
  529. if( ret == 1 )
  530. {
  531. Datei *capture = new Datei();
  532. capture->setDatei( "data/tmp/minigames/wb.mgc" );
  533. capture->erstellen();
  534. capture->open( Datei::Style::schreiben );
  535. int size = 0;
  536. klient->getNachrichtEncrypted( (char*)&size, 4 );
  537. char *buffer = new char[ 2048 ];
  538. while( size > 0 )
  539. {
  540. int l = size > 2048 ? 2048 : size;
  541. klient->getNachrichtEncrypted( buffer, l );
  542. capture->schreibe( buffer, l );
  543. size -= l;
  544. }
  545. delete[] buffer;
  546. capture->close();
  547. cs.unlock();
  548. return capture;
  549. }
  550. cs.unlock();
  551. return 0;
  552. }
  553. if( ret == 3 )
  554. {
  555. char l = 0;
  556. klient->getNachrichtEncrypted( &l, 1 );
  557. delete[] fehler;
  558. fehler = new char[ l + 1 ];
  559. fehler[ l ] = 0;
  560. klient->getNachrichtEncrypted( fehler, l );
  561. }
  562. cs.unlock();
  563. return 0;
  564. }
  565. bool MinigameClient::keepAlive()
  566. {
  567. if( needCapture )
  568. return 1;
  569. if( !verbunden )
  570. return 0;
  571. char res = 0;
  572. if( !cs.tryLock() )
  573. return 1;
  574. Framework::logLine( "Verbindungstest zum Minigame Server..." );
  575. bool ok = klient->sendeEncrypted( "\x5", 1 );
  576. ok &= klient->getNachrichtEncrypted( &res, 1 );
  577. cs.unlock();
  578. if( res != 1 || !ok )
  579. {
  580. Framework::logLine( "Verbindungsabbruch." );
  581. trenne();
  582. }
  583. else
  584. Framework::logLine( "Verbindung besteht." );
  585. return res == 1;
  586. }
  587. // Erhält die Verbindung aufrecht
  588. bool MinigameClient::trenne()
  589. {
  590. if( verbunden )
  591. {
  592. cs.lock();
  593. Framework::logLine( "Verbindung zum Minigame Server wird getrennt..." );
  594. if( needCapture )
  595. klient->sendeEncrypted( "\0\0\0\0", 4 );
  596. needCapture = 0;
  597. klient->sendeEncrypted( "\3", 1 );
  598. char serverReturn = 0;
  599. klient->getNachrichtEncrypted( &serverReturn, 1 );
  600. klient->trenne();
  601. verbunden = 0;
  602. cs.unlock();
  603. }
  604. return 1;
  605. }
  606. // trennt sich von dem Minigame Server
  607. bool MinigameClient::istVerbunden() const
  608. {
  609. return verbunden;
  610. }
  611. // prüft, ob mit Editor Server verbunden
  612. char *MinigameClient::getLetzterFehler() const
  613. {
  614. return fehler;
  615. }
  616. // gibt den Letzten Fehlertext zuück
  617. // Reference Counting
  618. MinigameKlientV *MinigameClient::getThis()
  619. {
  620. ref++;
  621. return this;
  622. }
  623. MinigameKlientV *MinigameClient::release()
  624. {
  625. if( !--ref )
  626. delete this;
  627. return 0;
  628. }