Jelajahi Sumber

use framework reference counting

Kolja Strohm 3 tahun lalu
induk
melakukan
2086b4d7c7

+ 524 - 539
ErhaltungServer/Datenbank.cpp

@@ -5,17 +5,17 @@
 // Inhalt der ESDatenbank Klasse aus Datenbank.h
 // Konstruktor
 ESDatenbank::ESDatenbank( 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 << "ES: 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();
@@ -33,475 +33,475 @@ ESDatenbank::ESDatenbank( InitDatei *zIni )
 // Destruktor
 ESDatenbank::~ESDatenbank()
 {
-	datenbank->release();
-	DeleteCriticalSection( &cs );
+    datenbank->release();
+    DeleteCriticalSection( &cs );
 }
 
 // nicht constant
 void ESDatenbank::lock()
 {
-	EnterCriticalSection( &cs );
+    EnterCriticalSection( &cs );
 }
 
 void ESDatenbank::unlock()
 {
-	LeaveCriticalSection( &cs );
+    LeaveCriticalSection( &cs );
 }
 
 int ESDatenbank::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 ESDatenbank::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 ESDatenbank::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 *ESDatenbank::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 ESDatenbank::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 ESDatenbank::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 ESDatenbank::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 ESDatenbank::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;
 }
 
 bool ESDatenbank::getPatchServer( 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.id = b.server_id AND a.server_typ_name = 'patch' 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.id = b.server_id AND a.server_typ_name = 'patch' 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 ESDatenbank::getRegisterServer( 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.id = b.server_id AND a.server_typ_name = 'register' 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.id = b.server_id AND a.server_typ_name = 'register' 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 ESDatenbank::getLoginServer( 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.id = b.server_id AND a.server_typ_name = 'login' 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.id = b.server_id AND a.server_typ_name = 'login' 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 ESDatenbank::getInformationServer( 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.id = b.server_id AND a.server_typ_name = 'information' 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.id = b.server_id AND a.server_typ_name = 'information' 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 ESDatenbank::getChatServer( 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.id = b.server_id AND a.server_typ_name = 'chat' 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.id = b.server_id AND a.server_typ_name = 'chat' 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 ESDatenbank::getAnmeldungServer( 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.id = b.server_id AND a.server_typ_name = 'anmeldung' 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.id = b.server_id AND a.server_typ_name = 'anmeldung' 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 ESDatenbank::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.spiel_server_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 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.spiel_server_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 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 ESDatenbank::getShopServer( 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.id = b.server_id AND a.server_typ_name = 'shop' 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.id = b.server_id AND a.server_typ_name = 'shop' 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 ESDatenbank::getNewsServer( 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.id = b.server_id AND a.server_typ_name = 'news' 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.id = b.server_id AND a.server_typ_name = 'news' 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 ESDatenbank::getHistorieServer( 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.id = b.server_id AND a.server_typ_name = 'historie' 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.id = b.server_id AND a.server_typ_name = 'historie' 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 ESDatenbank::getKartenServer( int client, Text *ip, int *port )
@@ -584,183 +584,168 @@ bool ESDatenbank::getMinigameServer( int client, Text *ip, int *port )
 
 void ESDatenbank::removeKlient( int klientId )
 {
-	Text *befehl = new Text( "SELECT unregister_client( " );
-	befehl->append( klientId );
-	befehl->append( " )" );
-	lock();
-	datenbank->befehl( befehl->getText() );
-	unlock();
-	befehl->release();
+    Text *befehl = new Text( "SELECT unregister_client( " );
+    befehl->append( klientId );
+    befehl->append( " )" );
+    lock();
+    datenbank->befehl( befehl->getText() );
+    unlock();
+    befehl->release();
 }
 
 int ESDatenbank::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;
 }
 
 int ESDatenbank::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;
 }
 
 int ESDatenbank::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 ESDatenbank::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;
 }
 
 int ESDatenbank::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 ESDatenbank::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 ESDatenbank::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 *ESDatenbank::getLetzterFehler() const
 {
-	return datenbank->getLetzterFehler();
-}
-
-// Reference Counting
-ESDatenbank *ESDatenbank::getThis()
-{
-	ref++;
-	return this;
-}
-
-ESDatenbank *ESDatenbank::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return datenbank->getLetzterFehler();
 }

+ 40 - 44
ErhaltungServer/Datenbank.h

@@ -12,61 +12,57 @@ using namespace sql;
 // Administratoren 
 namespace Admin_Recht
 {
-	const int LSStarten = 16;
-	const int LSBeenden = 17;
-	const int LSPausieren = 18;
-	const int LSMCChange = 19;
+    const int LSStarten = 16;
+    const int LSBeenden = 17;
+    const int LSPausieren = 18;
+    const int LSMCChange = 19;
 }
 
-class ESDatenbank
+class ESDatenbank : public virtual ReferenceCounter
 {
 private:
-	Datenbank *datenbank;
-	CRITICAL_SECTION cs;
-	int ref;
+    Datenbank *datenbank;
+    CRITICAL_SECTION cs;
 
 public:
-	// Konstruktor
-	ESDatenbank( InitDatei *zIni );
-	// Destruktor
-	~ESDatenbank();
-	// nicht constant
-	void lock();
-	void unlock();
-	int istAdministrator( const char *name, const char *passwort );
-	bool adminHatRecht( int admin, 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 );
-	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 );
+    // Konstruktor
+    ESDatenbank( InitDatei *zIni );
+    // Destruktor
+    ~ESDatenbank();
+    // nicht constant
+    void lock();
+    void unlock();
+    int istAdministrator( const char *name, const char *passwort );
+    bool adminHatRecht( int admin, 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 );
+    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 );
-	void removeKlient( int klientId );
-	int clientIstEingeloggt( int clientId );
-	int logoutKlient( int klientId, Array< int > *ret );
-	int getSpielerAusGruppe( int gruppeId, Array< int > *accountId );
-	int kickSpielerAusGruppe( int gruppeId, int accountId );
-	int getGruppeAdmin( int gruppeId );
-	int getSpielerAusChatroom( int chatroomId, Array< int > *accountId );
-	int getChatroomAdmin( int chatroomId );
-	// constant
-	Text *getLetzterFehler() const;
-	// Reference Counting
-	ESDatenbank *getThis();
-	ESDatenbank *release();
+    void removeKlient( int klientId );
+    int clientIstEingeloggt( int clientId );
+    int logoutKlient( int klientId, Array< int > *ret );
+    int getSpielerAusGruppe( int gruppeId, Array< int > *accountId );
+    int kickSpielerAusGruppe( int gruppeId, int accountId );
+    int getGruppeAdmin( int gruppeId );
+    int getSpielerAusChatroom( int chatroomId, Array< int > *accountId );
+    int getChatroomAdmin( int chatroomId );
+    // constant
+    Text *getLetzterFehler() const;
 };
 
 #endif

TEMPAT SAMPAH
ErhaltungServer/ErhaltungServer


+ 63 - 80
ErhaltungServer/ErhaltungServer.cpp

@@ -19,7 +19,7 @@ ErhaltungServer::ErhaltungServer( InitDatei *zIni )
     gesendet = 0;
     clients = 0;
     fehler = new Text();
-    ini = zIni->getThis();
+    ini = dynamic_cast<InitDatei *>( zIni->getThis() );
     id = *zIni->zWert( "ServerId" );
     server = new Server();
     aServer = new SSLServer();
@@ -63,13 +63,13 @@ void ErhaltungServer::runn()
         if( end && klient )
         {
             klient->trenne();
-            klient = klient->release();
+            klient = (SSLSKlient *)klient->release();
             Sleep( 1000 );
             return;
         }
         if( !klient )
             continue;
-        ESAKlient * clHandle = new ESAKlient( klient, (ErhaltungServer *)getThis() );
+        ESAKlient *clHandle = new ESAKlient( klient, dynamic_cast<ErhaltungServer *>( getThis() ) );
         clHandle->start();
     }
 }
@@ -83,7 +83,7 @@ void ErhaltungServer::thread()
         if( !klient )
             continue;
         Framework::getThreadRegister()->cleanUpClosedThreads();
-        ESKlient * clHandle = new ESKlient( klient, (ErhaltungServer *)getThis() );
+        ESKlient *clHandle = new ESKlient( klient, dynamic_cast<ErhaltungServer *>( getThis() ) );
         clients++;
         clHandle->start();
     }
@@ -246,7 +246,7 @@ char *ErhaltungServer::getLetzterFehler() const
 
 // Inhalt der RSAKlient Klasse aus RegisterServer.h
 // Konstruktor 
-ESAKlient::ESAKlient( SSLSKlient * klient, ErhaltungServer * es )
+ESAKlient::ESAKlient( SSLSKlient *klient, ErhaltungServer *es )
     : Thread()
 {
     this->klient = klient;
@@ -285,13 +285,13 @@ void ESAKlient::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 )
@@ -387,7 +387,7 @@ void ESAKlient::thread()
                     }
                     else
                         ok = 1;
-                    if( ok &&es->hatClients() )
+                    if( ok && es->hatClients() )
                     {
                         errorZuKlient( "Es sind noch Klients Online. Bitte versuche es später erneut." );
                         break;
@@ -483,7 +483,7 @@ void ESAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int maxC = 0;
-                    klient->getNachricht( (char *)& maxC, 4 );
+                    klient->getNachricht( (char *)&maxC, 4 );
                     if( es->zDB()->adminHatRecht( adminId, Admin_Recht::LSMCChange ) )
                     {
                         if( es->setMaxKlients( (unsigned char)maxC ) )
@@ -526,7 +526,7 @@ void ESAKlient::errorZuKlient( const char *nachricht ) const // sendet eine Fehl
 
 // Inhalt der ESKThread Klasse aus ErhaltungServer.h
 // Konstruktor
-ESKThread::ESKThread( ESKlient * zKlient )
+ESKThread::ESKThread( ESKlient *zKlient )
     : Thread()
 {
     this->zKlient = zKlient;
@@ -555,7 +555,7 @@ void ESKThread::thread()
 
 // Inhalt der ESKlient Klasse aus ErhaltungServer.h
 // Konstruktor
-ESKlient::ESKlient( SKlient * klient, ErhaltungServer * es )
+ESKlient::ESKlient( SKlient *klient, ErhaltungServer *es )
     : Thread()
 {
     th = new ESKThread( this );
@@ -633,9 +633,9 @@ void ESKlient::thread()
             if( c == 1 ) // Klient hat sich verbunden
             {
                 if( encrypted )
-                    klient->getNachrichtEncrypted( (char *)& klientNummer, 4 );
+                    klient->getNachrichtEncrypted( (char *)&klientNummer, 4 );
                 else
-                    klient->getNachricht( (char *)& klientNummer, 4 );
+                    klient->getNachricht( (char *)&klientNummer, 4 );
                 if( !es->zDB()->proveKlient( klientNummer, es->getId() ) )
                 {
                     klientNummer = 0;
@@ -712,12 +712,12 @@ void ESKlient::thread()
                         jetzt++;
                         if( chatroomId )
                         {
-                            ESGWeiterleitung *weiter = new ESGWeiterleitung( (ErhaltungServer *)es->getThis() );
+                            ESGWeiterleitung *weiter = new ESGWeiterleitung( dynamic_cast<ErhaltungServer *>( es->getThis() ) );
                             weiter->spielerLeavesChatroom( chatroomId, accountId );
                             weiter->release();
                             if( ret->get( jetzt ) )
                             {
-                                ESGWeiterleitung *weiter = new ESGWeiterleitung( (ErhaltungServer *)es->getThis() );
+                                ESGWeiterleitung *weiter = new ESGWeiterleitung( dynamic_cast<ErhaltungServer *>( es->getThis() ) );
                                 weiter->setChatroomAdmin( chatroomId, es->zDB()->getChatroomAdmin( chatroomId ) );
                                 weiter->release();
                             }
@@ -727,7 +727,7 @@ void ESKlient::thread()
                     if( ret->get( jetzt ) == 1 )
                     {
                         jetzt++;
-                        ESGWeiterleitung *weiter = new ESGWeiterleitung( (ErhaltungServer *)es->getThis() );
+                        ESGWeiterleitung *weiter = new ESGWeiterleitung( dynamic_cast<ErhaltungServer *>( es->getThis() ) );
                         weiter->spielErstelltAbbrechen( ret->get( jetzt ) );
                         weiter->release();
                     }
@@ -736,13 +736,13 @@ void ESKlient::thread()
                     {
                         jetzt++;
                         int gruppeId = ret->get( jetzt );
-                        ESGWeiterleitung *weiter = new ESGWeiterleitung( (ErhaltungServer *)es->getThis() );
+                        ESGWeiterleitung *weiter = new ESGWeiterleitung( dynamic_cast<ErhaltungServer *>( es->getThis() ) );
                         weiter->spielerLeavesGruppe( gruppeId, accountId );
                         weiter->release();
                         jetzt++;
                         if( ret->get( jetzt ) )
                         {
-                            ESGWeiterleitung *weiter = new ESGWeiterleitung( (ErhaltungServer *)es->getThis() );
+                            ESGWeiterleitung *weiter = new ESGWeiterleitung( dynamic_cast<ErhaltungServer *>( es->getThis() ) );
                             weiter->setGruppeAdmin( gruppeId, es->zDB()->getGruppeAdmin( gruppeId ) );
                             weiter->release();
                         }
@@ -751,14 +751,14 @@ void ESKlient::thread()
                     {
                         jetzt++;
                         int gruppeId = ret->get( jetzt );
-                        ESGWeiterleitung *weiter = new ESGWeiterleitung( (ErhaltungServer *)es->getThis() );
+                        ESGWeiterleitung *weiter = new ESGWeiterleitung( dynamic_cast<ErhaltungServer *>( es->getThis() ) );
                         weiter->kickSpielerAusGruppe( gruppeId );
                         weiter->release();
                     }
                 }
                 ret->release();
                 es->zDB()->unregisterKlient( klientNummer, es->getId() );
-                ESGWeiterleitung *weiter = new ESGWeiterleitung( (ErhaltungServer *)es->getThis() );
+                ESGWeiterleitung *weiter = new ESGWeiterleitung( dynamic_cast<ErhaltungServer *>( es->getThis() ) );
                 weiter->patchServerKlientAbsturz( klientNummer );
                 weiter->registerServerKlientAbsturz( klientNummer );
                 weiter->loginServerKlientAbsturz( klientNummer );
@@ -780,7 +780,7 @@ void ESKlient::thread()
                 es->zDB()->unregisterKlient( klientNummer, es->getId() );
                 if( !abgemeldet )
                 {
-                    ESGWeiterleitung *weiter = new ESGWeiterleitung( (ErhaltungServer *)es->getThis() );
+                    ESGWeiterleitung *weiter = new ESGWeiterleitung( dynamic_cast<ErhaltungServer *>( es->getThis() ) );
                     weiter->patchServerKlientAbsturz( klientNummer );
                     weiter->registerServerKlientAbsturz( klientNummer );
                     weiter->loginServerKlientAbsturz( klientNummer );
@@ -826,10 +826,10 @@ void ESKlient::errorZuKlient( const char *nachricht ) const
 
 // Inhalt der ESGWeiterleitung Klasse aus ErhaltungServer.h
 // Konstruktor
-ESGWeiterleitung::ESGWeiterleitung( ErhaltungServer * es )
+ESGWeiterleitung::ESGWeiterleitung( ErhaltungServer *es )
+    : ReferenceCounter()
 {
     this->es = es;
-    ref = 1;
 }
 
 // Destruktor
@@ -857,7 +857,7 @@ bool ESGWeiterleitung::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 );
@@ -886,7 +886,7 @@ bool ESGWeiterleitung::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 );
@@ -915,7 +915,7 @@ bool ESGWeiterleitung::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 );
@@ -944,7 +944,7 @@ bool ESGWeiterleitung::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 );
@@ -973,7 +973,7 @@ bool ESGWeiterleitung::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 );
@@ -1002,7 +1002,7 @@ bool ESGWeiterleitung::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 );
@@ -1031,7 +1031,7 @@ bool ESGWeiterleitung::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 );
@@ -1060,7 +1060,7 @@ bool ESGWeiterleitung::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 );
@@ -1089,7 +1089,7 @@ bool ESGWeiterleitung::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 );
@@ -1118,7 +1118,7 @@ bool ESGWeiterleitung::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 );
@@ -1147,7 +1147,7 @@ bool ESGWeiterleitung::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 );
@@ -1176,7 +1176,7 @@ bool ESGWeiterleitung::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 );
@@ -1205,7 +1205,7 @@ bool ESGWeiterleitung::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 );
@@ -1235,7 +1235,7 @@ bool ESGWeiterleitung::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;
@@ -1245,7 +1245,7 @@ bool ESGWeiterleitung::spielErstelltAbbrechen( int spielErstelltId )
         es->addEmpfangen( klient->getDownloadBytes( 1 ) );
         es->addGesendet( klient->getUploadBytes( 1 ) );
         klient->trenne();
-        klient = klient->release();
+        klient = (Klient *)klient->release();
         ip->release();
     }
     return ret;
@@ -1261,7 +1261,7 @@ bool ESGWeiterleitung::spielerLeavesGruppe( int gruppeId, int accountId )
         int account = accId->get( i );
         if( account == accountId )
             continue;
-        Text * ip = new Text( "" );
+        Text *ip = new Text( "" );
         int port = 0;
         ret = ret & es->zDB()->getChatServer( account, ip, &port );
         if( ip->getLength() )
@@ -1276,9 +1276,9 @@ bool ESGWeiterleitung::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;
@@ -1287,15 +1287,15 @@ bool ESGWeiterleitung::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;
             es->addEmpfangen( klient->getDownloadBytes( 1 ) );
             es->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1308,7 +1308,7 @@ bool ESGWeiterleitung::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 = es->zDB()->getSpielerAusGruppe( gruppeId, accId );
     for( int i = 0; i < anzahl; i++ )
     {
@@ -1328,16 +1328,16 @@ bool ESGWeiterleitung::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;
             es->addEmpfangen( klient->getDownloadBytes( 1 ) );
             es->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1355,7 +1355,7 @@ bool ESGWeiterleitung::spielerLeavesChatroom( int chatroomId, int accountId )
         int account = accId->get( i );
         if( account == accountId )
             continue;
-        Text * ip = new Text( "" );
+        Text *ip = new Text( "" );
         int port = 0;
         ret = ret & es->zDB()->getChatServer( account, ip, &port );
         if( ip->getLength() )
@@ -1370,16 +1370,16 @@ bool ESGWeiterleitung::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;
             es->addEmpfangen( klient->getDownloadBytes( 1 ) );
             es->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1392,7 +1392,7 @@ bool ESGWeiterleitung::setChatroomAdmin( int chatroomId, int adminId )
     if( !adminId || !chatroomId )
         return 0;
     bool ret = 1;
-    Text * ip = new Text( "" );
+    Text *ip = new Text( "" );
     int port = 0;
     ret = ret & es->zDB()->getChatServer( adminId, ip, &port );
     if( ip->getLength() )
@@ -1407,15 +1407,15 @@ bool ESGWeiterleitung::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;
         es->addEmpfangen( klient->getDownloadBytes( 1 ) );
         es->addGesendet( klient->getUploadBytes( 1 ) );
         klient->trenne();
-        klient = klient->release();
+        klient = (Klient *)klient->release();
     }
     ip->release();
     return ret;
@@ -1426,7 +1426,7 @@ bool ESGWeiterleitung::kickSpielerAusGruppe( int gruppeId )
     if( !gruppeId )
         return 0;
     bool ret = 1;
-    Array< int > * accId = new Array< int >();
+    Array< int > *accId = new Array< int >();
     int anzahl = es->zDB()->getSpielerAusGruppe( gruppeId, accId );
     for( int i = 0; i < anzahl; i++ )
     {
@@ -1446,36 +1446,19 @@ bool ESGWeiterleitung::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;
             es->addEmpfangen( klient->getDownloadBytes( 1 ) );
             es->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         es->zDB()->kickSpielerAusGruppe( gruppeId, account );
         ip->release();
     }
     accId->release();
     return ret;
-}
-
-// constant
-
-// Reference Counting
-ESGWeiterleitung *ESGWeiterleitung::getThis()
-{
-    ref++;
-    return this;
-}
-
-ESGWeiterleitung *ESGWeiterleitung::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 95 - 101
ErhaltungServer/ErhaltungServer.h

@@ -18,62 +18,62 @@ using namespace Network;
 class ErhaltungServer : public Thread
 {
 private:
-	Server *server;
-	SSLServer *aServer;
-	InitDatei *ini;
-	ESDatenbank *db;
-	Text *fehler;
-	int clients;
-	int id;
-	bool nichtPausiert;
-	int empfangen;
-	int gesendet;
-	bool end;
+    Server *server;
+    SSLServer *aServer;
+    InitDatei *ini;
+    ESDatenbank *db;
+    Text *fehler;
+    int clients;
+    int id;
+    bool nichtPausiert;
+    int empfangen;
+    int gesendet;
+    bool end;
 
 public:
-	// Konstruktor
-	ErhaltungServer( InitDatei *zIni );
-	// Destruktor
-	virtual ~ErhaltungServer();
-	// nicht constant
-	void runn();
-	void thread();
-	void close();
-	bool serverStarten();
-	bool serverPause();
-	bool serverFortsetzen();
-	bool serverBeenden();
-	bool setMaxKlients( unsigned char mc );
-	void addGesendet( int bytes );
-	void addEmpfangen( int bytes );
-	void clientTrennung();
-	// constant
-	bool istAn() const;
-	Server *zServer() const;
-	ESDatenbank *zDB() const;
-	bool hatClients() const;
-	int getId() const;
-	char *getLetzterFehler() const;
+    // Konstruktor
+    ErhaltungServer( InitDatei *zIni );
+    // Destruktor
+    virtual ~ErhaltungServer();
+    // nicht constant
+    void runn();
+    void thread();
+    void close();
+    bool serverStarten();
+    bool serverPause();
+    bool serverFortsetzen();
+    bool serverBeenden();
+    bool setMaxKlients( unsigned char mc );
+    void addGesendet( int bytes );
+    void addEmpfangen( int bytes );
+    void clientTrennung();
+    // constant
+    bool istAn() const;
+    Server *zServer() const;
+    ESDatenbank *zDB() const;
+    bool hatClients() const;
+    int getId() const;
+    char *getLetzterFehler() const;
 };
 
 class ESAKlient : public Thread
 {
 private:
-	SSLSKlient *klient;
-	Text *name;
-	Text *passwort;
-	int adminId;
-	ErhaltungServer *es;
-	int version;
+    SSLSKlient *klient;
+    Text *name;
+    Text *passwort;
+    int adminId;
+    ErhaltungServer *es;
+    int version;
 
 public:
-	// Konstruktor 
-	ESAKlient( SSLSKlient *klient, ErhaltungServer *es );
-	// Destruktor 
-	virtual ~ESAKlient();
-	// nicht constant
-	void thread();
-	void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum AKlient
+    // Konstruktor 
+    ESAKlient( SSLSKlient *klient, ErhaltungServer *es );
+    // Destruktor 
+    virtual ~ESAKlient();
+    // nicht constant
+    void thread();
+    void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum AKlient
 };
 
 class ESKlient;
@@ -81,79 +81,73 @@ class ESKlient;
 class ESKThread : public Thread
 {
 private:
-	ESKlient *zKlient;
+    ESKlient *zKlient;
 
 public:
-	// Konstruktor
-	ESKThread( ESKlient *zKlient );
-	// Destruktor
-	virtual ~ESKThread();
-	// nicht constant
-	virtual void thread();
-	// constant
+    // Konstruktor
+    ESKThread( ESKlient *zKlient );
+    // Destruktor
+    virtual ~ESKThread();
+    // nicht constant
+    virtual void thread();
+    // constant
 };
 
 class ESKlient : public Thread
 {
 private:
-	ESKThread *th;
-	SKlient *klient;
-	ZeitMesser *zeit;
-	double sekunden;
-	double letzteErhaltung;
-	bool abgemeldet;
-	unsigned int klientNummer;
-	ErhaltungServer *es;
-	bool encrypted;
+    ESKThread *th;
+    SKlient *klient;
+    ZeitMesser *zeit;
+    double sekunden;
+    double letzteErhaltung;
+    bool abgemeldet;
+    unsigned int klientNummer;
+    ErhaltungServer *es;
+    bool encrypted;
 
 public:
-	// Konstruktor
-	ESKlient( SKlient *klient, ErhaltungServer *es );
-	// Destruktor
-	virtual ~ESKlient();
-	// nicht constant
-	bool erhalten();
-	virtual void thread();
-	// constant
-	void errorZuKlient( const char *nachricht ) const;
+    // Konstruktor
+    ESKlient( SKlient *klient, ErhaltungServer *es );
+    // Destruktor
+    virtual ~ESKlient();
+    // nicht constant
+    bool erhalten();
+    virtual void thread();
+    // constant
+    void errorZuKlient( const char *nachricht ) const;
 };
 
-class ESGWeiterleitung
+class ESGWeiterleitung : public virtual ReferenceCounter
 {
 private:
-	ErhaltungServer *es;
-	int ref;
+    ErhaltungServer *es;
 
 public:
-	// Konstruktor
-	ESGWeiterleitung( ErhaltungServer *es );
-	// Destruktor
-	~ESGWeiterleitung();
-	// 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 historieServerKlientAbsturz( int klientId );
+    // Konstruktor
+    ESGWeiterleitung( ErhaltungServer *es );
+    // Destruktor
+    ~ESGWeiterleitung();
+    // 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 historieServerKlientAbsturz( int klientId );
     bool newsServerKlientAbsturz( 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
-	ESGWeiterleitung *getThis();
-	ESGWeiterleitung *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
ErhaltungServer/ErhaltungServer.vcxproj

@@ -37,7 +37,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>
@@ -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>
@@ -61,16 +61,18 @@
   </ItemGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <Link>
-      <LibraryDependencies>Framework;Network;SQL;pq;pthread</LibraryDependencies>
+      <LibraryDependencies>Framework;Network;SQL;pq;pthread;ssl</LibraryDependencies>
       <AdditionalLibraryDirectories>$(RemoteRootDir)/sql/release;$(RemoteRootDir)/Network/release;$(RemoteRootDir)/Framework/release;/usr/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalOptions>-Wl,-rpath,../lib %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(RemoteProjectDir)/$(TargetName)$(TargetExt)</OutputFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <Link>
-      <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>
       <AdditionalOptions>-Wl,-rpath,../lib %(AdditionalOptions)</AdditionalOptions>
+      <OutputFile>$(RemoteProjectDir)/$(TargetName)$(TargetExt)</OutputFile>
     </Link>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 32 - 32
ErhaltungServer/Start.cpp

@@ -7,30 +7,30 @@
 
 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/erhaltung/" );
-	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/erhaltung/" );
+    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 << "ES: Startet...\n";
-	std::cout << "ES: Lese init Datei ../data/esInit.ini ...\n";
-	InitDatei *dat = new InitDatei( "../data/esInit.ini" );
-	if( !dat->laden() )
-	{
-		std::cout << "ES: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
-		dat->release();
-		exit( 1 );
-	}
+    std::cout << "ES: Startet...\n";
+    std::cout << "ES: Lese init Datei ../data/esInit.ini ...\n";
+    InitDatei *dat = new InitDatei( "../data/esInit.ini" );
+    if( !dat->laden() )
+    {
+        std::cout << "ES: 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 )
     {
@@ -42,17 +42,17 @@ int main()
         }
     }
 
-	ErhaltungServer *eServer = new ErhaltungServer( dat );
+    ErhaltungServer *eServer = new ErhaltungServer( dat );
 
-	std::cout << "ES: Der Admin Server läuft. Startforgang beendet.\n";
-	eServer->runn();
+    std::cout << "ES: Der Admin Server läuft. Startforgang beendet.\n";
+    eServer->runn();
 
-	eServer->ende();
-	eServer->release();
-	dat->release();
-	std::cout << "ES: Der Server ist heruntergefahren.\n";
-	file.close();
-	std::cout.rdbuf( sbuf );
+    eServer->ende();
+    eServer->release();
+    dat->release();
+    std::cout << "ES: Der Server ist heruntergefahren.\n";
+    file.close();
+    std::cout.rdbuf( sbuf );
     Framework::releaseFramework();
-	return 0;
+    return 0;
 }