|
@@ -4,17 +4,17 @@
|
|
|
// Inhalt der LSDatenbank Klasse aus Datenbank.h
|
|
|
// Konstruktor
|
|
|
LSDatenbank::LSDatenbank( InitDatei *zIni )
|
|
|
+ : ReferenceCounter()
|
|
|
{
|
|
|
- datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(),
|
|
|
- zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
|
|
|
- (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) );
|
|
|
+ datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(),
|
|
|
+ zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
|
|
|
+ (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) );
|
|
|
if( !datenbank->istOk() )
|
|
|
{
|
|
|
std::cout << "LS: Die Verbindung zur Datenbank konnte nicht hergestellt werden.\nDas Programm wird beendet.";
|
|
|
exit( 1 );
|
|
|
}
|
|
|
- InitializeCriticalSection( &cs );
|
|
|
- ref = 1;
|
|
|
+ InitializeCriticalSection( &cs );
|
|
|
Text befehl = "SELECT port, admin_port FROM server WHERE id = ";
|
|
|
befehl += zIni->zWert( "ServerId" )->getText();
|
|
|
lock();
|
|
@@ -32,503 +32,488 @@ LSDatenbank::LSDatenbank( InitDatei *zIni )
|
|
|
// Destruktor
|
|
|
LSDatenbank::~LSDatenbank()
|
|
|
{
|
|
|
- datenbank->release();
|
|
|
- DeleteCriticalSection( &cs );
|
|
|
+ datenbank->release();
|
|
|
+ DeleteCriticalSection( &cs );
|
|
|
}
|
|
|
|
|
|
// nicht constant
|
|
|
void LSDatenbank::lock()
|
|
|
{
|
|
|
- EnterCriticalSection( &cs );
|
|
|
+ EnterCriticalSection( &cs );
|
|
|
}
|
|
|
|
|
|
void LSDatenbank::unlock()
|
|
|
{
|
|
|
- LeaveCriticalSection( &cs );
|
|
|
+ LeaveCriticalSection( &cs );
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::istAdministrator( const char *name, const char *passwort )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" );
|
|
|
- Text n( name );
|
|
|
- n.ersetzen( "'", "''" );
|
|
|
- befehl->append( (char*)n );
|
|
|
- befehl->append( "' AND passwort = md5( '" );
|
|
|
- Text p( passwort );
|
|
|
- p.ersetzen( "'", "''" );
|
|
|
- befehl->append( (char*)p );
|
|
|
- befehl->append( "' )" );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- int ret = 0;
|
|
|
- if( res.zeilenAnzahl > 0 )
|
|
|
- ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" );
|
|
|
+ Text n( name );
|
|
|
+ n.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char *)n );
|
|
|
+ befehl->append( "' AND passwort = md5( '" );
|
|
|
+ Text p( passwort );
|
|
|
+ p.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char *)p );
|
|
|
+ befehl->append( "' )" );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ int ret = 0;
|
|
|
+ if( res.zeilenAnzahl > 0 )
|
|
|
+ ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
bool LSDatenbank::adminHatRecht( int id, int recht )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT * FROM benutzer_rechte WHERE benutzer_id = " );
|
|
|
- befehl->append( id );
|
|
|
- befehl->append( " AND rechte_id = " );
|
|
|
- befehl->append( recht );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- int ret = datenbank->getZeilenAnzahl();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return ret != 0;
|
|
|
+ Text *befehl = new Text( "SELECT * FROM benutzer_rechte WHERE benutzer_id = " );
|
|
|
+ befehl->append( id );
|
|
|
+ befehl->append( " AND rechte_id = " );
|
|
|
+ befehl->append( recht );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ int ret = datenbank->getZeilenAnzahl();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return ret != 0;
|
|
|
}
|
|
|
|
|
|
bool LSDatenbank::proveKlient( int num, int sNum )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT * FROM server_client WHERE server_id = " );
|
|
|
- befehl->append( sNum );
|
|
|
- befehl->append( " AND client_id = " );
|
|
|
- befehl->append( num );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- bool ret = 0;
|
|
|
- if( res.zeilenAnzahl == 1 )
|
|
|
- ret = 1;
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT * FROM server_client WHERE server_id = " );
|
|
|
+ befehl->append( sNum );
|
|
|
+ befehl->append( " AND client_id = " );
|
|
|
+ befehl->append( num );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ bool ret = 0;
|
|
|
+ if( res.zeilenAnzahl == 1 )
|
|
|
+ ret = 1;
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
Text *LSDatenbank::getKlientKey( int cId )
|
|
|
{
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( Text( "SELECT schluessel FROM client WHERE id = " ) += cId ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- if( !res.zeilenAnzahl )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Text *ret = new Text( res.values[ 0 ].getText() );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( Text( "SELECT schluessel FROM client WHERE id = " ) += cId ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ if( !res.zeilenAnzahl )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Text *ret = new Text( res.values[ 0 ].getText() );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
void LSDatenbank::unregisterKlient( int num, int sNum )
|
|
|
{
|
|
|
- Text *befehl = new Text( "DELETE FROM server_client WHERE client_id = " );
|
|
|
- befehl->append( num );
|
|
|
- befehl->append( " AND server_id = " );
|
|
|
- befehl->append( sNum );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- int za = datenbank->getZeilenAnzahl();
|
|
|
- unlock();
|
|
|
- if( za == 1 )
|
|
|
- {
|
|
|
- befehl->setText( "UPDATE server SET tasks = tasks - 1 WHERE id = " );
|
|
|
- befehl->append( sNum );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- unlock();
|
|
|
- }
|
|
|
- befehl->release();
|
|
|
+ Text *befehl = new Text( "DELETE FROM server_client WHERE client_id = " );
|
|
|
+ befehl->append( num );
|
|
|
+ befehl->append( " AND server_id = " );
|
|
|
+ befehl->append( sNum );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ int za = datenbank->getZeilenAnzahl();
|
|
|
+ unlock();
|
|
|
+ if( za == 1 )
|
|
|
+ {
|
|
|
+ befehl->setText( "UPDATE server SET tasks = tasks - 1 WHERE id = " );
|
|
|
+ befehl->append( sNum );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ unlock();
|
|
|
+ }
|
|
|
+ befehl->release();
|
|
|
}
|
|
|
|
|
|
bool LSDatenbank::setServerStatus( int id, int status )
|
|
|
{
|
|
|
- Text *befehl = new Text( "UPDATE server SET server_status_id = " );
|
|
|
- *befehl += status;
|
|
|
- *befehl += "WHERE id = ";
|
|
|
- *befehl += id;
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- bool ret = datenbank->getZeilenAnzahl() != 0;
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "UPDATE server SET server_status_id = " );
|
|
|
+ *befehl += status;
|
|
|
+ *befehl += "WHERE id = ";
|
|
|
+ *befehl += id;
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ bool ret = datenbank->getZeilenAnzahl() != 0;
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
bool LSDatenbank::setMaxClients( int id, int maxC )
|
|
|
{
|
|
|
- Text *befehl = new Text( "UPDATE server SET max_tasks = " );
|
|
|
- befehl->append( maxC );
|
|
|
- befehl->append( " WHERE id = " );
|
|
|
- befehl->append( id );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- bool ret = datenbank->getZeilenAnzahl() > 0;
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "UPDATE server SET max_tasks = " );
|
|
|
+ befehl->append( maxC );
|
|
|
+ befehl->append( " WHERE id = " );
|
|
|
+ befehl->append( id );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ bool ret = datenbank->getZeilenAnzahl() > 0;
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
bool LSDatenbank::serverIstNichtPausiert( int id )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT server_status_id FROM server WHERE id = " );
|
|
|
- befehl->append( id );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- if( !res.zeilenAnzahl )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- bool ret = (int)res.values[ 0 ] == 3;
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT server_status_id FROM server WHERE id = " );
|
|
|
+ befehl->append( id );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ if( !res.zeilenAnzahl )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ bool ret = (int)res.values[ 0 ] == 3;
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::getAccountId( char *name, char *pass )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT id FROM account WHERE name = '" );
|
|
|
- Text n( name );
|
|
|
- n.ersetzen( "'", "''" );
|
|
|
- befehl->append( (char*)n );
|
|
|
- befehl->append( "' AND passwort = md5( '" );
|
|
|
- Text p( pass );
|
|
|
- p.ersetzen( "'", "''" );
|
|
|
- befehl->append( (char*)p );
|
|
|
- befehl->append( "' )" );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- if( res.zeilenAnzahl == 0 )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT id FROM account WHERE name = '" );
|
|
|
+ Text n( name );
|
|
|
+ n.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char *)n );
|
|
|
+ befehl->append( "' AND passwort = md5( '" );
|
|
|
+ Text p( pass );
|
|
|
+ p.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char *)p );
|
|
|
+ befehl->append( "' )" );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ if( res.zeilenAnzahl == 0 )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::loginKlient( int klientId, int accountId )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT login_client( " );
|
|
|
- befehl->append( klientId );
|
|
|
- befehl->append( ", " );
|
|
|
- befehl->append( accountId );
|
|
|
- befehl->append( " )" );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- if( res.zeilenAnzahl == 0 )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT login_client( " );
|
|
|
+ befehl->append( klientId );
|
|
|
+ befehl->append( ", " );
|
|
|
+ befehl->append( accountId );
|
|
|
+ befehl->append( " )" );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ if( res.zeilenAnzahl == 0 )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
bool LSDatenbank::accountGeheim( int accountId, char *geheim )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT * FROM account WHERE id = " );
|
|
|
- befehl->append( accountId );
|
|
|
- befehl->append( " AND geheimnis = '" );
|
|
|
- Text g( geheim );
|
|
|
- g.ersetzen( "'", "''" );
|
|
|
- befehl->append( (char*)g );
|
|
|
- befehl->append( "'" );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- if( res.zeilenAnzahl == 1 )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 1;
|
|
|
- }
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
+ Text *befehl = new Text( "SELECT * FROM account WHERE id = " );
|
|
|
+ befehl->append( accountId );
|
|
|
+ befehl->append( " AND geheimnis = '" );
|
|
|
+ Text g( geheim );
|
|
|
+ g.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char *)g );
|
|
|
+ befehl->append( "'" );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ if( res.zeilenAnzahl == 1 )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
int *LSDatenbank::kickKlient( int accountId )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT kick_client( " );
|
|
|
- befehl->append( accountId );
|
|
|
- befehl->append( " )" );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- if( res.zeilenAnzahl == 0 )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- int *ret = new int[ res.zeilenAnzahl ];
|
|
|
- for( int i = 0; i < res.zeilenAnzahl; i++ )
|
|
|
- ret[ i ] = TextZuInt( res.values[ i ].getText(), 10 );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT kick_client( " );
|
|
|
+ befehl->append( accountId );
|
|
|
+ befehl->append( " )" );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ if( res.zeilenAnzahl == 0 )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int *ret = new int[ res.zeilenAnzahl ];
|
|
|
+ for( int i = 0; i < res.zeilenAnzahl; i++ )
|
|
|
+ ret[ i ] = TextZuInt( res.values[ i ].getText(), 10 );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
void LSDatenbank::accountOnline( int accountId, char *ip, unsigned char *locIp, char *pcName )
|
|
|
{
|
|
|
- Text *befehl = new Text( "INSERT INTO account_online( account_id, ip, loc_ip, pc_name ) VALUES ( " );
|
|
|
- befehl->append( accountId );
|
|
|
- befehl->append( ", '" );
|
|
|
- befehl->append( ip );
|
|
|
- befehl->append( "', '" );
|
|
|
- befehl->append( (int)locIp[ 0 ] );
|
|
|
- befehl->append( "." );
|
|
|
- befehl->append( (int)locIp[ 1 ] );
|
|
|
- befehl->append( "." );
|
|
|
- befehl->append( (int)locIp[ 2 ] );
|
|
|
- befehl->append( "." );
|
|
|
- befehl->append( (int)locIp[ 3 ] );
|
|
|
- befehl->append( "', '" );
|
|
|
- Text n( pcName );
|
|
|
- n.ersetzen( "'", "''" );
|
|
|
- befehl->append( (char*)n );
|
|
|
- befehl->append( "' )" );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
+ Text *befehl = new Text( "INSERT INTO account_online( account_id, ip, loc_ip, pc_name ) VALUES ( " );
|
|
|
+ befehl->append( accountId );
|
|
|
+ befehl->append( ", '" );
|
|
|
+ befehl->append( ip );
|
|
|
+ befehl->append( "', '" );
|
|
|
+ befehl->append( (int)locIp[ 0 ] );
|
|
|
+ befehl->append( "." );
|
|
|
+ befehl->append( (int)locIp[ 1 ] );
|
|
|
+ befehl->append( "." );
|
|
|
+ befehl->append( (int)locIp[ 2 ] );
|
|
|
+ befehl->append( "." );
|
|
|
+ befehl->append( (int)locIp[ 3 ] );
|
|
|
+ befehl->append( "', '" );
|
|
|
+ Text n( pcName );
|
|
|
+ n.ersetzen( "'", "''" );
|
|
|
+ befehl->append( (char *)n );
|
|
|
+ befehl->append( "' )" );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::logoutKlient( int klientId, Array< int > *ret )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT logout_client( " );
|
|
|
- befehl->append( klientId );
|
|
|
- befehl->append( " )" );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- for( int i = 0; i < res.zeilenAnzahl; i++ )
|
|
|
- ret->set( TextZuInt( res.values[ i ].getText(), 10 ), i );
|
|
|
- int retVal = res.zeilenAnzahl;
|
|
|
- res.destroy();
|
|
|
- return retVal;
|
|
|
+ Text *befehl = new Text( "SELECT logout_client( " );
|
|
|
+ befehl->append( klientId );
|
|
|
+ befehl->append( " )" );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ for( int i = 0; i < res.zeilenAnzahl; i++ )
|
|
|
+ ret->set( TextZuInt( res.values[ i ].getText(), 10 ), i );
|
|
|
+ int retVal = res.zeilenAnzahl;
|
|
|
+ res.destroy();
|
|
|
+ return retVal;
|
|
|
}
|
|
|
|
|
|
Text **LSDatenbank::getChatServerIpPort( int id )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT ip, port FROM server WHERE id = " );
|
|
|
- befehl->append( id );
|
|
|
- lock();
|
|
|
- datenbank->befehl( befehl->getText() );
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- if( !res.zeilenAnzahl )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Text **ret = new Text*[ 2 ];
|
|
|
- ret[ 0 ] = new Text( res.values[ 0 ].getText() );
|
|
|
- ret[ 1 ] = new Text( res.values[ 1 ].getText() );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT ip, port FROM server WHERE id = " );
|
|
|
+ befehl->append( id );
|
|
|
+ lock();
|
|
|
+ datenbank->befehl( befehl->getText() );
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ if( !res.zeilenAnzahl )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Text **ret = new Text * [ 2 ];
|
|
|
+ ret[ 0 ] = new Text( res.values[ 0 ].getText() );
|
|
|
+ ret[ 1 ] = new Text( res.values[ 1 ].getText() );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
bool LSDatenbank::getSpielServerPortIp( int spielErstelltId, unsigned short *port, Text *ip )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, spiel_erstellt b "
|
|
|
- "WHERE a.id = b.server_spiel_id AND b.id = " );
|
|
|
- befehl->append( spielErstelltId );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- *port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
- ip->setText( res.values[ 1 ].getText() );
|
|
|
- res.destroy();
|
|
|
- return 1;
|
|
|
+ Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, spiel_erstellt b "
|
|
|
+ "WHERE a.id = b.server_spiel_id AND b.id = " );
|
|
|
+ befehl->append( spielErstelltId );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ *port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
+ ip->setText( res.values[ 1 ].getText() );
|
|
|
+ res.destroy();
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::getSpielerAusGruppe( int gruppeId, Array< int > *accountId )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT account_id FROM gruppe_spieler WHERE gruppe_id = " );
|
|
|
- befehl->append( gruppeId );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- int ret = res.zeilenAnzahl;
|
|
|
- for( int i = 0; i < ret; i++ )
|
|
|
- accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT account_id FROM gruppe_spieler WHERE gruppe_id = " );
|
|
|
+ befehl->append( gruppeId );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ int ret = res.zeilenAnzahl;
|
|
|
+ for( int i = 0; i < ret; i++ )
|
|
|
+ accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::kickSpielerAusGruppe( int gruppeId, int accountId )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT spieler_verlaesst_gruppe( " );
|
|
|
- befehl->append( accountId );
|
|
|
- befehl->append( ", " );
|
|
|
- befehl->append( gruppeId );
|
|
|
- befehl->append( " )" );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT spieler_verlaesst_gruppe( " );
|
|
|
+ befehl->append( accountId );
|
|
|
+ befehl->append( ", " );
|
|
|
+ befehl->append( gruppeId );
|
|
|
+ befehl->append( " )" );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
bool LSDatenbank::getChatServerPortIp( int accountId, unsigned short *port, Text *ip )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b, account_client c "
|
|
|
- "WHERE a.server_typ_name = 'chat' AND c.client_id = b.client_id AND a.id = b.server_id AND c.account_id = " );
|
|
|
- befehl->append( accountId );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- *port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
- ip->setText( res.values[ 1 ].getText() );
|
|
|
- res.destroy();
|
|
|
- return 1;
|
|
|
+ Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b, account_client c "
|
|
|
+ "WHERE a.server_typ_name = 'chat' AND c.client_id = b.client_id AND a.id = b.server_id AND c.account_id = " );
|
|
|
+ befehl->append( accountId );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ *port = (unsigned short)TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
+ ip->setText( res.values[ 1 ].getText() );
|
|
|
+ res.destroy();
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::getGruppeAdmin( int gruppeId )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT admin_account_id FROM gruppe WHERE id = " );
|
|
|
- befehl->append( gruppeId );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- if( !res.zeilenAnzahl )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT admin_account_id FROM gruppe WHERE id = " );
|
|
|
+ befehl->append( gruppeId );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ if( !res.zeilenAnzahl )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::getSpielerAusChatroom( int chatroomId, Array< int > *accountId )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT account_id FROM chatroom_spieler WHERE chatroom_id = " );
|
|
|
- befehl->append( chatroomId );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- int ret = res.zeilenAnzahl;
|
|
|
- for( int i = 0; i < ret; i++ )
|
|
|
- accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT account_id FROM chatroom_spieler WHERE chatroom_id = " );
|
|
|
+ befehl->append( chatroomId );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ int ret = res.zeilenAnzahl;
|
|
|
+ for( int i = 0; i < ret; i++ )
|
|
|
+ accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int LSDatenbank::getChatroomAdmin( int chatroomId )
|
|
|
{
|
|
|
- Text *befehl = new Text( "SELECT admin_account_id FROM chatroom WHERE id = " );
|
|
|
- befehl->append( chatroomId );
|
|
|
- lock();
|
|
|
- if( !datenbank->befehl( befehl->getText() ) )
|
|
|
- {
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- Result res = datenbank->getResult();
|
|
|
- unlock();
|
|
|
- befehl->release();
|
|
|
- if( !res.zeilenAnzahl )
|
|
|
- {
|
|
|
- res.destroy();
|
|
|
- return 0;
|
|
|
- }
|
|
|
- int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
- res.destroy();
|
|
|
- return ret;
|
|
|
+ Text *befehl = new Text( "SELECT admin_account_id FROM chatroom WHERE id = " );
|
|
|
+ befehl->append( chatroomId );
|
|
|
+ lock();
|
|
|
+ if( !datenbank->befehl( befehl->getText() ) )
|
|
|
+ {
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Result res = datenbank->getResult();
|
|
|
+ unlock();
|
|
|
+ befehl->release();
|
|
|
+ if( !res.zeilenAnzahl )
|
|
|
+ {
|
|
|
+ res.destroy();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
|
|
|
+ res.destroy();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// constant
|
|
|
Text *LSDatenbank::getLetzterFehler() const
|
|
|
{
|
|
|
- return datenbank->getLetzterFehler();
|
|
|
-}
|
|
|
-
|
|
|
-// Reference Counting
|
|
|
-LSDatenbank *LSDatenbank::getThis()
|
|
|
-{
|
|
|
- ref++;
|
|
|
- return this;
|
|
|
-}
|
|
|
-
|
|
|
-LSDatenbank *LSDatenbank::release()
|
|
|
-{
|
|
|
- ref--;
|
|
|
- if( !ref )
|
|
|
- delete this;
|
|
|
- return 0;
|
|
|
+ return datenbank->getLetzterFehler();
|
|
|
}
|