Datenbank.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751
  1. #include "Datenbank.h"
  2. #include <Datei.h>
  3. #include <iostream>
  4. // Inhalt der ESDatenbank Klasse aus Datenbank.h
  5. // Konstruktor
  6. ESDatenbank::ESDatenbank( InitDatei *zIni )
  7. : ReferenceCounter()
  8. {
  9. datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(),
  10. zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
  11. (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) );
  12. if( !datenbank->istOk() )
  13. {
  14. std::cout << "ES: Die Verbindung zur Datenbank konnte nicht hergestellt werden.\nDas Programm wird beendet.";
  15. exit( 1 );
  16. }
  17. InitializeCriticalSection( &cs );
  18. Text befehl = "SELECT port, admin_port FROM server WHERE id = ";
  19. befehl += zIni->zWert( "ServerId" )->getText();
  20. lock();
  21. datenbank->befehl( befehl );
  22. Result res = datenbank->getResult();
  23. unlock();
  24. if( res.zeilenAnzahl == 1 )
  25. {
  26. zIni->addWert( "ServerPort", res.values[ 0 ] );
  27. zIni->addWert( "AdminServerPort", res.values[ 1 ] );
  28. }
  29. res.destroy();
  30. }
  31. // Destruktor
  32. ESDatenbank::~ESDatenbank()
  33. {
  34. datenbank->release();
  35. DeleteCriticalSection( &cs );
  36. }
  37. // nicht constant
  38. void ESDatenbank::lock()
  39. {
  40. EnterCriticalSection( &cs );
  41. }
  42. void ESDatenbank::unlock()
  43. {
  44. LeaveCriticalSection( &cs );
  45. }
  46. int ESDatenbank::istAdministrator( const char *name, const char *passwort )
  47. {
  48. Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" );
  49. Text n( name );
  50. n.ersetzen( "'", "''" );
  51. befehl->append( (char *)n );
  52. befehl->append( "' AND passwort = md5('" );
  53. Text p( passwort );
  54. p.ersetzen( "'", "''" );
  55. befehl->append( (char *)p );
  56. befehl->append( "')" );
  57. lock();
  58. datenbank->befehl( befehl->getText() );
  59. Result res = datenbank->getResult();
  60. unlock();
  61. befehl->release();
  62. int ret = 0;
  63. if( res.zeilenAnzahl > 0 )
  64. ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  65. res.destroy();
  66. return ret;
  67. }
  68. bool ESDatenbank::adminHatRecht( int id, int recht )
  69. {
  70. Text *befehl = new Text( "SELECT * FROM benutzer_rechte WHERE benutzer_id = " );
  71. befehl->append( id );
  72. befehl->append( " AND rechte_id = " );
  73. befehl->append( recht );
  74. lock();
  75. datenbank->befehl( befehl->getText() );
  76. int ret = datenbank->getZeilenAnzahl();
  77. unlock();
  78. befehl->release();
  79. return ret != 0;
  80. }
  81. bool ESDatenbank::proveKlient( int num, int sNum )
  82. {
  83. Text *befehl = new Text( "SELECT * FROM server_client WHERE server_id = " );
  84. befehl->append( sNum );
  85. befehl->append( " AND client_id = " );
  86. befehl->append( num );
  87. lock();
  88. datenbank->befehl( befehl->getText() );
  89. Result res = datenbank->getResult();
  90. unlock();
  91. befehl->release();
  92. bool ret = 0;
  93. if( res.zeilenAnzahl == 1 )
  94. ret = 1;
  95. res.destroy();
  96. return ret;
  97. }
  98. Text *ESDatenbank::getKlientKey( int cId )
  99. {
  100. lock();
  101. if( !datenbank->befehl( Text( "SELECT schluessel FROM client WHERE id = " ) += cId ) )
  102. {
  103. unlock();
  104. return 0;
  105. }
  106. Result res = datenbank->getResult();
  107. unlock();
  108. if( !res.zeilenAnzahl )
  109. {
  110. res.destroy();
  111. return 0;
  112. }
  113. Text *ret = new Text( res.values[ 0 ].getText() );
  114. res.destroy();
  115. return ret;
  116. }
  117. void ESDatenbank::unregisterKlient( int num, int sNum )
  118. {
  119. Text *befehl = new Text( "DELETE FROM server_client WHERE client_id = " );
  120. befehl->append( num );
  121. befehl->append( " AND server_id = " );
  122. befehl->append( sNum );
  123. lock();
  124. datenbank->befehl( befehl->getText() );
  125. int za = datenbank->getZeilenAnzahl();
  126. unlock();
  127. if( za == 1 )
  128. {
  129. befehl->setText( "UPDATE server SET tasks = tasks - 1 WHERE id = " );
  130. befehl->append( sNum );
  131. lock();
  132. datenbank->befehl( befehl->getText() );
  133. unlock();
  134. }
  135. befehl->release();
  136. }
  137. bool ESDatenbank::setServerStatus( int id, int status )
  138. {
  139. Text *befehl = new Text( "UPDATE server SET server_status_id = " );
  140. *befehl += status;
  141. *befehl += "WHERE id = ";
  142. *befehl += id;
  143. lock();
  144. if( !datenbank->befehl( befehl->getText() ) )
  145. {
  146. unlock();
  147. befehl->release();
  148. return 0;
  149. }
  150. bool ret = datenbank->getZeilenAnzahl() != 0;
  151. unlock();
  152. befehl->release();
  153. return ret;
  154. }
  155. bool ESDatenbank::setMaxClients( int id, int maxC )
  156. {
  157. Text *befehl = new Text( "UPDATE server SET max_tasks = " );
  158. befehl->append( maxC );
  159. befehl->append( " WHERE id = " );
  160. befehl->append( id );
  161. lock();
  162. if( !datenbank->befehl( befehl->getText() ) )
  163. {
  164. unlock();
  165. befehl->release();
  166. return 0;
  167. }
  168. bool ret = datenbank->getZeilenAnzahl() > 0;
  169. unlock();
  170. befehl->release();
  171. return ret;
  172. }
  173. bool ESDatenbank::serverIstNichtPausiert( int id )
  174. {
  175. Text *befehl = new Text( "SELECT server_status_id FROM server WHERE id = " );
  176. befehl->append( id );
  177. lock();
  178. if( !datenbank->befehl( befehl->getText() ) )
  179. {
  180. unlock();
  181. befehl->release();
  182. return 0;
  183. }
  184. Result res = datenbank->getResult();
  185. unlock();
  186. befehl->release();
  187. if( !res.zeilenAnzahl )
  188. {
  189. res.destroy();
  190. return 0;
  191. }
  192. bool ret = (int)res.values[ 0 ] == 3;
  193. res.destroy();
  194. return ret;
  195. }
  196. bool ESDatenbank::getPatchServer( int client, Text *ip, int *port )
  197. {
  198. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  199. "WHERE a.id = b.server_id AND a.server_typ_name = 'patch' AND b.client_id = " );
  200. befehl->append( client );
  201. lock();
  202. if( !datenbank->befehl( befehl->getText() ) )
  203. {
  204. unlock();
  205. befehl->release();
  206. return 0;
  207. }
  208. Result res = datenbank->getResult();
  209. unlock();
  210. befehl->release();
  211. if( !res.zeilenAnzahl )
  212. {
  213. res.destroy();
  214. return 0;
  215. }
  216. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  217. ip->setText( res.values[ 1 ].getText() );
  218. res.destroy();
  219. return 1;
  220. }
  221. bool ESDatenbank::getRegisterServer( int client, Text *ip, int *port )
  222. {
  223. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  224. "WHERE a.id = b.server_id AND a.server_typ_name = 'register' AND b.client_id = " );
  225. befehl->append( client );
  226. lock();
  227. if( !datenbank->befehl( befehl->getText() ) )
  228. {
  229. unlock();
  230. befehl->release();
  231. return 0;
  232. }
  233. Result res = datenbank->getResult();
  234. unlock();
  235. befehl->release();
  236. if( !res.zeilenAnzahl )
  237. {
  238. res.destroy();
  239. return 0;
  240. }
  241. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  242. ip->setText( res.values[ 1 ].getText() );
  243. res.destroy();
  244. return 1;
  245. }
  246. bool ESDatenbank::getLoginServer( int client, Text *ip, int *port )
  247. {
  248. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  249. "WHERE a.id = b.server_id AND a.server_typ_name = 'login' AND b.client_id = " );
  250. befehl->append( client );
  251. lock();
  252. if( !datenbank->befehl( befehl->getText() ) )
  253. {
  254. unlock();
  255. befehl->release();
  256. return 0;
  257. }
  258. Result res = datenbank->getResult();
  259. unlock();
  260. befehl->release();
  261. if( !res.zeilenAnzahl )
  262. {
  263. res.destroy();
  264. return 0;
  265. }
  266. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  267. ip->setText( res.values[ 1 ].getText() );
  268. res.destroy();
  269. return 1;
  270. }
  271. bool ESDatenbank::getInformationServer( int client, Text *ip, int *port )
  272. {
  273. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  274. "WHERE a.id = b.server_id AND a.server_typ_name = 'information' AND b.client_id = " );
  275. befehl->append( client );
  276. lock();
  277. if( !datenbank->befehl( befehl->getText() ) )
  278. {
  279. unlock();
  280. befehl->release();
  281. return 0;
  282. }
  283. Result res = datenbank->getResult();
  284. unlock();
  285. befehl->release();
  286. if( !res.zeilenAnzahl )
  287. {
  288. res.destroy();
  289. return 0;
  290. }
  291. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  292. ip->setText( res.values[ 1 ].getText() );
  293. res.destroy();
  294. return 1;
  295. }
  296. bool ESDatenbank::getChatServer( int client, Text *ip, int *port )
  297. {
  298. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  299. "WHERE a.id = b.server_id AND a.server_typ_name = 'chat' AND b.client_id = " );
  300. befehl->append( client );
  301. lock();
  302. if( !datenbank->befehl( befehl->getText() ) )
  303. {
  304. unlock();
  305. befehl->release();
  306. return 0;
  307. }
  308. Result res = datenbank->getResult();
  309. unlock();
  310. befehl->release();
  311. if( !res.zeilenAnzahl )
  312. {
  313. res.destroy();
  314. return 0;
  315. }
  316. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  317. ip->setText( res.values[ 1 ].getText() );
  318. res.destroy();
  319. return 1;
  320. }
  321. bool ESDatenbank::getAnmeldungServer( int client, Text *ip, int *port )
  322. {
  323. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  324. "WHERE a.id = b.server_id AND a.server_typ_name = 'anmeldung' AND b.client_id = " );
  325. befehl->append( client );
  326. lock();
  327. if( !datenbank->befehl( befehl->getText() ) )
  328. {
  329. unlock();
  330. befehl->release();
  331. return 0;
  332. }
  333. Result res = datenbank->getResult();
  334. unlock();
  335. befehl->release();
  336. if( !res.zeilenAnzahl )
  337. {
  338. res.destroy();
  339. return 0;
  340. }
  341. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  342. ip->setText( res.values[ 1 ].getText() );
  343. res.destroy();
  344. return 1;
  345. }
  346. bool ESDatenbank::getSpielServer( int client, Text *ip, int *port )
  347. {
  348. Text *befehl = new Text( "SELECT account_id FROM account_client WHERE client_id = " );
  349. befehl->append( client );
  350. lock();
  351. if( !datenbank->befehl( befehl->getText() ) )
  352. {
  353. unlock();
  354. befehl->release();
  355. return 0;
  356. }
  357. Result res = datenbank->getResult();
  358. unlock();
  359. if( !res.zeilenAnzahl )
  360. {
  361. res.destroy();
  362. befehl->release();
  363. return 0;
  364. }
  365. int accountId = TextZuInt( res.values[ 0 ].getText(), 10 );
  366. res.destroy();
  367. befehl->setText( "SELECT a.spiel_server_id FROM spiel a, spiel_spieler b WHERE b.spiel_id = a.id "
  368. "AND a.spiel_status_id < 3 AND b.spiel_spieler_status_id = 5 AND b.account_id = " );
  369. befehl->append( accountId );
  370. lock();
  371. if( !datenbank->befehl( befehl->getText() ) )
  372. {
  373. unlock();
  374. befehl->release();
  375. return 0;
  376. }
  377. res = datenbank->getResult();
  378. unlock();
  379. if( !res.zeilenAnzahl )
  380. {
  381. res.destroy();
  382. befehl->release();
  383. return 0;
  384. }
  385. int serverId = TextZuInt( res.values[ 0 ].getText(), 10 );
  386. res.destroy();
  387. befehl->setText( "SELECT port, ip FROM server WHERE id = " );
  388. befehl->append( serverId );
  389. lock();
  390. if( !datenbank->befehl( befehl->getText() ) )
  391. {
  392. unlock();
  393. befehl->release();
  394. return 0;
  395. }
  396. res = datenbank->getResult();
  397. unlock();
  398. befehl->release();
  399. if( !res.zeilenAnzahl )
  400. {
  401. res.destroy();
  402. return 0;
  403. }
  404. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  405. ip->setText( res.values[ 1 ].getText() );
  406. res.destroy();
  407. return 1;
  408. }
  409. bool ESDatenbank::getShopServer( int client, Text *ip, int *port )
  410. {
  411. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  412. "WHERE a.id = b.server_id AND a.server_typ_name = 'shop' AND b.client_id = " );
  413. befehl->append( client );
  414. lock();
  415. if( !datenbank->befehl( befehl->getText() ) )
  416. {
  417. unlock();
  418. befehl->release();
  419. return 0;
  420. }
  421. Result res = datenbank->getResult();
  422. unlock();
  423. befehl->release();
  424. if( !res.zeilenAnzahl )
  425. {
  426. res.destroy();
  427. return 0;
  428. }
  429. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  430. ip->setText( res.values[ 1 ].getText() );
  431. res.destroy();
  432. return 1;
  433. }
  434. bool ESDatenbank::getNewsServer( int client, Text *ip, int *port )
  435. {
  436. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  437. "WHERE a.id = b.server_id AND a.server_typ_name = 'news' AND b.client_id = " );
  438. befehl->append( client );
  439. lock();
  440. if( !datenbank->befehl( befehl->getText() ) )
  441. {
  442. unlock();
  443. befehl->release();
  444. return 0;
  445. }
  446. Result res = datenbank->getResult();
  447. unlock();
  448. befehl->release();
  449. if( !res.zeilenAnzahl )
  450. {
  451. res.destroy();
  452. return 0;
  453. }
  454. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  455. ip->setText( res.values[ 1 ].getText() );
  456. res.destroy();
  457. return 1;
  458. }
  459. bool ESDatenbank::getHistorieServer( int client, Text *ip, int *port )
  460. {
  461. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  462. "WHERE a.id = b.server_id AND a.server_typ_name = 'historie' AND b.client_id = " );
  463. befehl->append( client );
  464. lock();
  465. if( !datenbank->befehl( befehl->getText() ) )
  466. {
  467. unlock();
  468. befehl->release();
  469. return 0;
  470. }
  471. Result res = datenbank->getResult();
  472. unlock();
  473. befehl->release();
  474. if( !res.zeilenAnzahl )
  475. {
  476. res.destroy();
  477. return 0;
  478. }
  479. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  480. ip->setText( res.values[ 1 ].getText() );
  481. res.destroy();
  482. return 1;
  483. }
  484. bool ESDatenbank::getKartenServer( int client, Text *ip, int *port )
  485. {
  486. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  487. "WHERE a.id = b.server_id AND a.server_typ_name = 'karten' AND b.client_id = " );
  488. befehl->append( client );
  489. lock();
  490. if( !datenbank->befehl( befehl->getText() ) )
  491. {
  492. unlock();
  493. befehl->release();
  494. return 0;
  495. }
  496. Result res = datenbank->getResult();
  497. unlock();
  498. befehl->release();
  499. if( !res.zeilenAnzahl )
  500. {
  501. res.destroy();
  502. return 0;
  503. }
  504. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  505. ip->setText( res.values[ 1 ].getText() );
  506. res.destroy();
  507. return 1;
  508. }
  509. bool ESDatenbank::getEditorServer( int client, Text *ip, int *port )
  510. {
  511. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  512. "WHERE a.id = b.server_id AND a.server_typ_name = 'editor' AND b.client_id = " );
  513. befehl->append( client );
  514. lock();
  515. if( !datenbank->befehl( befehl->getText() ) )
  516. {
  517. unlock();
  518. befehl->release();
  519. return 0;
  520. }
  521. Result res = datenbank->getResult();
  522. unlock();
  523. befehl->release();
  524. if( !res.zeilenAnzahl )
  525. {
  526. res.destroy();
  527. return 0;
  528. }
  529. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  530. ip->setText( res.values[ 1 ].getText() );
  531. res.destroy();
  532. return 1;
  533. }
  534. bool ESDatenbank::getMinigameServer( int client, Text *ip, int *port )
  535. {
  536. Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
  537. "WHERE a.id = b.server_id AND a.server_typ_name = 'minigame' AND b.client_id = " );
  538. befehl->append( client );
  539. lock();
  540. if( !datenbank->befehl( befehl->getText() ) )
  541. {
  542. unlock();
  543. befehl->release();
  544. return 0;
  545. }
  546. Result res = datenbank->getResult();
  547. unlock();
  548. befehl->release();
  549. if( !res.zeilenAnzahl )
  550. {
  551. res.destroy();
  552. return 0;
  553. }
  554. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  555. ip->setText( res.values[ 1 ].getText() );
  556. res.destroy();
  557. return 1;
  558. }
  559. void ESDatenbank::removeKlient( int klientId )
  560. {
  561. Text *befehl = new Text( "SELECT unregister_client( " );
  562. befehl->append( klientId );
  563. befehl->append( " )" );
  564. lock();
  565. datenbank->befehl( befehl->getText() );
  566. unlock();
  567. befehl->release();
  568. }
  569. int ESDatenbank::clientIstEingeloggt( int clientId )
  570. {
  571. Text *befehl = new Text( "SELECT account_id FROM account_client WHERE client_id = " );
  572. befehl->append( clientId );
  573. lock();
  574. if( !datenbank->befehl( befehl->getText() ) )
  575. {
  576. unlock();
  577. befehl->release();
  578. return 0;
  579. }
  580. Result res = datenbank->getResult();
  581. unlock();
  582. befehl->release();
  583. if( !res.zeilenAnzahl )
  584. {
  585. res.destroy();
  586. return 0;
  587. }
  588. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  589. res.destroy();
  590. return ret;
  591. }
  592. int ESDatenbank::logoutKlient( int klientId, Array< int > *ret )
  593. {
  594. Text *befehl = new Text( "SELECT logout_client( " );
  595. befehl->append( klientId );
  596. befehl->append( " )" );
  597. lock();
  598. datenbank->befehl( befehl->getText() );
  599. Result res = datenbank->getResult();
  600. unlock();
  601. befehl->release();
  602. for( int i = 0; i < res.zeilenAnzahl; i++ )
  603. ret->set( TextZuInt( res.values[ i ].getText(), 10 ), i );
  604. int retVal = res.zeilenAnzahl;
  605. res.destroy();
  606. return retVal;
  607. }
  608. int ESDatenbank::getSpielerAusGruppe( int gruppeId, Array< int > *accountId )
  609. {
  610. Text *befehl = new Text( "SELECT account_id FROM gruppe_spieler WHERE gruppe_id = " );
  611. befehl->append( gruppeId );
  612. lock();
  613. if( !datenbank->befehl( befehl->getText() ) )
  614. {
  615. unlock();
  616. befehl->release();
  617. return 0;
  618. }
  619. Result res = datenbank->getResult();
  620. unlock();
  621. befehl->release();
  622. int ret = res.zeilenAnzahl;
  623. for( int i = 0; i < ret; i++ )
  624. accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
  625. return ret;
  626. }
  627. int ESDatenbank::kickSpielerAusGruppe( int gruppeId, int accountId )
  628. {
  629. Text *befehl = new Text( "SELECT spieler_verlaesst_gruppe( " );
  630. befehl->append( accountId );
  631. befehl->append( ", " );
  632. befehl->append( gruppeId );
  633. befehl->append( " )" );
  634. lock();
  635. if( !datenbank->befehl( befehl->getText() ) )
  636. {
  637. unlock();
  638. befehl->release();
  639. return 0;
  640. }
  641. Result res = datenbank->getResult();
  642. unlock();
  643. befehl->release();
  644. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  645. res.destroy();
  646. return ret;
  647. }
  648. int ESDatenbank::getGruppeAdmin( int gruppeId )
  649. {
  650. Text *befehl = new Text( "SELECT admin_account_id FROM gruppe WHERE id = " );
  651. befehl->append( gruppeId );
  652. lock();
  653. if( !datenbank->befehl( befehl->getText() ) )
  654. {
  655. unlock();
  656. befehl->release();
  657. return 0;
  658. }
  659. Result res = datenbank->getResult();
  660. unlock();
  661. befehl->release();
  662. if( !res.zeilenAnzahl )
  663. {
  664. res.destroy();
  665. return 0;
  666. }
  667. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  668. res.destroy();
  669. return ret;
  670. }
  671. int ESDatenbank::getSpielerAusChatroom( int chatroomId, Array< int > *accountId )
  672. {
  673. Text *befehl = new Text( "SELECT account_id FROM chatroom_spieler WHERE chatroom_id = " );
  674. befehl->append( chatroomId );
  675. lock();
  676. if( !datenbank->befehl( befehl->getText() ) )
  677. {
  678. unlock();
  679. befehl->release();
  680. return 0;
  681. }
  682. Result res = datenbank->getResult();
  683. unlock();
  684. befehl->release();
  685. int ret = res.zeilenAnzahl;
  686. for( int i = 0; i < ret; i++ )
  687. accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
  688. return ret;
  689. }
  690. int ESDatenbank::getChatroomAdmin( int chatroomId )
  691. {
  692. Text *befehl = new Text( "SELECT admin_account_id FROM chatroom WHERE id = " );
  693. befehl->append( chatroomId );
  694. lock();
  695. if( !datenbank->befehl( befehl->getText() ) )
  696. {
  697. unlock();
  698. befehl->release();
  699. return 0;
  700. }
  701. Result res = datenbank->getResult();
  702. unlock();
  703. befehl->release();
  704. if( !res.zeilenAnzahl )
  705. {
  706. res.destroy();
  707. return 0;
  708. }
  709. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  710. res.destroy();
  711. return ret;
  712. }
  713. // constant
  714. Text *ESDatenbank::getLetzterFehler() const
  715. {
  716. return datenbank->getLetzterFehler();
  717. }