Datenbank.cpp 33 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225
  1. #include "Datenbank.h"
  2. #include <iostream>
  3. // Inhalt der MSDatenbank Klasse aus Datenbank.h
  4. // Konstruktor
  5. MSDatenbank::MSDatenbank( InitDatei *zDat )
  6. {
  7. if( !zDat->wertExistiert( "DBBenutzer" ) )
  8. zDat->addWert( "DBBenutzer", "mainserveru" );
  9. if( !zDat->wertExistiert( "DBPasswort" ) )
  10. zDat->addWert( "DBPasswort", "LTMainServerPW" );
  11. if( !zDat->wertExistiert( "DBName" ) )
  12. zDat->addWert( "DBName", "koljadb" );
  13. if( !zDat->wertExistiert( "DBIP" ) )
  14. zDat->addWert( "DBIP", "127.0.0.1" );
  15. if( !zDat->wertExistiert( "DBPort" ) )
  16. zDat->addWert( "DBPort", "5432" );
  17. datenbank = new Datenbank( zDat->zWert( "DBBenutzer" )->getText(), zDat->zWert( "DBPasswort" )->getText(),
  18. zDat->zWert( "DBName" )->getText(), zDat->zWert( "DBIP" )->getText(),
  19. (unsigned short)TextZuInt( zDat->zWert( "DBPort" )->getText(), 10 ) );
  20. if( !datenbank->istOk() )
  21. {
  22. std::cout << "MS: Es konnte keine Verbindung zur Datenbank hergestellt werden:\n";
  23. Text *txt = datenbank->getLetzterFehler();
  24. std::cout << txt->getText() << "\nDas Programm wird beendet.";
  25. txt->release();
  26. exit( 1 );
  27. }
  28. InitializeCriticalSection( &ths );
  29. ref = 1;
  30. }
  31. // Detruktor
  32. MSDatenbank::~MSDatenbank()
  33. {
  34. datenbank->release();
  35. DeleteCriticalSection( &ths );
  36. }
  37. // nicht constant
  38. void MSDatenbank::lock()
  39. {
  40. EnterCriticalSection( &ths );
  41. }
  42. void MSDatenbank::unlock()
  43. {
  44. LeaveCriticalSection( &ths );
  45. }
  46. int MSDatenbank::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 = '" );
  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 MSDatenbank::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. unsigned int MSDatenbank::getNextClientId()
  82. {
  83. lock();
  84. if( !datenbank->befehl( "SELECT get_next_client_id()" ) )
  85. {
  86. unlock();
  87. return 0;
  88. }
  89. Result res = datenbank->getResult();
  90. unlock();
  91. unsigned int ret = (unsigned int)TextZuInt( res.values[ 0 ].getText(), 10 );
  92. res.destroy();
  93. return ret;
  94. }
  95. Text *MSDatenbank::getKlientKey( int cId )
  96. {
  97. lock();
  98. if( !datenbank->befehl( Text( "SELECT schluessel FROM clients WHERE id = " ) += cId ) )
  99. {
  100. unlock();
  101. return 0;
  102. }
  103. Result res = datenbank->getResult();
  104. unlock();
  105. if( !res.zeilenAnzahl )
  106. {
  107. res.destroy();
  108. return 0;
  109. }
  110. Text *ret = new Text( res.values[ 0 ].getText() );
  111. res.destroy();
  112. return ret;
  113. }
  114. bool MSDatenbank::proveRegisteredClient( unsigned int num )
  115. {
  116. Text *befehl = new Text( "SELECT * FROM clients WHERE id = " );
  117. befehl->append( num );
  118. lock();
  119. if( !datenbank->befehl( befehl->getText() ) )
  120. {
  121. unlock();
  122. befehl->release();
  123. return 0;
  124. }
  125. befehl->release();
  126. Result res = datenbank->getResult();
  127. unlock();
  128. bool ret = res.zeilenAnzahl == 1;
  129. res.destroy();
  130. return ret;
  131. }
  132. int *MSDatenbank::unregisterClient( unsigned int num )
  133. {
  134. Text *befehl = new Text( "SELECT unregister_client( " );
  135. befehl->append( num );
  136. befehl->append( " )" );
  137. lock();
  138. if( !datenbank->befehl( befehl->getText() ) )
  139. {
  140. unlock();
  141. befehl->release();
  142. return 0;
  143. }
  144. Result res = datenbank->getResult();
  145. unlock();
  146. befehl->release();
  147. int *ret = new int[ res.zeilenAnzahl ];
  148. for( int i = 0; i < res.zeilenAnzahl; i++ )
  149. ret[ i ] = TextZuInt( res.values[ i ].getText(), 10 );
  150. res.destroy();
  151. return ret;
  152. }
  153. int MSDatenbank::suchPatchServer( unsigned int client )
  154. {
  155. Text *befehl = new Text( "SELECT such_patch_server( " );
  156. befehl->append( client );
  157. befehl->append( " )" );
  158. lock();
  159. if( !datenbank->befehl( befehl->getText() ) )
  160. {
  161. unlock();
  162. befehl->release();
  163. return 0;
  164. }
  165. befehl->release();
  166. Result res = datenbank->getResult();
  167. unlock();
  168. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  169. res.destroy();
  170. return ret;
  171. }
  172. unsigned char *MSDatenbank::getPatchServerPortIp( int num )
  173. {
  174. Text *befehl = new Text( "SELECT port, ip FROM server_patch WHERE id = " );
  175. befehl->append( num );
  176. lock();
  177. if( !datenbank->befehl( befehl->getText() ) )
  178. {
  179. unlock();
  180. befehl->release();
  181. return 0;
  182. }
  183. befehl->release();
  184. Result res = datenbank->getResult();
  185. unlock();
  186. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  187. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  188. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  189. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  190. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  191. res.destroy();
  192. unsigned char *ret = new unsigned char[ 6 ];
  193. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  194. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  195. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  196. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  197. ret[ 4 ] = (unsigned char)( port & 0xFF );
  198. ret[ 5 ] = (unsigned char)( port >> 8 );
  199. ip1->release();
  200. ip2->release();
  201. ip3->release();
  202. ip4->release();
  203. return ret;
  204. }
  205. int MSDatenbank::suchRegisterServer( unsigned int client )
  206. {
  207. Text *befehl = new Text( "SELECT such_register_server( " );
  208. befehl->append( client );
  209. befehl->append( " )" );
  210. lock();
  211. if( !datenbank->befehl( befehl->getText() ) )
  212. {
  213. unlock();
  214. befehl->release();
  215. return 0;
  216. }
  217. befehl->release();
  218. Result res = datenbank->getResult();
  219. unlock();
  220. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  221. res.destroy();
  222. return ret;
  223. }
  224. unsigned char *MSDatenbank::getRegisterServerPortIp( int num )
  225. {
  226. Text *befehl = new Text( "SELECT port, ip FROM server_register WHERE id = " );
  227. befehl->append( num );
  228. lock();
  229. if( !datenbank->befehl( befehl->getText() ) )
  230. {
  231. unlock();
  232. befehl->release();
  233. return 0;
  234. }
  235. befehl->release();
  236. Result res = datenbank->getResult();
  237. unlock();
  238. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  239. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  240. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  241. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  242. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  243. res.destroy();
  244. unsigned char *ret = new unsigned char[ 6 ];
  245. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  246. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  247. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  248. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  249. ret[ 4 ] = (unsigned char)( port & 0xFF );
  250. ret[ 5 ] = (unsigned char)( port >> 8 );
  251. ip1->release();
  252. ip2->release();
  253. ip3->release();
  254. ip4->release();
  255. return ret;
  256. }
  257. int MSDatenbank::suchLoginServer( unsigned int client )
  258. {
  259. Text *befehl = new Text( "SELECT such_login_server( " );
  260. befehl->append( client );
  261. befehl->append( " )" );
  262. lock();
  263. if( !datenbank->befehl( befehl->getText() ) )
  264. {
  265. unlock();
  266. befehl->release();
  267. return 0;
  268. }
  269. befehl->release();
  270. Result res = datenbank->getResult();
  271. unlock();
  272. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  273. res.destroy();
  274. return ret;
  275. }
  276. unsigned char *MSDatenbank::getLoginServerPortIp( int num )
  277. {
  278. Text *befehl = new Text( "SELECT port, ip FROM server_login WHERE id = " );
  279. befehl->append( num );
  280. lock();
  281. if( !datenbank->befehl( befehl->getText() ) )
  282. {
  283. unlock();
  284. befehl->release();
  285. return 0;
  286. }
  287. befehl->release();
  288. Result res = datenbank->getResult();
  289. unlock();
  290. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  291. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  292. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  293. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  294. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  295. res.destroy();
  296. unsigned char *ret = new unsigned char[ 6 ];
  297. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  298. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  299. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  300. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  301. ret[ 4 ] = (unsigned char)( port & 0xFF );
  302. ret[ 5 ] = (unsigned char)( port >> 8 );
  303. ip1->release();
  304. ip2->release();
  305. ip3->release();
  306. ip4->release();
  307. return ret;
  308. }
  309. int MSDatenbank::suchInformationServer( unsigned int client )
  310. {
  311. Text *befehl = new Text( "SELECT such_information_server( " );
  312. befehl->append( client );
  313. befehl->append( " )" );
  314. lock();
  315. if( !datenbank->befehl( befehl->getText() ) )
  316. {
  317. unlock();
  318. befehl->release();
  319. return 0;
  320. }
  321. befehl->release();
  322. Result res = datenbank->getResult();
  323. unlock();
  324. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  325. res.destroy();
  326. return ret;
  327. }
  328. unsigned char *MSDatenbank::getInformationServerPortIp( int num )
  329. {
  330. Text *befehl = new Text( "SELECT port, ip FROM server_information WHERE id = " );
  331. befehl->append( num );
  332. lock();
  333. if( !datenbank->befehl( befehl->getText() ) )
  334. {
  335. unlock();
  336. befehl->release();
  337. return 0;
  338. }
  339. befehl->release();
  340. Result res = datenbank->getResult();
  341. unlock();
  342. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  343. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  344. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  345. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  346. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  347. res.destroy();
  348. unsigned char *ret = new unsigned char[ 6 ];
  349. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  350. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  351. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  352. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  353. ret[ 4 ] = (unsigned char)( port & 0xFF );
  354. ret[ 5 ] = (unsigned char)( port >> 8 );
  355. ip1->release();
  356. ip2->release();
  357. ip3->release();
  358. ip4->release();
  359. return ret;
  360. }
  361. int MSDatenbank::suchChatServer( unsigned int client )
  362. {
  363. Text *befehl = new Text( "SELECT such_chat_server( " );
  364. befehl->append( client );
  365. befehl->append( " )" );
  366. lock();
  367. if( !datenbank->befehl( befehl->getText() ) )
  368. {
  369. unlock();
  370. befehl->release();
  371. return 0;
  372. }
  373. befehl->release();
  374. Result res = datenbank->getResult();
  375. unlock();
  376. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  377. res.destroy();
  378. return ret;
  379. }
  380. unsigned char *MSDatenbank::getChatServerPortIp( int num )
  381. {
  382. Text *befehl = new Text( "SELECT port, ip FROM server_chat WHERE id = " );
  383. befehl->append( num );
  384. lock();
  385. if( !datenbank->befehl( befehl->getText() ) )
  386. {
  387. unlock();
  388. befehl->release();
  389. return 0;
  390. }
  391. befehl->release();
  392. Result res = datenbank->getResult();
  393. unlock();
  394. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  395. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  396. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  397. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  398. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  399. res.destroy();
  400. unsigned char *ret = new unsigned char[ 6 ];
  401. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  402. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  403. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  404. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  405. ret[ 4 ] = (unsigned char)( port & 0xFF );
  406. ret[ 5 ] = (unsigned char)( port >> 8 );
  407. ip1->release();
  408. ip2->release();
  409. ip3->release();
  410. ip4->release();
  411. return ret;
  412. }
  413. int MSDatenbank::suchAnmeldungServer( unsigned int client )
  414. {
  415. Text *befehl = new Text( "SELECT such_anmeldung_server( " );
  416. befehl->append( client );
  417. befehl->append( " )" );
  418. lock();
  419. if( !datenbank->befehl( befehl->getText() ) )
  420. {
  421. unlock();
  422. befehl->release();
  423. return 0;
  424. }
  425. befehl->release();
  426. Result res = datenbank->getResult();
  427. unlock();
  428. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  429. res.destroy();
  430. return ret;
  431. }
  432. unsigned char *MSDatenbank::getAnmeldungServerPortIp( int num )
  433. {
  434. Text *befehl = new Text( "SELECT port, ip FROM server_anmeldung WHERE id = " );
  435. befehl->append( num );
  436. lock();
  437. if( !datenbank->befehl( befehl->getText() ) )
  438. {
  439. unlock();
  440. befehl->release();
  441. return 0;
  442. }
  443. befehl->release();
  444. Result res = datenbank->getResult();
  445. unlock();
  446. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  447. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  448. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  449. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  450. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  451. res.destroy();
  452. unsigned char *ret = new unsigned char[ 6 ];
  453. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  454. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  455. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  456. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  457. ret[ 4 ] = (unsigned char)( port & 0xFF );
  458. ret[ 5 ] = (unsigned char)( port >> 8 );
  459. ip1->release();
  460. ip2->release();
  461. ip3->release();
  462. ip4->release();
  463. return ret;
  464. }
  465. int MSDatenbank::suchErhaltungServer( unsigned int client )
  466. {
  467. Text *befehl = new Text( "SELECT such_erhaltung_server( " );
  468. befehl->append( client );
  469. befehl->append( " )" );
  470. lock();
  471. if( !datenbank->befehl( befehl->getText() ) )
  472. {
  473. unlock();
  474. befehl->release();
  475. return 0;
  476. }
  477. befehl->release();
  478. Result res = datenbank->getResult();
  479. unlock();
  480. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  481. res.destroy();
  482. return ret;
  483. }
  484. unsigned char *MSDatenbank::getErhaltungServerPortIp( int num )
  485. {
  486. Text *befehl = new Text( "SELECT port, ip FROM server_erhaltung WHERE id = " );
  487. befehl->append( num );
  488. lock();
  489. if( !datenbank->befehl( befehl->getText() ) )
  490. {
  491. unlock();
  492. befehl->release();
  493. return 0;
  494. }
  495. befehl->release();
  496. Result res = datenbank->getResult();
  497. unlock();
  498. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  499. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  500. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  501. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  502. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  503. res.destroy();
  504. unsigned char *ret = new unsigned char[ 6 ];
  505. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  506. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  507. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  508. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  509. ret[ 4 ] = (unsigned char)( port & 0xFF );
  510. ret[ 5 ] = (unsigned char)( port >> 8 );
  511. ip1->release();
  512. ip2->release();
  513. ip3->release();
  514. ip4->release();
  515. return ret;
  516. }
  517. int MSDatenbank::suchShopServer( unsigned int client )
  518. {
  519. Text *befehl = new Text( "SELECT such_shop_server( " );
  520. befehl->append( client );
  521. befehl->append( " )" );
  522. lock();
  523. if( !datenbank->befehl( befehl->getText() ) )
  524. {
  525. unlock();
  526. befehl->release();
  527. return 0;
  528. }
  529. befehl->release();
  530. Result res = datenbank->getResult();
  531. unlock();
  532. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  533. res.destroy();
  534. return ret;
  535. }
  536. unsigned char *MSDatenbank::getShopServerPortIp( int num )
  537. {
  538. Text *befehl = new Text( "SELECT port, ip FROM server_shop WHERE id = " );
  539. befehl->append( num );
  540. lock();
  541. if( !datenbank->befehl( befehl->getText() ) )
  542. {
  543. unlock();
  544. befehl->release();
  545. return 0;
  546. }
  547. befehl->release();
  548. Result res = datenbank->getResult();
  549. unlock();
  550. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  551. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  552. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  553. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  554. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  555. res.destroy();
  556. unsigned char *ret = new unsigned char[ 6 ];
  557. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  558. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  559. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  560. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  561. ret[ 4 ] = (unsigned char)( port & 0xFF );
  562. ret[ 5 ] = (unsigned char)( port >> 8 );
  563. ip1->release();
  564. ip2->release();
  565. ip3->release();
  566. ip4->release();
  567. return ret;
  568. }
  569. int MSDatenbank::suchNewsServer( unsigned int client )
  570. {
  571. Text *befehl = new Text( "SELECT such_news_server( " );
  572. befehl->append( client );
  573. befehl->append( " )" );
  574. lock();
  575. if( !datenbank->befehl( befehl->getText() ) )
  576. {
  577. unlock();
  578. befehl->release();
  579. return 0;
  580. }
  581. befehl->release();
  582. Result res = datenbank->getResult();
  583. unlock();
  584. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  585. res.destroy();
  586. return ret;
  587. }
  588. unsigned char *MSDatenbank::getNewsServerPortIp( int num )
  589. {
  590. Text *befehl = new Text( "SELECT port, ip FROM server_news WHERE id = " );
  591. befehl->append( num );
  592. lock();
  593. if( !datenbank->befehl( befehl->getText() ) )
  594. {
  595. unlock();
  596. befehl->release();
  597. return 0;
  598. }
  599. befehl->release();
  600. Result res = datenbank->getResult();
  601. unlock();
  602. unsigned short port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  603. Text *ip1 = res.values[ 1 ].getTeilText( 0, res.values[ 1 ].positionVon( '.', 0 ) );
  604. Text *ip2 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 0 ) + 1, res.values[ 1 ].positionVon( '.', 1 ) );
  605. Text *ip3 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 1 ) + 1, res.values[ 1 ].positionVon( '.', 2 ) );
  606. Text *ip4 = res.values[ 1 ].getTeilText( res.values[ 1 ].positionVon( '.', 2 ) + 1 );
  607. res.destroy();
  608. unsigned char *ret = new unsigned char[ 6 ];
  609. ret[ 0 ] = (unsigned char)TextZuInt( ip1->getText(), 10 );
  610. ret[ 1 ] = (unsigned char)TextZuInt( ip2->getText(), 10 );
  611. ret[ 2 ] = (unsigned char)TextZuInt( ip3->getText(), 10 );
  612. ret[ 3 ] = (unsigned char)TextZuInt( ip4->getText(), 10 );
  613. ret[ 4 ] = (unsigned char)( port & 0xFF );
  614. ret[ 5 ] = (unsigned char)( port >> 8 );
  615. ip1->release();
  616. ip2->release();
  617. ip3->release();
  618. ip4->release();
  619. return ret;
  620. }
  621. int MSDatenbank::logoutKlient( int klientId, Array< int > *ret )
  622. {
  623. Text *befehl = new Text( "SELECT logout_client( " );
  624. befehl->append( klientId );
  625. befehl->append( " )" );
  626. lock();
  627. datenbank->befehl( befehl->getText() );
  628. Result res = datenbank->getResult();
  629. unlock();
  630. befehl->release();
  631. for( int i = 0; i < res.zeilenAnzahl; i++ )
  632. ret->set( TextZuInt( res.values[ i ].getText(), 10 ), i );
  633. int retVal = res.zeilenAnzahl;
  634. res.destroy();
  635. return retVal;
  636. }
  637. bool MSDatenbank::getSpielServerPortIp( int spielErstelltId, unsigned short *port, Text *ip )
  638. {
  639. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_spiel a, spiel_erstellt b "
  640. "WHERE a.id = b.server_spiel_id AND b.id = " );
  641. befehl->append( spielErstelltId );
  642. lock();
  643. if( !datenbank->befehl( befehl->getText() ) )
  644. {
  645. unlock();
  646. befehl->release();
  647. return 0;
  648. }
  649. Result res = datenbank->getResult();
  650. unlock();
  651. befehl->release();
  652. *port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  653. ip->setText( res.values[ 1 ].getText() );
  654. res.destroy();
  655. return 1;
  656. }
  657. int MSDatenbank::getSpielerAusGruppe( int gruppeId, Array< int > *accountId )
  658. {
  659. Text *befehl = new Text( "SELECT account_id FROM gruppe_spieler WHERE gruppe_id = " );
  660. befehl->append( gruppeId );
  661. lock();
  662. if( !datenbank->befehl( befehl->getText() ) )
  663. {
  664. unlock();
  665. befehl->release();
  666. return 0;
  667. }
  668. Result res = datenbank->getResult();
  669. unlock();
  670. befehl->release();
  671. int ret = res.zeilenAnzahl;
  672. for( int i = 0; i < ret; i++ )
  673. accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
  674. return ret;
  675. }
  676. int MSDatenbank::kickSpielerAusGruppe( int gruppeId, int accountId )
  677. {
  678. Text *befehl = new Text( "SELECT spieler_verlaesst_gruppe( " );
  679. befehl->append( accountId );
  680. befehl->append( ", " );
  681. befehl->append( gruppeId );
  682. befehl->append( " )" );
  683. lock();
  684. if( !datenbank->befehl( befehl->getText() ) )
  685. {
  686. unlock();
  687. befehl->release();
  688. return 0;
  689. }
  690. Result res = datenbank->getResult();
  691. unlock();
  692. befehl->release();
  693. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  694. res.destroy();
  695. return ret;
  696. }
  697. bool MSDatenbank::getChatServerPortIp( int accountId, unsigned short *port, Text *ip )
  698. {
  699. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_chat AS a, server_chat_clients AS b, account_clients AS c "
  700. "WHERE c.client_id = b.client_id AND a.id = b.server_chat_id AND c.account_id = " );
  701. befehl->append( accountId );
  702. lock();
  703. if( !datenbank->befehl( befehl->getText() ) )
  704. {
  705. unlock();
  706. befehl->release();
  707. return 0;
  708. }
  709. Result res = datenbank->getResult();
  710. unlock();
  711. befehl->release();
  712. *port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
  713. ip->setText( res.values[ 1 ].getText() );
  714. res.destroy();
  715. return 1;
  716. }
  717. int MSDatenbank::getGruppeAdmin( int gruppeId )
  718. {
  719. Text *befehl = new Text( "SELECT admin_account_id FROM gruppe WHERE id = " );
  720. befehl->append( gruppeId );
  721. lock();
  722. if( !datenbank->befehl( befehl->getText() ) )
  723. {
  724. unlock();
  725. befehl->release();
  726. return 0;
  727. }
  728. Result res = datenbank->getResult();
  729. unlock();
  730. befehl->release();
  731. if( !res.zeilenAnzahl )
  732. {
  733. res.destroy();
  734. return 0;
  735. }
  736. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  737. res.destroy();
  738. return ret;
  739. }
  740. int MSDatenbank::getSpielerAusChatroom( int chatroomId, Array< int > *accountId )
  741. {
  742. Text *befehl = new Text( "SELECT account_id FROM chatroom_spieler WHERE chatroom_id = " );
  743. befehl->append( chatroomId );
  744. lock();
  745. if( !datenbank->befehl( befehl->getText() ) )
  746. {
  747. unlock();
  748. befehl->release();
  749. return 0;
  750. }
  751. Result res = datenbank->getResult();
  752. unlock();
  753. befehl->release();
  754. int ret = res.zeilenAnzahl;
  755. for( int i = 0; i < ret; i++ )
  756. accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
  757. return ret;
  758. }
  759. int MSDatenbank::getChatroomAdmin( int chatroomId )
  760. {
  761. Text *befehl = new Text( "SELECT admin_account_id FROM chatroom WHERE id = " );
  762. befehl->append( chatroomId );
  763. lock();
  764. if( !datenbank->befehl( befehl->getText() ) )
  765. {
  766. unlock();
  767. befehl->release();
  768. return 0;
  769. }
  770. Result res = datenbank->getResult();
  771. unlock();
  772. befehl->release();
  773. if( !res.zeilenAnzahl )
  774. {
  775. res.destroy();
  776. return 0;
  777. }
  778. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  779. res.destroy();
  780. return ret;
  781. }
  782. int MSDatenbank::clientistEingeloggt( int clientId )
  783. {
  784. Text *befehl = new Text( "SELECT account_id FROM account_clients WHERE client_id = " );
  785. befehl->append( clientId );
  786. lock();
  787. if( !datenbank->befehl( befehl->getText() ) )
  788. {
  789. unlock();
  790. befehl->release();
  791. return 0;
  792. }
  793. Result res = datenbank->getResult();
  794. unlock();
  795. befehl->release();
  796. if( !res.zeilenAnzahl )
  797. {
  798. res.destroy();
  799. return 0;
  800. }
  801. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  802. res.destroy();
  803. return ret;
  804. }
  805. bool MSDatenbank::getPatchServer( int client, Text *ip, int *port )
  806. {
  807. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_patch AS a, server_patch_clients AS b "
  808. "WHERE a.id = b.server_patch_id AND b.client_id = " );
  809. befehl->append( client );
  810. lock();
  811. if( !datenbank->befehl( befehl->getText() ) )
  812. {
  813. unlock();
  814. befehl->release();
  815. return 0;
  816. }
  817. Result res = datenbank->getResult();
  818. unlock();
  819. befehl->release();
  820. if( !res.zeilenAnzahl )
  821. {
  822. res.destroy();
  823. return 0;
  824. }
  825. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  826. ip->setText( res.values[ 1 ].getText() );
  827. res.destroy();
  828. return 1;
  829. }
  830. bool MSDatenbank::getRegisterServer( int client, Text *ip, int *port )
  831. {
  832. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_register AS a, server_register_clients AS b "
  833. "WHERE a.id = b.server_register_id AND b.client_id = " );
  834. befehl->append( client );
  835. lock();
  836. if( !datenbank->befehl( befehl->getText() ) )
  837. {
  838. unlock();
  839. befehl->release();
  840. return 0;
  841. }
  842. Result res = datenbank->getResult();
  843. unlock();
  844. befehl->release();
  845. if( !res.zeilenAnzahl )
  846. {
  847. res.destroy();
  848. return 0;
  849. }
  850. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  851. ip->setText( res.values[ 1 ].getText() );
  852. res.destroy();
  853. return 1;
  854. }
  855. bool MSDatenbank::getLoginServer( int client, Text *ip, int *port )
  856. {
  857. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_login AS a, server_login_clients AS b "
  858. "WHERE a.id = b.server_login_id AND b.client_id = " );
  859. befehl->append( client );
  860. lock();
  861. if( !datenbank->befehl( befehl->getText() ) )
  862. {
  863. unlock();
  864. befehl->release();
  865. return 0;
  866. }
  867. Result res = datenbank->getResult();
  868. unlock();
  869. befehl->release();
  870. if( !res.zeilenAnzahl )
  871. {
  872. res.destroy();
  873. return 0;
  874. }
  875. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  876. ip->setText( res.values[ 1 ].getText() );
  877. res.destroy();
  878. return 1;
  879. }
  880. bool MSDatenbank::getInformationServer( int client, Text *ip, int *port )
  881. {
  882. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_information AS a, server_information_clients AS b "
  883. "WHERE a.id = b.server_information_id AND b.client_id = " );
  884. befehl->append( client );
  885. lock();
  886. if( !datenbank->befehl( befehl->getText() ) )
  887. {
  888. unlock();
  889. befehl->release();
  890. return 0;
  891. }
  892. Result res = datenbank->getResult();
  893. unlock();
  894. befehl->release();
  895. if( !res.zeilenAnzahl )
  896. {
  897. res.destroy();
  898. return 0;
  899. }
  900. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  901. ip->setText( res.values[ 1 ].getText() );
  902. res.destroy();
  903. return 1;
  904. }
  905. bool MSDatenbank::getChatServer( int client, Text *ip, int *port )
  906. {
  907. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_chat AS a, server_chat_clients AS b "
  908. "WHERE a.id = b.server_chat_id AND b.client_id = " );
  909. befehl->append( client );
  910. lock();
  911. if( !datenbank->befehl( befehl->getText() ) )
  912. {
  913. unlock();
  914. befehl->release();
  915. return 0;
  916. }
  917. Result res = datenbank->getResult();
  918. unlock();
  919. befehl->release();
  920. if( !res.zeilenAnzahl )
  921. {
  922. res.destroy();
  923. return 0;
  924. }
  925. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  926. ip->setText( res.values[ 1 ].getText() );
  927. res.destroy();
  928. return 1;
  929. }
  930. bool MSDatenbank::getAnmeldungServer( int client, Text *ip, int *port )
  931. {
  932. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_anmeldung AS a, server_anmeldung_clients AS b "
  933. "WHERE a.id = b.server_anmeldung_id AND b.client_id = " );
  934. befehl->append( client );
  935. lock();
  936. if( !datenbank->befehl( befehl->getText() ) )
  937. {
  938. unlock();
  939. befehl->release();
  940. return 0;
  941. }
  942. Result res = datenbank->getResult();
  943. unlock();
  944. befehl->release();
  945. if( !res.zeilenAnzahl )
  946. {
  947. res.destroy();
  948. return 0;
  949. }
  950. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  951. ip->setText( res.values[ 1 ].getText() );
  952. res.destroy();
  953. return 1;
  954. }
  955. bool MSDatenbank::getSpielServer( int client, Text *ip, int *port )
  956. {
  957. Text *befehl = new Text( "SELECT account_id FROM account_clients WHERE client_id = " );
  958. befehl->append( client );
  959. lock();
  960. if( !datenbank->befehl( befehl->getText() ) )
  961. {
  962. unlock();
  963. befehl->release();
  964. return 0;
  965. }
  966. Result res = datenbank->getResult();
  967. unlock();
  968. if( !res.zeilenAnzahl )
  969. {
  970. res.destroy();
  971. befehl->release();
  972. return 0;
  973. }
  974. int accountId = TextZuInt( res.values[ 0 ].getText(), 10 );
  975. res.destroy();
  976. befehl->setText( "SELECT a.id FROM spiel a, spiel_spieler b WHERE b.spiel_id = a.id "
  977. "AND a.spiel_status_id < 3 AND b.spiel_spieler_status_id = 5 AND b.account_id = " );
  978. befehl->append( accountId );
  979. lock();
  980. if( !datenbank->befehl( befehl->getText() ) )
  981. {
  982. unlock();
  983. befehl->release();
  984. return 0;
  985. }
  986. res = datenbank->getResult();
  987. unlock();
  988. if( !res.zeilenAnzahl )
  989. {
  990. res.destroy();
  991. befehl->release();
  992. return 0;
  993. }
  994. int spielId = TextZuInt( res.values[ 0 ].getText(), 10 );
  995. res.destroy();
  996. befehl->setText( "SELECT spiel_server_id FROM spiel WHERE id = " );
  997. befehl->append( spielId );
  998. lock();
  999. if( !datenbank->befehl( befehl->getText() ) )
  1000. {
  1001. unlock();
  1002. befehl->release();
  1003. return 0;
  1004. }
  1005. res = datenbank->getResult();
  1006. unlock();
  1007. if( !res.zeilenAnzahl )
  1008. {
  1009. res.destroy();
  1010. befehl->release();
  1011. return 0;
  1012. }
  1013. int serverId = TextZuInt( res.values[ 0 ].getText(), 10 );
  1014. res.destroy();
  1015. befehl->setText( "SELECT port, ip FROM server_spiel WHERE id = " );
  1016. befehl->append( serverId );
  1017. lock();
  1018. if( !datenbank->befehl( befehl->getText() ) )
  1019. {
  1020. unlock();
  1021. befehl->release();
  1022. return 0;
  1023. }
  1024. res = datenbank->getResult();
  1025. unlock();
  1026. befehl->release();
  1027. if( !res.zeilenAnzahl )
  1028. {
  1029. res.destroy();
  1030. return 0;
  1031. }
  1032. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  1033. ip->setText( res.values[ 1 ].getText() );
  1034. res.destroy();
  1035. return 1;
  1036. }
  1037. bool MSDatenbank::getShopServer( int client, Text *ip, int *port )
  1038. {
  1039. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_shop AS a, server_shop_clients AS b "
  1040. "WHERE a.id = b.server_shop_id AND b.client_id = " );
  1041. befehl->append( client );
  1042. lock();
  1043. if( !datenbank->befehl( befehl->getText() ) )
  1044. {
  1045. unlock();
  1046. befehl->release();
  1047. return 0;
  1048. }
  1049. Result res = datenbank->getResult();
  1050. unlock();
  1051. befehl->release();
  1052. if( !res.zeilenAnzahl )
  1053. {
  1054. res.destroy();
  1055. return 0;
  1056. }
  1057. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  1058. ip->setText( res.values[ 1 ].getText() );
  1059. res.destroy();
  1060. return 1;
  1061. }
  1062. bool MSDatenbank::getNewsServer( int client, Text *ip, int *port )
  1063. {
  1064. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_news AS a, server_news_clients AS b "
  1065. "WHERE a.id = b.server_news_id AND b.client_id = " );
  1066. befehl->append( client );
  1067. lock();
  1068. if( !datenbank->befehl( befehl->getText() ) )
  1069. {
  1070. unlock();
  1071. befehl->release();
  1072. return 0;
  1073. }
  1074. Result res = datenbank->getResult();
  1075. unlock();
  1076. befehl->release();
  1077. if( !res.zeilenAnzahl )
  1078. {
  1079. res.destroy();
  1080. return 0;
  1081. }
  1082. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  1083. ip->setText( res.values[ 1 ].getText() );
  1084. res.destroy();
  1085. return 1;
  1086. }
  1087. bool MSDatenbank::getHistorieServer( int client, Text *ip, int *port )
  1088. {
  1089. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_historie AS a, server_historie_clients AS b "
  1090. "WHERE a.id = b.server_historie_id AND b.client_id = " );
  1091. befehl->append( client );
  1092. lock();
  1093. if( !datenbank->befehl( befehl->getText() ) )
  1094. {
  1095. unlock();
  1096. befehl->release();
  1097. return 0;
  1098. }
  1099. Result res = datenbank->getResult();
  1100. unlock();
  1101. befehl->release();
  1102. if( !res.zeilenAnzahl )
  1103. {
  1104. res.destroy();
  1105. return 0;
  1106. }
  1107. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  1108. ip->setText( res.values[ 1 ].getText() );
  1109. res.destroy();
  1110. return 1;
  1111. }
  1112. bool MSDatenbank::getKartenServer( int client, Text *ip, int *port )
  1113. {
  1114. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_karten AS a, server_karten_clients AS b "
  1115. "WHERE a.id = b.server_karten_id AND b.client_id = " );
  1116. befehl->append( client );
  1117. lock();
  1118. if( !datenbank->befehl( befehl->getText() ) )
  1119. {
  1120. unlock();
  1121. befehl->release();
  1122. return 0;
  1123. }
  1124. Result res = datenbank->getResult();
  1125. unlock();
  1126. befehl->release();
  1127. if( !res.zeilenAnzahl )
  1128. {
  1129. res.destroy();
  1130. return 0;
  1131. }
  1132. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  1133. ip->setText( res.values[ 1 ].getText() );
  1134. res.destroy();
  1135. return 1;
  1136. }
  1137. bool MSDatenbank::getEditorServer( int client, Text *ip, int *port )
  1138. {
  1139. Text *befehl = new Text( "SELECT a.port, a.ip FROM server_editor AS a, server_editor_clients AS b "
  1140. "WHERE a.id = b.server_editor_id AND b.client_id = " );
  1141. befehl->append( client );
  1142. lock();
  1143. if( !datenbank->befehl( befehl->getText() ) )
  1144. {
  1145. unlock();
  1146. befehl->release();
  1147. return 0;
  1148. }
  1149. Result res = datenbank->getResult();
  1150. unlock();
  1151. befehl->release();
  1152. if( !res.zeilenAnzahl )
  1153. {
  1154. res.destroy();
  1155. return 0;
  1156. }
  1157. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  1158. ip->setText( res.values[ 1 ].getText() );
  1159. res.destroy();
  1160. return 1;
  1161. }
  1162. // Reference Counting
  1163. MSDatenbank *MSDatenbank::getThis()
  1164. {
  1165. ref++;
  1166. return this;
  1167. }
  1168. MSDatenbank *MSDatenbank::release()
  1169. {
  1170. ref--;
  1171. if( !ref )
  1172. delete this;
  1173. return 0;
  1174. }