Kolja Strohm преди 3 години
родител
ревизия
6da42abf1a
променени са 7 файла, в които са добавени 981 реда и са изтрити 1021 реда
  1. 743 758
      MainServer/Datenbank.cpp
  2. 46 50
      MainServer/Datenbank.h
  3. BIN
      MainServer/MainServer
  4. 82 99
      MainServer/MainServer.cpp
  5. 72 78
      MainServer/MainServer.h
  6. 6 4
      MainServer/MainServer.vcxproj
  7. 32 32
      MainServer/main.cpp

+ 743 - 758
MainServer/Datenbank.cpp

@@ -4,20 +4,20 @@
 // Inhalt der MSDatenbank Klasse aus Datenbank.h
 // Konstruktor
 MSDatenbank::MSDatenbank( InitDatei *zDat )
+    : ReferenceCounter()
 {
-	datenbank = new Datenbank( zDat->zWert( "DBBenutzer" )->getText(), zDat->zWert( "DBPasswort" )->getText(),
-							   zDat->zWert( "DBName" )->getText(), zDat->zWert( "DBIP" )->getText(),
-							   (unsigned short)TextZuInt( zDat->zWert( "DBPort" )->getText(), 10 ) );
-	if( !datenbank->istOk() )
-	{
-		std::cout << "MS: Es konnte keine Verbindung zur Datenbank hergestellt werden:\n";
-		Text *txt = datenbank->getLetzterFehler();
-		std::cout << txt->getText() << "\nDas Programm wird beendet.";
-		txt->release();
-		exit( 1 );
-	}
-	InitializeCriticalSection( &ths );
-	ref = 1;
+    datenbank = new Datenbank( zDat->zWert( "DBBenutzer" )->getText(), zDat->zWert( "DBPasswort" )->getText(),
+                               zDat->zWert( "DBName" )->getText(), zDat->zWert( "DBIP" )->getText(),
+                               (unsigned short)TextZuInt( zDat->zWert( "DBPort" )->getText(), 10 ) );
+    if( !datenbank->istOk() )
+    {
+        std::cout << "MS: Es konnte keine Verbindung zur Datenbank hergestellt werden:\n";
+        Text *txt = datenbank->getLetzterFehler();
+        std::cout << txt->getText() << "\nDas Programm wird beendet.";
+        txt->release();
+        exit( 1 );
+    }
+    InitializeCriticalSection( &ths );
     Text befehl = "SELECT port, admin_port  FROM server WHERE id = ";
     befehl += zDat->zWert( "ServerId" )->getText();
     lock();
@@ -35,279 +35,279 @@ MSDatenbank::MSDatenbank( InitDatei *zDat )
 // Detruktor
 MSDatenbank::~MSDatenbank()
 {
-	datenbank->release();
-	DeleteCriticalSection( &ths );
+    datenbank->release();
+    DeleteCriticalSection( &ths );
 }
 
 // nicht constant
 void MSDatenbank::lock()
 {
-	EnterCriticalSection( &ths );
+    EnterCriticalSection( &ths );
 }
 
 void MSDatenbank::unlock()
 {
-	LeaveCriticalSection( &ths );
+    LeaveCriticalSection( &ths );
 }
 
 int MSDatenbank::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 MSDatenbank::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;
 }
 
 unsigned int MSDatenbank::getNextClientId()
 {
-	lock();
-	if( !datenbank->befehl( "SELECT get_next_client_id()" ) )
-	{
-		unlock();
-		return 0;
-	}
-	Result res = datenbank->getResult();
-	unlock();
-	unsigned int ret = (unsigned int)TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    lock();
+    if( !datenbank->befehl( "SELECT get_next_client_id()" ) )
+    {
+        unlock();
+        return 0;
+    }
+    Result res = datenbank->getResult();
+    unlock();
+    unsigned int ret = (unsigned int)TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 Text *MSDatenbank::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;
 }
 
 bool MSDatenbank::proveRegisteredClient( unsigned int num )
 {
-	Text *befehl = new Text( "SELECT * FROM client WHERE id = " );
-	befehl->append( num );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	bool ret = res.zeilenAnzahl == 1;
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT * FROM client WHERE id = " );
+    befehl->append( num );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    bool ret = res.zeilenAnzahl == 1;
+    res.destroy();
+    return ret;
 }
 
 int *MSDatenbank::unregisterClient( unsigned int num, int *len )
 {
-	Text *befehl = new Text( "SELECT unregister_client( " );
-	befehl->append( num );
-	befehl->append( " )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	Result res = datenbank->getResult();
-	unlock();
-	befehl->release();
-	if( len )
-		*len = res.zeilenAnzahl;
-	if( !res.zeilenAnzahl )
-	{
-		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 unregister_client( " );
+    befehl->append( num );
+    befehl->append( " )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    Result res = datenbank->getResult();
+    unlock();
+    befehl->release();
+    if( len )
+        *len = res.zeilenAnzahl;
+    if( !res.zeilenAnzahl )
+    {
+        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;
 }
 
 int MSDatenbank::suchPatchServer( unsigned int client )
 {
-	Text *befehl = new Text( "SELECT such_server( " );
-	befehl->append( client );
-	befehl->append( ", 'patch' )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT such_server( " );
+    befehl->append( client );
+    befehl->append( ", 'patch' )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 int MSDatenbank::suchRegisterServer( unsigned int client )
 {
-	Text *befehl = new Text( "SELECT such_server( " );
-	befehl->append( client );
-	befehl->append( ", 'register' )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT such_server( " );
+    befehl->append( client );
+    befehl->append( ", 'register' )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 int MSDatenbank::suchLoginServer( unsigned int client )
 {
-	Text *befehl = new Text( "SELECT such_server( " );
-	befehl->append( client );
-	befehl->append( ", 'login' )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT such_server( " );
+    befehl->append( client );
+    befehl->append( ", 'login' )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 int MSDatenbank::suchInformationServer( unsigned int client )
 {
-	Text *befehl = new Text( "SELECT such_server( " );
-	befehl->append( client );
-	befehl->append( ", 'information' )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT such_server( " );
+    befehl->append( client );
+    befehl->append( ", 'information' )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 int MSDatenbank::suchChatServer( unsigned int client )
 {
-	Text *befehl = new Text( "SELECT such_server( " );
-	befehl->append( client );
-	befehl->append( ", 'chat' )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT such_server( " );
+    befehl->append( client );
+    befehl->append( ", 'chat' )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 int MSDatenbank::suchAnmeldungServer( unsigned int client )
 {
-	Text *befehl = new Text( "SELECT such_server( " );
-	befehl->append( client );
-	befehl->append( ", 'anmeldung' )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT such_server( " );
+    befehl->append( client );
+    befehl->append( ", 'anmeldung' )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 int MSDatenbank::suchErhaltungServer( unsigned int client )
 {
-	Text *befehl = new Text( "SELECT such_server( " );
-	befehl->append( client );
-	befehl->append( ", 'erhaltung' )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT such_server( " );
+    befehl->append( client );
+    befehl->append( ", 'erhaltung' )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 int MSDatenbank::suchShopServer( unsigned int client )
@@ -315,7 +315,7 @@ int MSDatenbank::suchShopServer( unsigned int client )
     Text befehl = "SELECT server_id FROM server_client a, server b WHERE a.server_id = b.id AND b.server_typ_name = 'shop' AND a.client_id = ";
     befehl += (int)client;
     lock();
-    if( !datenbank->befehl( (char*)befehl ) )
+    if( !datenbank->befehl( (char *)befehl ) )
     {
         unlock();
         return 0;
@@ -330,7 +330,7 @@ int MSDatenbank::suchShopServer( unsigned int client )
     }
     res.destroy();
     lock();
-    if( !datenbank->befehl( "SELECT a.id, count( b.client_id ) AS anz FROM server a LEFT JOIN server_client b ON a.id = b.server_id WHERE a.server_typ_name = 'shop' AND a.server_status_id = 3 GROUP BY a.id ORDER BY anz LIMIT 1"  ) )
+    if( !datenbank->befehl( "SELECT a.id, count( b.client_id ) AS anz FROM server a LEFT JOIN server_client b ON a.id = b.server_id WHERE a.server_typ_name = 'shop' AND a.server_status_id = 3 GROUP BY a.id ORDER BY anz LIMIT 1" ) )
     {
         unlock();
         return 0;
@@ -345,39 +345,39 @@ int MSDatenbank::suchShopServer( unsigned int client )
     }
     int id = res.values[ 0 ];
     res.destroy();
-	befehl = "INSERT INTO server_client( client_id, server_id ) VALUES ( ";
+    befehl = "INSERT INTO server_client( client_id, server_id ) VALUES ( ";
     befehl += (int)client;
     befehl += ", ";
     befehl += id;
     befehl += " )";
-	lock();
-	if( !datenbank->befehl( (char*)befehl ) )
-	{
-		unlock();
-		return 0;
-	}
-	unlock();
-	return id;
+    lock();
+    if( !datenbank->befehl( (char *)befehl ) )
+    {
+        unlock();
+        return 0;
+    }
+    unlock();
+    return id;
 }
 
 int MSDatenbank::suchNewsServer( unsigned int client )
 {
-	Text *befehl = new Text( "SELECT such_server( " );
-	befehl->append( client );
-	befehl->append( ", 'news' )" );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	befehl->release();
-	Result res = datenbank->getResult();
-	unlock();
-	int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT such_server( " );
+    befehl->append( client );
+    befehl->append( ", 'news' )" );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    befehl->release();
+    Result res = datenbank->getResult();
+    unlock();
+    int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 int MSDatenbank::suchMinigameServer( unsigned int client )
@@ -436,564 +436,564 @@ unsigned char *MSDatenbank::getServerPortIp( int sId )
 
 int MSDatenbank::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;
 }
 
 bool MSDatenbank::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 MSDatenbank::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 MSDatenbank::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 MSDatenbank::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 = 'char' 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 = 'char' 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 MSDatenbank::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;
-}
-
-int MSDatenbank::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;
-}
-
-int MSDatenbank::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 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 MSDatenbank::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;
+}
+
+int MSDatenbank::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;
+}
+
 int MSDatenbank::clientistEingeloggt( int clientId )
 {
-	Text *befehl = new Text( "SELECT account_id FROM account_client WHERE client_id = " );
-	befehl->append( clientId );
-	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 account_id FROM account_client WHERE client_id = " );
+    befehl->append( clientId );
+    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;
 }
 
 bool MSDatenbank::getPatchServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'patch' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'patch' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getRegisterServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'register' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'register' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getLoginServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'login' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'login' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getInformationServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'information' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'information' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getChatServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'chat' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'chat' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getAnmeldungServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'anmeldung' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'anmeldung' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getSpielServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT account_id FROM account_client WHERE client_id = " );
-	befehl->append( client );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	Result res = datenbank->getResult();
-	unlock();
-	if( !res.zeilenAnzahl )
-	{
-		res.destroy();
-		befehl->release();
-		return 0;
-	}
-	int accountId = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	befehl->setText( "SELECT a.id FROM spiel a, spiel_spieler b WHERE b.spiel_id = a.id "
-					 "AND a.spiel_status_id < 3 AND b.spiel_spieler_status_id = 5 AND b.account_id = " );
-	befehl->append( accountId );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	res = datenbank->getResult();
-	unlock();
-	if( !res.zeilenAnzahl )
-	{
-		res.destroy();
-		befehl->release();
-		return 0;
-	}
-	int spielId = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	befehl->setText( "SELECT spiel_server_id FROM spiel WHERE id = " );
-	befehl->append( spielId );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	res = datenbank->getResult();
-	unlock();
-	if( !res.zeilenAnzahl )
-	{
-		res.destroy();
-		befehl->release();
-		return 0;
-	}
-	int serverId = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	befehl->setText( "SELECT port, ip FROM server WHERE id = " );
-	befehl->append( serverId );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	res = datenbank->getResult();
-	unlock();
-	befehl->release();
-	if( !res.zeilenAnzahl )
-	{
-		res.destroy();
-		return 0;
-	}
-	*port = TextZuInt( res.values[ 0 ].getText(), 10 );
-	ip->setText( res.values[ 1 ].getText() );
-	res.destroy();
-	return 1;
+    Text *befehl = new Text( "SELECT account_id FROM account_client WHERE client_id = " );
+    befehl->append( client );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    Result res = datenbank->getResult();
+    unlock();
+    if( !res.zeilenAnzahl )
+    {
+        res.destroy();
+        befehl->release();
+        return 0;
+    }
+    int accountId = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    befehl->setText( "SELECT a.id FROM spiel a, spiel_spieler b WHERE b.spiel_id = a.id "
+                     "AND a.spiel_status_id < 3 AND b.spiel_spieler_status_id = 5 AND b.account_id = " );
+    befehl->append( accountId );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    res = datenbank->getResult();
+    unlock();
+    if( !res.zeilenAnzahl )
+    {
+        res.destroy();
+        befehl->release();
+        return 0;
+    }
+    int spielId = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    befehl->setText( "SELECT spiel_server_id FROM spiel WHERE id = " );
+    befehl->append( spielId );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    res = datenbank->getResult();
+    unlock();
+    if( !res.zeilenAnzahl )
+    {
+        res.destroy();
+        befehl->release();
+        return 0;
+    }
+    int serverId = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    befehl->setText( "SELECT port, ip FROM server WHERE id = " );
+    befehl->append( serverId );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    res = datenbank->getResult();
+    unlock();
+    befehl->release();
+    if( !res.zeilenAnzahl )
+    {
+        res.destroy();
+        return 0;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getShopServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'shop' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'shop' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getNewsServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'news' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'news' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getHistorieServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'historie' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'historie' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getKartenServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b "
-							 "WHERE a.server_typ_name = 'karten' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 "
+                             "WHERE a.server_typ_name = 'karten' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getEditorServer( int client, Text *ip, int *port )
 {
-	Text *befehl = new Text( "SELECT a.port, a.ip FROM server AS a, server_client AS b "
-							 "WHERE a.server_typ_name = 'editor' AND a.id = b.server_id AND b.client_id = " );
-	befehl->append( client );
-	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;
-	}
-	*port = 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 AS a, server_client AS b "
+                             "WHERE a.server_typ_name = 'editor' AND a.id = b.server_id AND b.client_id = " );
+    befehl->append( client );
+    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;
+    }
+    *port = TextZuInt( res.values[ 0 ].getText(), 10 );
+    ip->setText( res.values[ 1 ].getText() );
+    res.destroy();
+    return 1;
 }
 
 bool MSDatenbank::getMinigameServer( int client, Text *ip, int *port )
@@ -1022,7 +1022,7 @@ bool MSDatenbank::getMinigameServer( int client, Text *ip, int *port )
     return 1;
 }
 
-bool MSDatenbank::getPatchServerList( Array< ServerData* > *list )
+bool MSDatenbank::getPatchServerList( Array< ServerData * > *list )
 {
     lock();
     if( !datenbank->befehl( "SELECT a.id, a.name, a.ip, a.port, a.admin_port, b.bezeichnung FROM server a, server_status b WHERE a.server_status_id = b.id AND a.server_typ_name = 'patch'" ) )
@@ -1061,27 +1061,12 @@ bool MSDatenbank::getPatchServerDetails( int id, ServerDetails *details )
     unlock();
     if( !res.zeilenAnzahl )
         return 0;
-    details->name = (char*)res.values[ 0 ];
-    details->ip = (char*)res.values[ 1 ];
+    details->name = (char *)res.values[ 0 ];
+    details->ip = (char *)res.values[ 1 ];
     details->port = (unsigned short)(int)res.values[ 2 ];
     details->adminPort = (unsigned short)(int)res.values[ 3 ];
     details->tasks = res.values[ 4 ];
     details->maxTasks = res.values[ 5 ];
     res.destroy();
     return 1;
-}
-
-// Reference Counting
-MSDatenbank *MSDatenbank::getThis()
-{
-	ref++;
-	return this;
-}
-
-MSDatenbank *MSDatenbank::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
 }

+ 46 - 50
MainServer/Datenbank.h

@@ -10,8 +10,8 @@ using namespace sql;
 
 namespace Admin_Recht
 {
-	const int MSStarten = 1;
-	const int MSBeenden = 2;
+    const int MSStarten = 1;
+    const int MSBeenden = 2;
 }
 
 struct ServerData
@@ -34,65 +34,61 @@ struct ServerDetails
     int maxTasks;
 };
 
-class MSDatenbank
+class MSDatenbank : public virtual ReferenceCounter
 {
 private:
-	Datenbank *datenbank;
-	CRITICAL_SECTION ths;
-	int ref;
+    Datenbank *datenbank;
+    CRITICAL_SECTION ths;
 
 public:
-	// Konstruktor
-	MSDatenbank( InitDatei *zDat );
-	// Detruktor
-	~MSDatenbank();
-	// nicht constant
-	void lock();
-	void unlock();
-	int istAdministrator( const char *name, const char *passwort );
-	bool adminHatRecht( int id, int recht );
-	unsigned int getNextClientId();
-	Text *getKlientKey( int cId );
-	bool proveRegisteredClient( unsigned int num );
-	int *unregisterClient( unsigned int num, int *len);
-	int suchPatchServer( unsigned int client );
-	int suchRegisterServer( unsigned int client );
-	int suchLoginServer( unsigned int client );
-	int suchInformationServer( unsigned int client );
-	int suchChatServer( unsigned int client );
-	int suchAnmeldungServer( unsigned int client );
-	int suchErhaltungServer( unsigned int client );
-	int suchShopServer( unsigned int client );
-	int suchNewsServer( unsigned int client );
+    // Konstruktor
+    MSDatenbank( InitDatei *zDat );
+    // Detruktor
+    ~MSDatenbank();
+    // nicht constant
+    void lock();
+    void unlock();
+    int istAdministrator( const char *name, const char *passwort );
+    bool adminHatRecht( int id, int recht );
+    unsigned int getNextClientId();
+    Text *getKlientKey( int cId );
+    bool proveRegisteredClient( unsigned int num );
+    int *unregisterClient( unsigned int num, int *len );
+    int suchPatchServer( unsigned int client );
+    int suchRegisterServer( unsigned int client );
+    int suchLoginServer( unsigned int client );
+    int suchInformationServer( unsigned int client );
+    int suchChatServer( unsigned int client );
+    int suchAnmeldungServer( unsigned int client );
+    int suchErhaltungServer( unsigned int client );
+    int suchShopServer( unsigned int client );
+    int suchNewsServer( unsigned int client );
     int suchMinigameServer( unsigned int client );
     unsigned char *getServerPortIp( int sId );
-	int logoutKlient( int klientId, Array< int > *ret );
-	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 );
-	int clientistEingeloggt( int clientId );
-	bool getPatchServer( int client, Text *ip, int *port );
-	bool getRegisterServer( int client, Text *ip, int *port );
-	bool getLoginServer( int client, Text *ip, int *port );
-	bool getInformationServer( int client, Text *ip, int *port );
-	bool getChatServer( int client, Text *ip, int *port );
-	bool getAnmeldungServer( int client, Text *ip, int *port );
-	bool getSpielServer( int client, Text *ip, int *port );
-	bool getShopServer( int client, Text *ip, int *port );
-	bool getNewsServer( int client, Text *ip, int *port );
+    int logoutKlient( int klientId, Array< int > *ret );
+    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 );
+    int clientistEingeloggt( int clientId );
+    bool getPatchServer( int client, Text *ip, int *port );
+    bool getRegisterServer( int client, Text *ip, int *port );
+    bool getLoginServer( int client, Text *ip, int *port );
+    bool getInformationServer( int client, Text *ip, int *port );
+    bool getChatServer( int client, Text *ip, int *port );
+    bool getAnmeldungServer( int client, Text *ip, int *port );
+    bool getSpielServer( int client, Text *ip, int *port );
+    bool getShopServer( int client, Text *ip, int *port );
+    bool getNewsServer( int client, Text *ip, int *port );
     bool getHistorieServer( int client, Text *ip, int *port );
     bool getKartenServer( int client, Text *ip, int *port );
     bool getEditorServer( int client, Text *ip, int *port );
     bool getMinigameServer( int client, Text *ip, int *port );
-    bool getPatchServerList( Array< ServerData* > *list );
+    bool getPatchServerList( Array< ServerData * > *list );
     bool getPatchServerDetails( int id, ServerDetails *details );
-    // Reference Counting
-	MSDatenbank *getThis();
-	MSDatenbank *release();
 };
 
 #endif

BIN
MainServer/MainServer


+ 82 - 99
MainServer/MainServer.cpp

@@ -17,7 +17,7 @@ MainServer::MainServer( InitDatei *zDat )
     clients = 0;
     empfangen = 0;
     gesendet = 0;
-    dat = zDat->getThis();
+    dat = dynamic_cast<InitDatei *>( zDat->getThis() );
     serverSSL = new SSLServer();
     serverSSL->setPrivateKeyPassword( zDat->zWert( "SSLPasswort" )->getText() );
     serverSSL->setCertificateFile( zDat->zWert( "SSLCert" )->getText() );
@@ -67,13 +67,13 @@ void MainServer::runn()
         if( end && klient )
         {
             klient->trenne();
-            klient = klient->release();
+            klient = (SSLSKlient *)klient->release();
             Sleep( 1000 );
             return;
         }
         if( !klient )
             continue;
-        MSAKlient * clHandle = new MSAKlient( klient, (MainServer *)getThis() );
+        MSAKlient *clHandle = new MSAKlient( klient, dynamic_cast<MainServer *>( getThis() ) );
         clHandle->start();
     }
 }
@@ -83,7 +83,7 @@ void MainServer::thread()
     MainServer *ms = this;
     if( sslServerThread )
         delete sslServerThread;
-    sslServerThread = new AsynchronCall( [ ms ]()
+    sslServerThread = new AsynchronCall( [ms]()
     {
         while( ms->serverSSL->isConnected() )
         {
@@ -91,14 +91,14 @@ void MainServer::thread()
             if( ms->end && klient )
             {
                 klient->trenne();
-                klient = klient->release();
+                klient = (SSLSKlient *)klient->release();
                 Sleep( 1000 );
                 return;
             }
             if( !klient )
                 continue;
             Framework::getThreadRegister()->cleanUpClosedThreads();
-            MSKlientSSL * clHandle = new MSKlientSSL( klient, (MainServer *)ms->getThis() );
+            MSKlientSSL *clHandle = new MSKlientSSL( klient, dynamic_cast<MainServer *>( ms->getThis() ) );
             clHandle->start();
             ms->clients++;
         }
@@ -110,7 +110,7 @@ void MainServer::thread()
         if( !klient )
             continue;
         Framework::getThreadRegister()->cleanUpClosedThreads();
-        MSKlient * clHandle = new MSKlient( klient, (MainServer *)getThis() );
+        MSKlient *clHandle = new MSKlient( klient, dynamic_cast<MainServer *>( getThis() ) );
         clHandle->start();
         clients++;
     }
@@ -198,7 +198,7 @@ InitDatei *MainServer::zInit() const
 
 // Inhalt der MSKlient Klasse aus MainServer.h
 // Konstruktor 
-MSAKlient::MSAKlient( SSLSKlient * klient, MainServer * ms )
+MSAKlient::MSAKlient( SSLSKlient *klient, MainServer *ms )
     : Thread()
 {
     this->klient = klient;
@@ -236,13 +236,13 @@ void MSAKlient::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 )
@@ -319,7 +319,7 @@ void MSAKlient::thread()
                     }
                     else
                         ok = 1;
-                    if( ok &&ms->hatClients() )
+                    if( ok && ms->hatClients() )
                     {
                         errorZuKlient( "Es sind noch Klients Online. Bitte versuche es später erneut." );
                         break;
@@ -377,21 +377,21 @@ void MSAKlient::thread()
                     else
                         errorZuKlient( "Fehler beim Abruf der Patch Server Tabelle." );
                     int anz = d.getEintragAnzahl();
-                    klient->sende( (char *)& anz, 4 );
+                    klient->sende( (char *)&anz, 4 );
                     for( int i = 0; i < anz; i++ )
                     {
                         ServerData *s = d.get( i );
-                        klient->sende( (char *)& s->id, 4 );
-                        klient->sende( (char *)& s->port, 2 );
-                        klient->sende( (char *)& s->adminPort, 2 );
+                        klient->sende( (char *)&s->id, 4 );
+                        klient->sende( (char *)&s->port, 2 );
+                        klient->sende( (char *)&s->adminPort, 2 );
                         unsigned char len = (unsigned char)s->name.getLength();
-                        klient->sende( (char *)& len, 1 );
+                        klient->sende( (char *)&len, 1 );
                         klient->sende( s->name, len );
                         len = (unsigned char)s->ip.getLength();
-                        klient->sende( (char *)& len, 1 );
+                        klient->sende( (char *)&len, 1 );
                         klient->sende( s->ip, len );
                         len = (unsigned char)s->status.getLength();
-                        klient->sende( (char *)& len, 1 );
+                        klient->sende( (char *)&len, 1 );
                         klient->sende( s->status, len );
                         delete s;
                     }
@@ -405,21 +405,21 @@ void MSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int id = 0;
-                    klient->getNachricht( (char *)& id, 4 );
+                    klient->getNachricht( (char *)&id, 4 );
                     ServerDetails d;
                     if( ms->zDB()->getPatchServerDetails( id, &d ) )
                     {
                         klient->sende( "\1", 1 );
                         unsigned char len = (unsigned char)d.name.getLength();
-                        klient->sende( (char *)& len, 1 );
+                        klient->sende( (char *)&len, 1 );
                         klient->sende( d.name, len );
                         len = (unsigned char)d.ip.getLength();
-                        klient->sende( (char *)& len, 1 );
+                        klient->sende( (char *)&len, 1 );
                         klient->sende( d.ip, len );
-                        klient->sende( (char *)& d.port, 2 );
-                        klient->sende( (char *)& d.adminPort, 2 );
-                        klient->sende( (char *)& d.tasks, 4 );
-                        klient->sende( (char *)& d.maxTasks, 4 );
+                        klient->sende( (char *)&d.port, 2 );
+                        klient->sende( (char *)&d.adminPort, 2 );
+                        klient->sende( (char *)&d.tasks, 4 );
+                        klient->sende( (char *)&d.maxTasks, 4 );
                     }
                     else
                         errorZuKlient( "Fehler beim abrufen der Server Details." );
@@ -453,7 +453,7 @@ void MSAKlient::errorZuKlient( const char *nachricht ) const // sendet eine Fehl
 
 
 // Konstruktor 
-MSKlientSSL::MSKlientSSL( SSLSKlient * klient, MainServer * ms )
+MSKlientSSL::MSKlientSSL( SSLSKlient *klient, MainServer *ms )
 {
     this->klient = klient;
     klientNummer = 0;
@@ -490,8 +490,8 @@ void MSKlientSSL::thread()
                     {
                         int port = TextZuInt( ms->zInit()->zWert( "ServerPort" )->getText(), 10 );
                         klient->sende( "\1", 1 );
-                        klient->sende( (char *)& port, 4 );
-                        klient->sende( (char *)& klientNummer, 4 );
+                        klient->sende( (char *)&port, 4 );
+                        klient->sende( (char *)&klientNummer, 4 );
                         char len = (char)key->getLength();
                         klient->sende( &len, 1 );
                         if( len )
@@ -534,7 +534,7 @@ void MSKlientSSL::errorZuKlient( const char *nachricht ) const // sendet eine Fe
 
 // Inhalt der MSKlient Klasse aus MainServer.h
 // Konstruktor 
-MSKlient::MSKlient( SKlient * klient, MainServer * ms )
+MSKlient::MSKlient( SKlient *klient, MainServer *ms )
     : Thread()
 {
     this->klient = klient;
@@ -574,9 +574,9 @@ void MSKlient::thread()
                 if( 1 )
                 {
                     if( encrypted )
-                        klient->getNachrichtEncrypted( (char *)& klientNummer, 4 );
+                        klient->getNachrichtEncrypted( (char *)&klientNummer, 4 );
                     else
-                        klient->getNachricht( (char *)& klientNummer, 4 );
+                        klient->getNachricht( (char *)&klientNummer, 4 );
                     bool ret1 = 0;
                     if( !klientNummer )
                     {
@@ -587,7 +587,7 @@ void MSKlient::thread()
                             if( key )
                             {
                                 klient->sendeEncrypted( "\1", 1 );
-                                klient->sendeEncrypted( (char *)& klientNummer, 4 );
+                                klient->sendeEncrypted( (char *)&klientNummer, 4 );
                                 char len = (char)key->getLength();
                                 klient->sendeEncrypted( &len, 1 );
                                 if( len )
@@ -602,7 +602,7 @@ void MSKlient::thread()
                         else
                         {
                             klient->sende( "\1", 1 );
-                            klient->sende( (char *)& klientNummer, 4 );
+                            klient->sende( (char *)&klientNummer, 4 );
                         }
                         ret1 = 1;
                     }
@@ -970,12 +970,12 @@ void MSKlient::thread()
                                 jetzt++;
                                 if( chatroomId )
                                 {
-                                    MSGWeiterleitung *weiter = new MSGWeiterleitung( (MainServer *)ms->getThis() );
+                                    MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<MainServer *>( ms->getThis() ) );
                                     weiter->spielerLeavesChatroom( chatroomId, accountId );
                                     weiter->release();
                                     if( ret->get( jetzt ) )
                                     {
-                                        MSGWeiterleitung *weiter = new MSGWeiterleitung( (MainServer *)ms->getThis() );
+                                        MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<MainServer *>( ms->getThis() ) );
                                         weiter->setChatroomAdmin( chatroomId, ms->zDB()->getChatroomAdmin( chatroomId ) );
                                         weiter->release();
                                     }
@@ -985,7 +985,7 @@ void MSKlient::thread()
                             if( ret->get( jetzt ) == 1 )
                             {
                                 jetzt++;
-                                MSGWeiterleitung *weiter = new MSGWeiterleitung( (MainServer *)ms->getThis() );
+                                MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<MainServer *>( ms->getThis() ) );
                                 weiter->spielErstelltAbbrechen( ret->get( jetzt ) );
                                 weiter->release();
                             }
@@ -994,13 +994,13 @@ void MSKlient::thread()
                             {
                                 jetzt++;
                                 int gruppeId = ret->get( jetzt );
-                                MSGWeiterleitung *weiter = new MSGWeiterleitung( (MainServer *)ms->getThis() );
+                                MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<MainServer *>( ms->getThis() ) );
                                 weiter->spielerLeavesGruppe( gruppeId, accountId );
                                 weiter->release();
                                 jetzt++;
                                 if( ret->get( jetzt ) )
                                 {
-                                    MSGWeiterleitung *weiter = new MSGWeiterleitung( (MainServer *)ms->getThis() );
+                                    MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<MainServer *>( ms->getThis() ) );
                                     weiter->setGruppeAdmin( gruppeId, ms->zDB()->getGruppeAdmin( gruppeId ) );
                                     weiter->release();
                                 }
@@ -1009,13 +1009,13 @@ void MSKlient::thread()
                             {
                                 jetzt++;
                                 int gruppeId = ret->get( jetzt );
-                                MSGWeiterleitung *weiter = new MSGWeiterleitung( (MainServer *)ms->getThis() );
+                                MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<MainServer *>( ms->getThis() ) );
                                 weiter->kickSpielerAusGruppe( gruppeId );
                                 weiter->release();
                             }
                         }
                     }
-                    MSGWeiterleitung *weiter = new MSGWeiterleitung( (MainServer *)ms->getThis() );
+                    MSGWeiterleitung *weiter = new MSGWeiterleitung( dynamic_cast<MainServer *>( ms->getThis() ) );
                     weiter->patchServerKlientAbsturz( klientNummer );
                     weiter->registerServerKlientAbsturz( klientNummer );
                     weiter->loginServerKlientAbsturz( klientNummer );
@@ -1081,10 +1081,10 @@ void MSKlient::errorZuKlient( const char *nachricht ) const // sendet eine Fehle
 
 // Inhalt der MSGWeiterleitung Klasse aus LoginServer.h
 // Konstruktor
-MSGWeiterleitung::MSGWeiterleitung( MainServer * ms )
+MSGWeiterleitung::MSGWeiterleitung( MainServer *ms )
+    : ReferenceCounter()
 {
     this->ms = ms;
-    ref = 1;
 }
 
 // Destruktor
@@ -1112,7 +1112,7 @@ bool MSGWeiterleitung::patchServerKlientAbsturz( int klientId )
     char ret = 0;
     k->sende( "\0", 1 ); // Verkeyung aktivieren
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1141,7 +1141,7 @@ bool MSGWeiterleitung::registerServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1170,7 +1170,7 @@ bool MSGWeiterleitung::loginServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1199,7 +1199,7 @@ bool MSGWeiterleitung::informationServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1228,7 +1228,7 @@ bool MSGWeiterleitung::chatServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1257,7 +1257,7 @@ bool MSGWeiterleitung::anmeldungServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1286,7 +1286,7 @@ bool MSGWeiterleitung::spielServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1315,7 +1315,7 @@ bool MSGWeiterleitung::shopServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1344,7 +1344,7 @@ bool MSGWeiterleitung::newsServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1373,7 +1373,7 @@ bool MSGWeiterleitung::historieServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1402,7 +1402,7 @@ bool MSGWeiterleitung::kartenServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1431,7 +1431,7 @@ bool MSGWeiterleitung::editorServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1460,7 +1460,7 @@ bool MSGWeiterleitung::minigameServerKlientAbsturz( int klientId )
     ip->release();
     char ret = 0;
     k->sendeEncrypted( "\2\2", 2 );
-    k->sendeEncrypted( (char *)& klientId, 4 );
+    k->sendeEncrypted( (char *)&klientId, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     bool erf = ret == 1;
     k->sendeEncrypted( "\3", 1 );
@@ -1490,7 +1490,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;
@@ -1500,7 +1500,7 @@ bool MSGWeiterleitung::spielErstelltAbbrechen( int spielErstelltId )
         ms->addEmpfangen( klient->getDownloadBytes( 1 ) );
         ms->addGesendet( klient->getUploadBytes( 1 ) );
         klient->trenne();
-        klient = klient->release();
+        klient = (Klient *)klient->release();
         ip->release();
     }
     return ret;
@@ -1516,7 +1516,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 & ms->zDB()->getChatServerPortIp( account, &port, ip );
         if( ip->getLength() )
@@ -1531,9 +1531,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;
@@ -1542,15 +1542,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;
             ms->addEmpfangen( klient->getDownloadBytes( 1 ) );
             ms->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1563,7 +1563,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 = ms->zDB()->getSpielerAusGruppe( gruppeId, accId );
     for( int i = 0; i < anzahl; i++ )
     {
@@ -1583,16 +1583,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;
             ms->addEmpfangen( klient->getDownloadBytes( 1 ) );
             ms->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1610,7 +1610,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 & ms->zDB()->getChatServerPortIp( account, &port, ip );
         if( ip->getLength() )
@@ -1625,16 +1625,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;
             ms->addEmpfangen( klient->getDownloadBytes( 1 ) );
             ms->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1647,7 +1647,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 & ms->zDB()->getChatServerPortIp( adminId, &port, ip );
     if( ip->getLength() )
@@ -1662,15 +1662,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;
         ms->addEmpfangen( klient->getDownloadBytes( 1 ) );
         ms->addGesendet( klient->getUploadBytes( 1 ) );
         klient->trenne();
-        klient = klient->release();
+        klient = (Klient *)klient->release();
     }
     ip->release();
     return ret;
@@ -1681,7 +1681,7 @@ 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 = ms->zDB()->getSpielerAusGruppe( gruppeId, accId );
     for( int i = 0; i < anzahl; i++ )
     {
@@ -1701,36 +1701,19 @@ bool MSGWeiterleitung::kickSpielerAusGruppe( int gruppeId )
             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;
             ms->addEmpfangen( klient->getDownloadBytes( 1 ) );
             ms->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ms->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;
 }

+ 72 - 78
MainServer/MainServer.h

@@ -13,80 +13,80 @@ using namespace Network;
 class MainServer : public Thread
 {
 private:
-	Server *server;
-	SSLServer *aServer;
+    Server *server;
+    SSLServer *aServer;
     SSLServer *serverSSL;
-	InitDatei *dat;
-	MSDatenbank *db;
+    InitDatei *dat;
+    MSDatenbank *db;
     AsynchronCall *sslServerThread;
-	CRITICAL_SECTION cs;
-	int empfangen;
-	int gesendet;
-	int clients;
-	bool end;
+    CRITICAL_SECTION cs;
+    int empfangen;
+    int gesendet;
+    int clients;
+    bool end;
 
 public:
-	// Konstruktor 
-	MainServer( InitDatei *zDat );
-	// Destruktor 
-	virtual ~MainServer();
-	// nicht constant 
-	void runn();
-	void thread();
-	void close();
-	bool serverStarten();
-	void serverBeenden();
-	void addGesendet( int bytes );
-	void addEmpfangen( int bytes );
-	void clientTrennung();
-	// constant 
-	Server *zServer() const;
-	MSDatenbank *zDB() const;
-	bool hatClients() const;
+    // Konstruktor 
+    MainServer( InitDatei *zDat );
+    // Destruktor 
+    virtual ~MainServer();
+    // nicht constant 
+    void runn();
+    void thread();
+    void close();
+    bool serverStarten();
+    void serverBeenden();
+    void addGesendet( int bytes );
+    void addEmpfangen( int bytes );
+    void clientTrennung();
+    // constant 
+    Server *zServer() const;
+    MSDatenbank *zDB() const;
+    bool hatClients() const;
     InitDatei *zInit() const;
 };
 
 class MSAKlient : public Thread
 {
 private:
-	SSLSKlient *klient;
-	Text *name;
-	Text *passwort;
-	int adminId;
-	MainServer *ms;
+    SSLSKlient *klient;
+    Text *name;
+    Text *passwort;
+    int adminId;
+    MainServer *ms;
 
 public:
-	// Konstruktor 
-	MSAKlient( SSLSKlient *klient, MainServer *ms );
-	// Destruktor 
-	virtual ~MSAKlient();
-	// nicht constant 
-	void thread();
-	void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum AKlient
+    // Konstruktor 
+    MSAKlient( SSLSKlient *klient, MainServer *ms );
+    // Destruktor 
+    virtual ~MSAKlient();
+    // nicht constant 
+    void thread();
+    void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum AKlient
 };
 
 class MSKlient : public Thread
 {
 private:
-	SKlient *klient;
-	unsigned int klientNummer;
-	MainServer *ms;
-	bool encrypted;
+    SKlient *klient;
+    unsigned int klientNummer;
+    MainServer *ms;
+    bool encrypted;
 
 public:
-	// Konstruktor 
-	MSKlient( SKlient *klient, MainServer *ms );
-	// Destruktor 
-	virtual ~MSKlient();
-	// nicht constant 
-	void thread();
-	void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum Klient
+    // Konstruktor 
+    MSKlient( SKlient *klient, MainServer *ms );
+    // Destruktor 
+    virtual ~MSKlient();
+    // nicht constant 
+    void thread();
+    void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum Klient
 };
 
 class MSKlientSSL : public Thread
 {
 private:
-    SSLSKlient * klient;
+    SSLSKlient *klient;
     unsigned int klientNummer;
     MainServer *ms;
 
@@ -100,42 +100,36 @@ public:
     void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum Klient
 };
 
-class MSGWeiterleitung
+class MSGWeiterleitung : public virtual ReferenceCounter
 {
 private:
-	MainServer *ms;
-	int ref;
+    MainServer *ms;
 
 public:
-	// Konstruktor
-	MSGWeiterleitung( MainServer *ms );
-	// Destruktor
-	~MSGWeiterleitung();
-	// nicht constant
-	bool patchServerKlientAbsturz( int klientId );
-	bool registerServerKlientAbsturz( int klientId );
-	bool loginServerKlientAbsturz( int klientId );
-	bool informationServerKlientAbsturz( int klientId );
-	bool chatServerKlientAbsturz( int klientId );
-	bool anmeldungServerKlientAbsturz( int klientId );
-	bool spielServerKlientAbsturz( int klientId );
-	bool shopServerKlientAbsturz( int klientId );
-	bool newsServerKlientAbsturz( int klientId );
+    // Konstruktor
+    MSGWeiterleitung( MainServer *ms );
+    // Destruktor
+    ~MSGWeiterleitung();
+    // nicht constant
+    bool patchServerKlientAbsturz( int klientId );
+    bool registerServerKlientAbsturz( int klientId );
+    bool loginServerKlientAbsturz( int klientId );
+    bool informationServerKlientAbsturz( int klientId );
+    bool chatServerKlientAbsturz( int klientId );
+    bool anmeldungServerKlientAbsturz( int klientId );
+    bool spielServerKlientAbsturz( int klientId );
+    bool shopServerKlientAbsturz( int klientId );
+    bool newsServerKlientAbsturz( int klientId );
     bool historieServerKlientAbsturz( int klientId );
     bool kartenServerKlientAbsturz( int klientId );
     bool editorServerKlientAbsturz( int klientId );
     bool minigameServerKlientAbsturz( int klientId );
-	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();
+    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
MainServer/MainServer.vcxproj

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

+ 32 - 32
MainServer/main.cpp

@@ -10,32 +10,32 @@
 
 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/main/" );
-	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/main/" );
+    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 << "MS: Startet...\n";
-	std::cout << "MS: Lese init Datei ../data/msInit.ini ...\n";
+    std::cout << "MS: Startet...\n";
+    std::cout << "MS: Lese init Datei ../data/msInit.ini ...\n";
 
-	InitDatei *dat = new InitDatei( "../data/msInit.ini" );
-	if( !dat->laden() )
-	{
-		std::cout << "MS: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
-		dat->release();
-		exit( 1 );
-	}
+    InitDatei *dat = new InitDatei( "../data/msInit.ini" );
+    if( !dat->laden() )
+    {
+        std::cout << "MS: 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", "SSLPort", "SSLCert", "SSLKey", "SSLPasswort" };
     for( const char *w : wichtig )
     {
@@ -47,19 +47,19 @@ int main()
         }
     }
 
-	MainServer *mserver = new MainServer( dat );
+    MainServer *mserver = new MainServer( dat );
 
-	std::cout << "MS: Der Admin Server läuft. Startforgang beendet.\n";
-	mserver->runn();
+    std::cout << "MS: Der Admin Server läuft. Startforgang beendet.\n";
+    mserver->runn();
     SSLKlient exitClient;
     exitClient.verbinde( (unsigned short)(int)*dat->zWert( "SSLPort" ), "127.0.0.1" );
 
-	mserver->ende();
-	mserver->release();
-	dat->release();
-	std::cout << "MS: Der Server ist heruntergefahren.\n";
-	file.close();
-	std::cout.rdbuf( sbuf );
+    mserver->ende();
+    mserver->release();
+    dat->release();
+    std::cout << "MS: Der Server ist heruntergefahren.\n";
+    file.close();
+    std::cout.rdbuf( sbuf );
     Framework::releaseFramework();
-	return 0;
+    return 0;
 }