Ver código fonte

fix compiler errors

Kolja Strohm 3 anos atrás
pai
commit
9ee97549af

+ 387 - 402
LoginServer/Datenbank.cpp

@@ -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();
 }

+ 38 - 42
LoginServer/Datenbank.h

@@ -10,54 +10,50 @@ using namespace sql;
 
 namespace Admin_Recht
 {
-	const int LSStarten = 12;
-	const int LSBeenden = 13;
-	const int LSPausieren = 14;
-	const int LSMCChange = 15;
+    const int LSStarten = 12;
+    const int LSBeenden = 13;
+    const int LSPausieren = 14;
+    const int LSMCChange = 15;
 }
 
-class LSDatenbank
+class LSDatenbank : public virtual ReferenceCounter
 {
 private:
-	Datenbank *datenbank;
-	CRITICAL_SECTION cs;
-	int ref;
+    Datenbank *datenbank;
+    CRITICAL_SECTION cs;
 
 public:
-	// Konstruktor
-	LSDatenbank( InitDatei *zIni );
-	// Destruktor
-	~LSDatenbank();
-	// nicht constant
-	void lock();
-	void unlock();
-	int istAdministrator( const char *name, const char *passwort );
-	bool adminHatRecht( int id, int recht );
-	bool proveKlient( int num, int sNum );
-	Text *getKlientKey( int cId );
-	void unregisterKlient( int num, int sNum );
-	bool setServerStatus( int id, int status );
-	bool setMaxClients( int id, int maxC );
-	bool serverIstNichtPausiert( int id );
-	int getAccountId( char *name, char *pass );
-	int loginKlient( int klientId, int accountId );
-	bool accountGeheim( int accountId, char *geheim );
-	int *kickKlient( int accountId );
-	void accountOnline( int accountId, char *ip, unsigned char *locIp, char *pcName );
-	int logoutKlient( int klientId, Array< int > *ret );
-	Text **getChatServerIpPort( int id );
-	bool getSpielServerPortIp( int spielErstelltId, unsigned short *port, Text *ip );
-	int getSpielerAusGruppe( int gruppeId, Array< int > *accountId );
-	int kickSpielerAusGruppe( int gruppeId, int accountId );
-	bool getChatServerPortIp( int accountId, unsigned short *port, Text *ip );
-	int getGruppeAdmin( int gruppeId );
-	int getSpielerAusChatroom( int chatroomId, Array< int > *accountId );
-	int getChatroomAdmin( int chatroomId );
-	// constant
-	Text *getLetzterFehler() const;
-	// Reference Counting
-	LSDatenbank *getThis();
-	LSDatenbank *release();
+    // Konstruktor
+    LSDatenbank( InitDatei *zIni );
+    // Destruktor
+    ~LSDatenbank();
+    // nicht constant
+    void lock();
+    void unlock();
+    int istAdministrator( const char *name, const char *passwort );
+    bool adminHatRecht( int id, int recht );
+    bool proveKlient( int num, int sNum );
+    Text *getKlientKey( int cId );
+    void unregisterKlient( int num, int sNum );
+    bool setServerStatus( int id, int status );
+    bool setMaxClients( int id, int maxC );
+    bool serverIstNichtPausiert( int id );
+    int getAccountId( char *name, char *pass );
+    int loginKlient( int klientId, int accountId );
+    bool accountGeheim( int accountId, char *geheim );
+    int *kickKlient( int accountId );
+    void accountOnline( int accountId, char *ip, unsigned char *locIp, char *pcName );
+    int logoutKlient( int klientId, Array< int > *ret );
+    Text **getChatServerIpPort( int id );
+    bool getSpielServerPortIp( int spielErstelltId, unsigned short *port, Text *ip );
+    int getSpielerAusGruppe( int gruppeId, Array< int > *accountId );
+    int kickSpielerAusGruppe( int gruppeId, int accountId );
+    bool getChatServerPortIp( int accountId, unsigned short *port, Text *ip );
+    int getGruppeAdmin( int gruppeId );
+    int getSpielerAusChatroom( int chatroomId, Array< int > *accountId );
+    int getChatroomAdmin( int chatroomId );
+    // constant
+    Text *getLetzterFehler() const;
 };
 
 #endif

BIN
LoginServer/LoginServer


+ 63 - 81
LoginServer/LoginServer.cpp

@@ -16,7 +16,7 @@ LoginServer::LoginServer( InitDatei *zIni )
     empfangen = 0;
     gesendet = 0;
     fehler = new Text();
-    ini = zIni->getThis();
+    ini = dynamic_cast<InitDatei *>( zIni->getThis() );
     id = *zIni->zWert( "ServerId" );
     server = new Server();
     aServer = new SSLServer();
@@ -65,13 +65,13 @@ void LoginServer::runn()
         if( end && klient )
         {
             klient->trenne();
-            klient = klient->release();
+            klient = (SSLSKlient *)klient->release();
             Sleep( 1000 );
             return;
         }
         if( !klient )
             continue;
-        LSAKlient * clHandle = new LSAKlient( klient, (LoginServer *)getThis() );
+        LSAKlient *clHandle = new LSAKlient( klient, dynamic_cast<LoginServer *>( getThis() ) );
         clHandle->start();
     }
 }
@@ -85,7 +85,7 @@ void LoginServer::thread()
         if( !klient )
             continue;
         Framework::getThreadRegister()->cleanUpClosedThreads();
-        LSKlient * clHandle = new LSKlient( klient, (LoginServer *)getThis() );
+        LSKlient *clHandle = new LSKlient( klient, dynamic_cast<LoginServer *>( getThis() ) );
         EnterCriticalSection( &cs );
         klients->set( clHandle, klientAnzahl );
         klientAnzahl++;
@@ -104,13 +104,13 @@ void LoginServer::close()
     EnterCriticalSection( &cs );
     for( int i = 0; i < klientAnzahl; i++ )
         klients->z( i )->absturz();
-    klients = klients->release();
+    klients = ( RCArray<LSKlient>* )klients->release();
     klientAnzahl = 0;
     LeaveCriticalSection( &cs );
     ende();
     run = 0;
     end = 1;
-    Klient * klient = new Klient();
+    Klient *klient = new Klient();
     klient->verbinde( aServer->getPort(), "127.0.0.1" );
     Sleep( 500 );
     aServer->trenne();
@@ -223,7 +223,7 @@ bool LoginServer::absturzKlient( int klientId )
     return gefunden;
 }
 
-bool LoginServer::removeKlient( LSKlient * zKlient )
+bool LoginServer::removeKlient( LSKlient *zKlient )
 {
     bool gefunden = 0;
     EnterCriticalSection( &cs );
@@ -285,7 +285,7 @@ char *LoginServer::getLetzterFehler() const
 
 // Inhalt der LSAKlient Klasse aus LoginServer.h
 // Konstruktor 
-LSAKlient::LSAKlient( SSLSKlient * klient, LoginServer * ls )
+LSAKlient::LSAKlient( SSLSKlient *klient, LoginServer *ls )
     : Thread()
 {
     this->klient = klient;
@@ -324,13 +324,13 @@ void LSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     unsigned char nLen = 0;
-                    klient->getNachricht( (char *)& nLen, 1 );
+                    klient->getNachricht( (char *)&nLen, 1 );
                     char *n = new char[ nLen + 1 ];
                     n[ (int)nLen ] = 0;
                     if( nLen )
                         klient->getNachricht( n, nLen );
                     unsigned char pLen = 0;
-                    klient->getNachricht( (char *)& pLen, 1 );
+                    klient->getNachricht( (char *)&pLen, 1 );
                     char *p = new char[ pLen + 1 ];
                     p[ (int)pLen ] = 0;
                     if( pLen )
@@ -426,7 +426,7 @@ void LSAKlient::thread()
                     }
                     else
                         ok = 1;
-                    if( ok &&ls->hatClients() )
+                    if( ok && ls->hatClients() )
                     {
                         errorZuKlient( "Es sind noch Klients Online. Bitte versuche es später erneut." );
                         break;
@@ -522,7 +522,7 @@ void LSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int maxC = 0;
-                    klient->getNachricht( (char *)& maxC, 4 );
+                    klient->getNachricht( (char *)&maxC, 4 );
                     if( ls->zDB()->adminHatRecht( adminId, Admin_Recht::LSMCChange ) )
                     {
                         if( ls->setMaxKlients( maxC ) )
@@ -544,8 +544,8 @@ void LSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int klientId = 0;
-                    klient->getNachricht( (char *)& klientId, 4 );
-                    if( klientId &&ls->absturzKlient( klientId ) )
+                    klient->getNachricht( (char *)&klientId, 4 );
+                    if( klientId && ls->absturzKlient( klientId ) )
                         klient->sende( "\1", 1 );
                     else
                         klient->sende( "\0", 1 );
@@ -577,7 +577,7 @@ void LSAKlient::errorZuKlient( const char *nachricht ) const // sendet eine Fehl
 
 // Inhalt der LSKlient aus LoginServer.h
 // Konstruktor
-LSKlient::LSKlient( SKlient * klient, LoginServer * ls )
+LSKlient::LSKlient( SKlient *klient, LoginServer *ls )
     : Thread()
 {
     this->klient = klient;
@@ -586,7 +586,6 @@ LSKlient::LSKlient( SKlient * klient, LoginServer * ls )
     klient->setEmpfangKey( (char *)key, 20 );
     klientNummer = 0;
     this->ls = ls;
-    ref = 1;
 }
 
 // Destruktor 
@@ -617,7 +616,7 @@ void LSKlient::thread()
             switch( c )
             {
             case 1: // Klient identifikation
-                klient->getNachrichtEncrypted( (char *)& klientNummer, 4 );
+                klient->getNachrichtEncrypted( (char *)&klientNummer, 4 );
                 if( !ls->zDB()->proveKlient( klientNummer, ls->getId() ) )
                 {
                     klientNummer = 0;
@@ -648,8 +647,8 @@ void LSKlient::thread()
                         if( 1 )
                         {
                             int klientId = 0;
-                            klient->getNachrichtEncrypted( (char *)& klientId, 4 );
-                            if( klientId &&ls->absturzKlient( klientId ) )
+                            klient->getNachrichtEncrypted( (char *)&klientId, 4 );
+                            if( klientId && ls->absturzKlient( klientId ) )
                                 klient->sendeEncrypted( "\1", 1 );
                             else
                                 klient->sendeEncrypted( "\0", 1 );
@@ -684,11 +683,11 @@ void LSKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     unsigned char byte = 0;
-                    klient->getNachrichtEncrypted( (char *)& byte, 1 );
+                    klient->getNachrichtEncrypted( (char *)&byte, 1 );
                     char *name = new char[ byte + 1 ];
                     name[ byte ] = 0;
                     klient->getNachrichtEncrypted( name, byte );
-                    klient->getNachrichtEncrypted( (char *)& byte, 1 );
+                    klient->getNachrichtEncrypted( (char *)&byte, 1 );
                     char *passwort = new char[ byte + 1 ];
                     passwort[ byte ] = 0;
                     klient->getNachrichtEncrypted( passwort, byte );
@@ -764,13 +763,13 @@ void LSKlient::thread()
                             klient->sendeEncrypted( "\1", 1 );
                             unsigned char klientLocIp[ 4 ];
                             klient->getNachrichtEncrypted( (char *)klientLocIp, 4 );
-                            klient->getNachrichtEncrypted( (char *)& byte, 1 );
+                            klient->getNachrichtEncrypted( (char *)&byte, 1 );
                             char *pcName = new char[ byte + 1 ];
                             pcName[ byte ] = 0;
                             klient->getNachrichtEncrypted( pcName, byte );
                             ls->zDB()->accountOnline( accountId, (char *)klient->getIp(), klientLocIp, pcName );
                             delete[]pcName;
-                            klient->sendeEncrypted( (char *)& accountId, 4 );
+                            klient->sendeEncrypted( (char *)&accountId, 4 );
                         }
                     }
                 }
@@ -785,7 +784,7 @@ void LSKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     int accountId = 0;
-                    klient->getNachrichtEncrypted( (char *)& accountId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&accountId, 4 );
                     Array< int > *ret = new Array< int >();
                     int anzahl = ls->zDB()->logoutKlient( klientNummer, ret );
                     if( anzahl > 0 )
@@ -799,12 +798,12 @@ void LSKlient::thread()
                             jetzt++;
                             if( chatroomId )
                             {
-                                MSGWeiterleitung *weiter = new MSGWeiterleitung( (LoginServer *)ls->getThis() );
+                                MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<LoginServer *>( ls->getThis() ) );
                                 weiter->spielerLeavesChatroom( chatroomId, accountId );
                                 weiter->release();
                                 if( ret->get( jetzt ) )
                                 {
-                                    MSGWeiterleitung *weiter = new MSGWeiterleitung( (LoginServer *)ls->getThis() );
+                                    MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<LoginServer *>( ls->getThis() ) );
                                     weiter->setChatroomAdmin( chatroomId, ls->zDB()->getChatroomAdmin( chatroomId ) );
                                     weiter->release();
                                 }
@@ -814,7 +813,7 @@ void LSKlient::thread()
                         if( ret->get( jetzt ) == 1 )
                         {
                             jetzt++;
-                            MSGWeiterleitung *weiter = new MSGWeiterleitung( (LoginServer *)ls->getThis() );
+                            MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<LoginServer *>( ls->getThis() ) );
                             weiter->spielErstelltAbbrechen( ret->get( jetzt ) );
                             weiter->release();
                         }
@@ -823,13 +822,13 @@ void LSKlient::thread()
                         {
                             jetzt++;
                             int gruppeId = ret->get( jetzt );
-                            MSGWeiterleitung *weiter = new MSGWeiterleitung( (LoginServer *)ls->getThis() );
+                            MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<LoginServer *>( ls->getThis() ) );
                             weiter->spielerLeavesGruppe( gruppeId, accountId );
                             weiter->release();
                             jetzt++;
                             if( ret->get( jetzt ) )
                             {
-                                MSGWeiterleitung *weiter = new MSGWeiterleitung( (LoginServer *)ls->getThis() );
+                                MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<LoginServer *>( ls->getThis() ) );
                                 weiter->setGruppeAdmin( gruppeId, ls->zDB()->getGruppeAdmin( gruppeId ) );
                                 weiter->release();
                             }
@@ -838,7 +837,7 @@ void LSKlient::thread()
                         {
                             jetzt++;
                             int gruppeId = ret->get( jetzt );
-                            MSGWeiterleitung *weiter = new MSGWeiterleitung( (LoginServer *)ls->getThis() );
+                            MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<LoginServer *>( ls->getThis() ) );
                             weiter->kickSpielerAusGruppe( gruppeId );
                             weiter->release();
                         }
@@ -895,10 +894,10 @@ int LSKlient::getKlientNummer() const // gibt die KlientId zur
 
 // Inhalt der MSGWeiterleitung Klasse aus LoginServer.h
 // Konstruktor
-MSGWeiterleitung::MSGWeiterleitung( LoginServer * ls )
+MSGWeiterleitung::MSGWeiterleitung( LoginServer *ls )
+    : ReferenceCounter()
 {
     this->ls = ls;
-    ref = 1;
 }
 
 // Destruktor
@@ -926,7 +925,7 @@ bool MSGWeiterleitung::spielErstelltAbbrechen( int spielErstelltId )
         ret = ret & klient->getNachrichtEncrypted( &res, 1 );
         if( res )
         {
-            ret = ret & klient->sendeEncrypted( (char *)& spielErstelltId, 4 );
+            ret = ret & klient->sendeEncrypted( (char *)&spielErstelltId, 4 );
             ret = ret & klient->getNachrichtEncrypted( &res, 1 );
         }
         ret = (char)ret & res;
@@ -936,7 +935,7 @@ bool MSGWeiterleitung::spielErstelltAbbrechen( int spielErstelltId )
         ls->addEmpfangen( klient->getDownloadBytes( 1 ) );
         ls->addGesendet( klient->getUploadBytes( 1 ) );
         klient->trenne();
-        klient = klient->release();
+        klient = (Klient *)klient->release();
         ip->release();
     }
     return ret;
@@ -952,7 +951,7 @@ bool MSGWeiterleitung::spielerLeavesGruppe( int gruppeId, int accountId )
         int account = accId->get( i );
         if( account == accountId )
             continue;
-        Text * ip = new Text( "" );
+        Text *ip = new Text( "" );
         unsigned short port = 0;
         ret = ret & ls->zDB()->getChatServerPortIp( account, &port, ip );
         if( ip->getLength() )
@@ -967,9 +966,9 @@ bool MSGWeiterleitung::spielerLeavesGruppe( int gruppeId, int accountId )
             ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             if( res )
             {
-                ret = ret & klient->sendeEncrypted( (char *)& account, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& accountId, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& gruppeId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&accountId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
@@ -978,15 +977,15 @@ bool MSGWeiterleitung::spielerLeavesGruppe( int gruppeId, int accountId )
             ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             if( res )
             {
-                ret = ret & klient->sendeEncrypted( (char *)& account, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& gruppeId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
             ls->addEmpfangen( klient->getDownloadBytes( 1 ) );
             ls->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -999,7 +998,7 @@ bool MSGWeiterleitung::setGruppeAdmin( int gruppeId, int adminId )
     if( !adminId || !gruppeId )
         return 0;
     bool ret = 1;
-    Array< int > * accId = new Array< int >();
+    Array< int > *accId = new Array< int >();
     int anzahl = ls->zDB()->getSpielerAusGruppe( gruppeId, accId );
     for( int i = 0; i < anzahl; i++ )
     {
@@ -1019,16 +1018,16 @@ bool MSGWeiterleitung::setGruppeAdmin( int gruppeId, int adminId )
             ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             if( res )
             {
-                ret = ret & klient->sendeEncrypted( (char *)& account, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& adminId, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& gruppeId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&adminId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
             ls->addEmpfangen( klient->getDownloadBytes( 1 ) );
             ls->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1046,7 +1045,7 @@ bool MSGWeiterleitung::spielerLeavesChatroom( int chatroomId, int accountId )
         int account = accId->get( i );
         if( account == accountId )
             continue;
-        Text * ip = new Text( "" );
+        Text *ip = new Text( "" );
         unsigned short port = 0;
         ret = ret & ls->zDB()->getChatServerPortIp( account, &port, ip );
         if( ip->getLength() )
@@ -1061,16 +1060,16 @@ bool MSGWeiterleitung::spielerLeavesChatroom( int chatroomId, int accountId )
             ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             if( res )
             {
-                ret = ret & klient->sendeEncrypted( (char *)& accountId, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& account, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& chatroomId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&accountId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&chatroomId, 4 );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
             ls->addEmpfangen( klient->getDownloadBytes( 1 ) );
             ls->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1083,7 +1082,7 @@ bool MSGWeiterleitung::setChatroomAdmin( int chatroomId, int adminId )
     if( !adminId || !chatroomId )
         return 0;
     bool ret = 1;
-    Text * ip = new Text( "" );
+    Text *ip = new Text( "" );
     unsigned short port = 0;
     ret = ret & ls->zDB()->getChatServerPortIp( adminId, &port, ip );
     if( ip->getLength() )
@@ -1098,15 +1097,15 @@ bool MSGWeiterleitung::setChatroomAdmin( int chatroomId, int adminId )
         ret = ret & klient->getNachrichtEncrypted( &res, 1 );
         if( res )
         {
-            ret = ret & klient->sendeEncrypted( (char *)& adminId, 4 );
-            ret = ret & klient->sendeEncrypted( (char *)& chatroomId, 4 );
+            ret = ret & klient->sendeEncrypted( (char *)&adminId, 4 );
+            ret = ret & klient->sendeEncrypted( (char *)&chatroomId, 4 );
             ret = ret & klient->getNachrichtEncrypted( &res, 1 );
         }
         ret = (char)ret & res;
         ls->addEmpfangen( klient->getDownloadBytes( 1 ) );
         ls->addGesendet( klient->getUploadBytes( 1 ) );
         klient->trenne();
-        klient = klient->release();
+        klient = (Klient *)klient->release();
     }
     ip->release();
     return ret;
@@ -1117,56 +1116,39 @@ bool MSGWeiterleitung::kickSpielerAusGruppe( int gruppeId )
     if( !gruppeId )
         return 0;
     bool ret = 1;
-    Array< int > * accId = new Array< int >();
+    Array< int > *accId = new Array< int >();
     int anzahl = ls->zDB()->getSpielerAusGruppe( gruppeId, accId );
     for( int i = 0; i < anzahl; i++ )
     {
         int account = accId->get( i );
         Text *ip = new Text( "" );
         unsigned short port = 0;
-        ret = ret & ls->zDB()->getChatServerPortIp( account, &port, ip );
+        ret = ret && ls->zDB()->getChatServerPortIp( account, &port, ip );
         if( ip->getLength() )
         {
             Klient *klient = new Klient();
             unsigned char key[ 20 ] = { 78, 20, 190, 133, 10, 175, 51, 96, 62, 1, 180, 194, 126, 50, 211, 154, 105, 227, 22, 101 };
             klient->setSendeKey( (char *)key, 20 );
             klient->setEmpfangKey( (char *)key, 20 );
-            ret = ret & klient->verbinde( port, ip->getText() );
-            ret = ret & klient->sendeEncrypted( "\5\x16", 2 );
+            ret = ret && klient->verbinde( port, ip->getText() );
+            ret = ret && klient->sendeEncrypted( "\5\x16", 2 );
             char res = 0;
-            ret = ret & klient->getNachrichtEncrypted( &res, 1 );
+            ret = ret && klient->getNachrichtEncrypted( &res, 1 );
             if( res )
             {
-                ret = ret & klient->sendeEncrypted( (char *)& account, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& gruppeId, 4 );
-                ret = ret & klient->getNachrichtEncrypted( &res, 1 );
+                ret = ret && klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret && klient->sendeEncrypted( (char *)&gruppeId, 4 );
+                ret = ret && klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
             ls->addEmpfangen( klient->getDownloadBytes( 1 ) );
             ls->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ls->zDB()->kickSpielerAusGruppe( gruppeId, account );
         ip->release();
     }
     accId->release();
     return ret;
-}
-
-// constant
-
-// Reference Counting
-MSGWeiterleitung *MSGWeiterleitung::getThis()
-{
-    ref++;
-    return this;
-}
-
-MSGWeiterleitung *MSGWeiterleitung::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 76 - 82
LoginServer/LoginServer.h

@@ -16,110 +16,104 @@ class LSKlient;
 class LoginServer : public Thread
 {
 private:
-	Server *server;
-	SSLServer *aServer;
-	InitDatei *ini;
-	LSDatenbank *db;
-	CRITICAL_SECTION cs;
-	RCArray< LSKlient > *klients;
-	Text *fehler;
-	int klientAnzahl;
-	int id;
-	bool nichtPausiert;
-	int empfangen;
-	int gesendet;
-	bool end;
+    Server *server;
+    SSLServer *aServer;
+    InitDatei *ini;
+    LSDatenbank *db;
+    CRITICAL_SECTION cs;
+    RCArray< LSKlient > *klients;
+    Text *fehler;
+    int klientAnzahl;
+    int id;
+    bool nichtPausiert;
+    int empfangen;
+    int gesendet;
+    bool end;
 
 public:
-	// Konstruktor 
-	LoginServer( InitDatei *zIni );
-	// Destruktor 
-	virtual ~LoginServer();
-	// nicht constant
-	void runn();
-	void thread();
-	void close();
-	bool serverStarten();
-	bool serverPause();
-	bool serverFortsetzen();
-	bool serverBeenden();
-	bool setMaxKlients( int mc );
-	bool absturzKlient( int klientId );
-	bool removeKlient( LSKlient *zKlient );
-	void addGesendet( int bytes );
-	void addEmpfangen( int bytes );
-	// conatant 
-	bool istAn() const;
-	Server *zServer() const;
-	LSDatenbank *zDB() const;
-	bool hatClients() const;
-	int getId() const;
-	char *getLetzterFehler() const;
+    // Konstruktor 
+    LoginServer( InitDatei *zIni );
+    // Destruktor 
+    virtual ~LoginServer();
+    // nicht constant
+    void runn();
+    void thread();
+    void close();
+    bool serverStarten();
+    bool serverPause();
+    bool serverFortsetzen();
+    bool serverBeenden();
+    bool setMaxKlients( int mc );
+    bool absturzKlient( int klientId );
+    bool removeKlient( LSKlient *zKlient );
+    void addGesendet( int bytes );
+    void addEmpfangen( int bytes );
+    // conatant 
+    bool istAn() const;
+    Server *zServer() const;
+    LSDatenbank *zDB() const;
+    bool hatClients() const;
+    int getId() const;
+    char *getLetzterFehler() const;
 };
 
 class LSAKlient : public Thread
 {
 private:
-	SSLSKlient *klient;
-	Text *name;
-	Text *passwort;
-	int adminId;
-	LoginServer *ls;
-	int version;
+    SSLSKlient *klient;
+    Text *name;
+    Text *passwort;
+    int adminId;
+    LoginServer *ls;
+    int version;
 
 public:
-	// Konstruktor 
-	LSAKlient( SSLSKlient *klient, LoginServer *ls );
-	// Destruktor 
-	virtual ~LSAKlient();
-	// nicht constant
-	void thread();
-	void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum AKlient
+    // Konstruktor 
+    LSAKlient( SSLSKlient *klient, LoginServer *ls );
+    // Destruktor 
+    virtual ~LSAKlient();
+    // nicht constant
+    void thread();
+    void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum AKlient
 };
 
 class LSKlient : public Thread
 {
 private:
-	SKlient     *klient;
-	unsigned int klientNummer;
-	LoginServer *ls;
+    SKlient *klient;
+    unsigned int klientNummer;
+    LoginServer *ls;
 
 public:
-	// Konstruktor 
-	LSKlient( SKlient *klient, LoginServer *ls );
-	// Destruktor 
-	virtual ~LSKlient();
-	// nicht constant 
-	void absturz();
-	void thread();
-	// constant
-	void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum Klient
-	int getKlientNummer() const;
+    // Konstruktor 
+    LSKlient( SKlient *klient, LoginServer *ls );
+    // Destruktor 
+    virtual ~LSKlient();
+    // nicht constant 
+    void absturz();
+    void thread();
+    // constant
+    void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum Klient
+    int getKlientNummer() const;
 };
 
-class MSGWeiterleitung
+class MSGWeiterleitung : public virtual ReferenceCounter
 {
 private:
-	LoginServer *ls;
-	int ref;
+    LoginServer *ls;
 
 public:
-	// Konstruktor
-	MSGWeiterleitung( LoginServer *ls );
-	// Destruktor
-	~MSGWeiterleitung();
-	// nicht constant
-	bool spielErstelltAbbrechen( int spielErstelltId );
-	bool spielerLeavesGruppe( int gruppeId, int accountId );
-	bool setGruppeAdmin( int gruppeId, int adminId );
-	bool spielerLeavesChatroom( int chatroomId, int accountId );
-	bool setChatroomAdmin( int chatroomId, int adminId );
-	bool kickSpielerAusGruppe( int gruppeId );
-	// constant
-
-	// Reference Counting
-	MSGWeiterleitung *getThis();
-	MSGWeiterleitung *release();
+    // Konstruktor
+    MSGWeiterleitung( LoginServer *ls );
+    // Destruktor
+    ~MSGWeiterleitung();
+    // nicht constant
+    bool spielErstelltAbbrechen( int spielErstelltId );
+    bool spielerLeavesGruppe( int gruppeId, int accountId );
+    bool setGruppeAdmin( int gruppeId, int adminId );
+    bool spielerLeavesChatroom( int chatroomId, int accountId );
+    bool setChatroomAdmin( int chatroomId, int adminId );
+    bool kickSpielerAusGruppe( int gruppeId );
 };
 
 #endif

+ 6 - 4
LoginServer/LoginServer.vcxproj

@@ -37,7 +37,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <RemoteProjectDir>$(RemoteRootDir)/Server/$(ProjectName)/release</RemoteProjectDir>
     <TargetExt />
-    <IncludePath>..\..\..\..\Allgemein\Framework;../../../Framework/release;..\..\..\..\Allgemein\Network\Network;../../../Network/release;..\..\..\..\Allgemein\sql\sql;../../../sql/release;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\..\..\Allgemein\Framework;../../../Framework/release;..\..\..\..\Allgemein\Network\Network;../../../Network/release/Network;..\..\..\..\Allgemein\sql\sql;../../../sql/release/sql;$(IncludePath)</IncludePath>
     <OutDir>$(RemoteRootDir)/Server/$(ProjectName)/release/</OutDir>
     <IntDir>$(RemoteRootDir)/Server/$(ProjectName)/release/</IntDir>
     <RemoteTargetPath>$(RemoteProjectDir)/$(TargetName)$(TargetExt)</RemoteTargetPath>
@@ -45,7 +45,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <TargetExt />
     <RemoteProjectDir>$(RemoteRootDir)/Server/$(ProjectName)/debug</RemoteProjectDir>
-    <IncludePath>..\..\..\..\Allgemein\Framework;../../../Framework/debug;..\..\..\..\Allgemein\Network\Network;../../../Network/debug;..\..\..\..\Allgemein\sql\sql;../../../sql/debug;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\..\..\Allgemein\Framework;../../../Framework/debug;..\..\..\..\Allgemein\Network\Network;../../../Network/debug/Network;..\..\..\..\Allgemein\sql\sql;../../../sql/debug/sql;$(IncludePath)</IncludePath>
     <OutDir>$(RemoteRootDir)/Server/$(ProjectName)/debug/</OutDir>
     <IntDir>$(RemoteRootDir)/Server/$(ProjectName)/debug/</IntDir>
     <RemoteTargetPath>$(RemoteProjectDir)/$(TargetName)$(TargetExt)</RemoteTargetPath>
@@ -62,15 +62,17 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <Link>
       <AdditionalLibraryDirectories>$(RemoteRootDir)/sql/release;$(RemoteRootDir)/Network/release;$(RemoteRootDir)/Framework/release;/usr/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <LibraryDependencies>Framework;Network;SQL;pq;pthread</LibraryDependencies>
+      <LibraryDependencies>Framework;Network;SQL;pq;pthread;ssl</LibraryDependencies>
       <AdditionalOptions>-Wl,-rpath,../lib %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(RemoteProjectDir)/$(TargetName)$(TargetExt)</OutputFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <Link>
       <AdditionalOptions>-Wl,-rpath,../lib %(AdditionalOptions)</AdditionalOptions>
-      <LibraryDependencies>dbgFramework;dbgNetwork;dbgSQL;pq;pthread</LibraryDependencies>
+      <LibraryDependencies>dbgFramework;dbgNetwork;dbgSQL;pq;pthread;ssl</LibraryDependencies>
       <AdditionalLibraryDirectories>$(RemoteRootDir)/sql/debug;$(RemoteRootDir)/Network/debug;$(RemoteRootDir)/Framework/debug;/usr/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <OutputFile>$(RemoteProjectDir)/$(TargetName)$(TargetExt)</OutputFile>
     </Link>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 32 - 32
LoginServer/main.cpp

@@ -7,31 +7,31 @@
 
 int main()
 {
-	struct rlimit core_limits;
-	core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
-	setrlimit(RLIMIT_CORE, &core_limits);
+    struct rlimit core_limits;
+    core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
+    setrlimit( RLIMIT_CORE, &core_limits );
 
     Framework::initFramework();
-	Zeit *z = getZeit();
-	Text *pfad = new Text( "../log/login/" );
-	pfad->append( z->getZeit( "y-m-d h-i-s.log" ) );
-	z->release();
-	DateiPfadErstellen( pfad->getThis() );
-	std::ofstream file;
-	file.open( pfad->getText() );
-	std::streambuf* sbuf = std::cout.rdbuf();
-	std::cout.rdbuf( file.rdbuf() );
-	pfad->release();
+    Zeit *z = getZeit();
+    Text *pfad = new Text( "../log/login/" );
+    pfad->append( z->getZeit( "y-m-d h-i-s.log" ) );
+    z->release();
+    DateiPfadErstellen( pfad->getText() );
+    std::ofstream file;
+    file.open( pfad->getText() );
+    std::streambuf *sbuf = std::cout.rdbuf();
+    std::cout.rdbuf( file.rdbuf() );
+    pfad->release();
 
-	std::cout << "LS: Startet...\n";
-	std::cout << "LS: Lese init Datei ../data/lsInit.ini ...\n";
-	InitDatei *dat = new InitDatei( "../data/lsInit.ini" );
-	if( !dat->laden() )
-	{
-		std::cout << "LS: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
-		dat->release();
-		exit( 1 );
-	}
+    std::cout << "LS: Startet...\n";
+    std::cout << "LS: Lese init Datei ../data/lsInit.ini ...\n";
+    InitDatei *dat = new InitDatei( "../data/lsInit.ini" );
+    if( !dat->laden() )
+    {
+        std::cout << "LS: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
+        dat->release();
+        exit( 1 );
+    }
     const char *wichtig[] = { "ServerId", "DBBenutzer", "DBPasswort", "DBName", "DBIP", "DBPort", "Aktiv", "SSLCert", "SSLKey", "SSLPasswort" };
     for( const char *w : wichtig )
     {
@@ -43,17 +43,17 @@ int main()
         }
     }
 
-	LoginServer *lServer = new LoginServer( dat );
+    LoginServer *lServer = new LoginServer( dat );
 
-	std::cout << "LS: Der Admin Server läuft. Startforgang beendet.\n";
-	lServer->runn();
+    std::cout << "LS: Der Admin Server läuft. Startforgang beendet.\n";
+    lServer->runn();
 
-	lServer->ende();
-	lServer->release();
-	dat->release();
-	std::cout << "LS: Der Server ist heruntergefahren.\n";
-	file.close();
-	std::cout.rdbuf( sbuf );
+    lServer->ende();
+    lServer->release();
+    dat->release();
+    std::cout << "LS: Der Server ist heruntergefahren.\n";
+    file.close();
+    std::cout.rdbuf( sbuf );
     Framework::releaseFramework();
-	return 0;
+    return 0;
 }