Ver código fonte

update framework version

Kolja Strohm 3 anos atrás
pai
commit
03c21a20e7

BIN
AnmeldungServer/AnmeldungServer


+ 102 - 117
AnmeldungServer/AnmeldungServer.cpp

@@ -16,7 +16,7 @@ AnmeldungServer::AnmeldungServer( InitDatei *zIni )
     empfangen = 0;
     gesendet = 0;
     fehler = new Text();
-    ini = zIni->getThis();
+    ini = dynamic_cast<InitDatei *>( zIni->getThis() );
     id = *zIni->zWert( "ServerId" );
     server = new Server();
     aServer = new SSLServer();
@@ -65,13 +65,13 @@ void AnmeldungServer::runn()
         if( end && klient )
         {
             klient->trenne();
-            klient = klient->release();
+            klient = (SSLSKlient *)klient->release();
             Sleep( 1000 );
             return;
         }
         if( !klient )
             continue;
-        ASAKlient * clHandle = new ASAKlient( klient, (AnmeldungServer *)getThis() );
+        ASAKlient *clHandle = new ASAKlient( klient, dynamic_cast<AnmeldungServer *>( getThis() ) );
         clHandle->start();
     }
 }
@@ -85,7 +85,7 @@ void AnmeldungServer::thread()
         if( !klient )
             continue;
         Framework::getThreadRegister()->cleanUpClosedThreads();
-        ASKlient * clHandle = new ASKlient( klient, (AnmeldungServer *)getThis() );
+        ASKlient *clHandle = new ASKlient( klient, dynamic_cast<AnmeldungServer *>( getThis() ) );
         EnterCriticalSection( &cs );
         klients->set( clHandle, klientAnzahl );
         klientAnzahl++;
@@ -104,13 +104,13 @@ void AnmeldungServer::close()
     EnterCriticalSection( &cs );
     for( int i = 0; i < klientAnzahl; i++ )
         klients->z( i )->absturz();
-    klients = klients->release();
+    klients = ( RCArray<ASKlient>* )klients->release();
     klientAnzahl = 0;
     LeaveCriticalSection( &cs );
     ende();
     run = 0;
     end = 1;
-    Klient * klient = new Klient();
+    Klient *klient = new Klient();
     klient->verbinde( aServer->getPort(), "127.0.0.1" );
     Sleep( 500 );
     aServer->trenne();
@@ -222,7 +222,7 @@ bool AnmeldungServer::absturzKlient( int klientId )
     return gefunden;
 }
 
-bool AnmeldungServer::removeKlient( ASKlient * zKlient )
+bool AnmeldungServer::removeKlient( ASKlient *zKlient )
 {
     bool gefunden = 0;
     EnterCriticalSection( &cs );
@@ -289,7 +289,7 @@ char *AnmeldungServer::getIp() const
 
 // Inhalt der ASAKlient Klasse aus AnmeldungServer.h
 // Konstruktor 
-ASAKlient::ASAKlient( SSLSKlient * klient, AnmeldungServer * as )
+ASAKlient::ASAKlient( SSLSKlient *klient, AnmeldungServer *as )
     : Thread()
 {
     this->klient = klient;
@@ -328,13 +328,13 @@ void ASAKlient::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 )
@@ -430,7 +430,7 @@ void ASAKlient::thread()
                     }
                     else
                         ok = 1;
-                    if( ok &&as->hatClients() )
+                    if( ok && as->hatClients() )
                     {
                         errorZuKlient( "Es sind noch Klients Online. Bitte versuche es später erneut." );
                         break;
@@ -526,7 +526,7 @@ void ASAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int maxC = 0;
-                    klient->getNachricht( (char *)& maxC, 4 );
+                    klient->getNachricht( (char *)&maxC, 4 );
                     if( as->zDB()->adminHatRecht( adminId, Admin_Recht::ASMCChange ) )
                     {
                         if( as->setMaxKlients( maxC ) )
@@ -548,8 +548,8 @@ void ASAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int klientId = 0;
-                    klient->getNachricht( (char *)& klientId, 4 );
-                    if( klientId &&as->absturzKlient( klientId ) )
+                    klient->getNachricht( (char *)&klientId, 4 );
+                    if( klientId && as->absturzKlient( klientId ) )
                         klient->sende( "\1", 1 );
                     else
                         klient->sende( "\0", 1 );
@@ -581,7 +581,7 @@ void ASAKlient::errorZuKlient( const char *nachricht ) const // sendet eine Fehl
 
 // Inhalt der ASKlient aus AnmeldungServer.h
 // Konstruktor
-ASKlient::ASKlient( SKlient * klient, AnmeldungServer * as )
+ASKlient::ASKlient( SKlient *klient, AnmeldungServer *as )
     : Thread()
 {
     this->klient = klient;
@@ -621,7 +621,7 @@ void ASKlient::thread()
             switch( c )
             {
             case 1: // Klient identifikation
-                klient->getNachrichtEncrypted( (char *)& klientNummer, 4 );
+                klient->getNachrichtEncrypted( (char *)&klientNummer, 4 );
                 if( !as->zDB()->proveKlient( klientNummer, as->getId() ) )
                 {
                     klientNummer = 0;
@@ -661,8 +661,8 @@ void ASKlient::thread()
                         if( 1 )
                         {
                             int klientId = 0;
-                            klient->getNachrichtEncrypted( (char *)& klientId, 4 );
-                            if( klientId &&as->absturzKlient( klientId ) )
+                            klient->getNachrichtEncrypted( (char *)&klientId, 4 );
+                            if( klientId && as->absturzKlient( klientId ) )
                                 klient->sendeEncrypted( "\1", 1 );
                             else
                                 klient->sendeEncrypted( "\0", 1 );
@@ -697,7 +697,7 @@ void ASKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     int karteId = 0;
-                    klient->getNachrichtEncrypted( (char *)& karteId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&karteId, 4 );
                     int gruppeId = 0;
                     int ret = as->zDB()->gruppeErstellen( accountId, karteId, &gruppeId );
                     switch( ret )
@@ -725,7 +725,7 @@ void ASKlient::thread()
                         break;
                     case 7:
                         klient->sendeEncrypted( "\1", 1 );
-                        klient->sendeEncrypted( (char *)& gruppeId, 4 );
+                        klient->sendeEncrypted( (char *)&gruppeId, 4 );
                         break;
                     }
                 }
@@ -740,7 +740,7 @@ void ASKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
                     if( as->zDB()->gruppeIstInWarteschlange( gruppeId ) )
                     {
                         errorZuKlient( "Die Gruppe befindet sich bereits in der Warteschlange." );
@@ -782,16 +782,16 @@ void ASKlient::thread()
                         if( 1 )
                         {
                             klient->sendeEncrypted( "\1", 1 );
-                            klient->sendeEncrypted( (char *)& anzahl, 4 );
+                            klient->sendeEncrypted( (char *)&anzahl, 4 );
                             for( int i = 0; i < anzahl; i++ )
                             {
                                 int id = accIds->get( i );
                                 if( id == accountId )
                                     continue;
-                                klient->sendeEncrypted( (char *)& id, 4 );
+                                klient->sendeEncrypted( (char *)&id, 4 );
                             }
                             as->zDB()->gruppeEinladungAbbrechen( as->zDB()->getGruppeAdminId( gruppeId ), gruppeId, accountId );
-                            MsgWeiterleitung * weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                            MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                             weiter->spielerBetrittGruppe( gruppeId );
                             weiter->release();
                         }
@@ -810,7 +810,7 @@ void ASKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
                     if( as->zDB()->gruppeIstInWarteschlange( gruppeId ) )
                     {
                         errorZuKlient( "Die Gruppe befindet sich bereits in der Warteschlange." );
@@ -822,7 +822,7 @@ void ASKlient::thread()
                     if( ret == 1 )
                     {
                         klient->sendeEncrypted( "\1", 1 );
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         weiter->spielerLeavesGruppe( gruppeId );
                         weiter->release();
                     }
@@ -832,7 +832,7 @@ void ASKlient::thread()
                     {
                         klient->sendeEncrypted( "\1", 1 );
                         int adminId = as->zDB()->getGruppeAdminId( gruppeId );
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         weiter->setGruppeAdmin( gruppeId, adminId );
                         weiter->spielerLeavesGruppe( gruppeId );
                         weiter->release();
@@ -842,7 +842,7 @@ void ASKlient::thread()
                         klient->sendeEncrypted( "\1", 1 );
                         Array< int > *spieler = new Array< int >();
                         int anzahl = 0;
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         if( as->zDB()->getSpielerInGruppe( gruppeId, spieler, &anzahl ) )
                         {
                             for( int i = 0; i < anzahl; i++ )
@@ -869,7 +869,7 @@ void ASKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
                     if( !as->zDB()->spielerBesitztKarte( accountId, as->zDB()->getGruppenKarte( gruppeId ) ) )
                     {
                         errorZuKlient( "Du besitzt entweder die Karte oder das Spiel nicht." );
@@ -883,7 +883,7 @@ void ASKlient::thread()
                     if( as->zDB()->gruppeAnmelden( accountId, gruppeId ) )
                     {
                         klient->sendeEncrypted( "\1", 1 );
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         weiter->gruppeAngemeldet( gruppeId );
                         weiter->release();
                     }
@@ -901,11 +901,11 @@ void ASKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
                     if( as->zDB()->gruppeAbmelden( accountId, gruppeId ) )
                     {
                         klient->sendeEncrypted( "\1", 1 );
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         weiter->gruppeAbgemeldet( gruppeId );
                         weiter->release();
                     }
@@ -924,8 +924,8 @@ void ASKlient::thread()
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
                     int zuAccountId = 0;
-                    klient->getNachrichtEncrypted( (char *)& zuAccountId, 4 );
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&zuAccountId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
                     if( as->zDB()->gruppeIstInWarteschlange( gruppeId ) )
                     {
                         errorZuKlient( "Die Gruppe befindet sich bereits in der Warteschlange." );
@@ -933,7 +933,7 @@ void ASKlient::thread()
                     }
                     if( as->zDB()->gruppeSpielerEinladen( accountId, zuAccountId, gruppeId ) )
                     {
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         if( weiter->spielEinladung( gruppeId, zuAccountId ) )
                             klient->sendeEncrypted( "\1", 1 );
                         else
@@ -960,8 +960,8 @@ void ASKlient::thread()
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
                     int zuAccountId = 0;
-                    klient->getNachrichtEncrypted( (char *)& zuAccountId, 4 );
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&zuAccountId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
                     if( as->zDB()->gruppeIstInWarteschlange( gruppeId ) )
                     {
                         errorZuKlient( "Die Gruppe befindet sich bereits in der Warteschlange." );
@@ -971,7 +971,7 @@ void ASKlient::thread()
                     {
                         klient->sendeEncrypted( "\1", 1 );
                         as->zDB()->gruppeVerlassen( zuAccountId, gruppeId );
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( zuAccountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( zuAccountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         weiter->kickSpielerAusGruppe( zuAccountId, gruppeId );
                         weiter->spielerLeavesGruppe( gruppeId );
                         weiter->release();
@@ -991,8 +991,8 @@ void ASKlient::thread()
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
                     unsigned char key = 0;
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
-                    klient->getNachrichtEncrypted( (char *)& key, 1 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&key, 1 );
                     char *nachricht = new char[ key + 1 ];
                     nachricht[ (int)key ] = 0;
                     if( key )
@@ -1008,7 +1008,7 @@ void ASKlient::thread()
                     message->append( ": " );
                     message->append( nachricht );
                     delete[] nachricht;
-                    MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                    MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                     weiter->gruppenNachricht( gruppeId, message->getText() );
                     weiter->release();
                     message->release();
@@ -1024,7 +1024,7 @@ void ASKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     int karteId = 0;
-                    klient->getNachrichtEncrypted( (char *)& karteId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&karteId, 4 );
                     if( !as->zDB()->spielerBesitztKarte( accountId, karteId ) )
                     {
                         errorZuKlient( "Du besitzt entweder die Karte oder das Spiel nicht." );
@@ -1080,9 +1080,9 @@ void ASKlient::thread()
                     klient->sendeEncrypted( "\1", 1 );
                     char spielStarten = 0;
                     int gruppeId = 0;
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
                     klient->getNachrichtEncrypted( &spielStarten, 1 );
-                    if( spielStarten &&as->zDB()->getSpielerInGruppeAnzahl( gruppeId ) < 2 )
+                    if( spielStarten && as->zDB()->getSpielerInGruppeAnzahl( gruppeId ) < 2 )
                     {
                         errorZuKlient( "Es müssen sich mindestens 2 Spieler in der Gruppe befinden." );
                         break;
@@ -1090,7 +1090,7 @@ void ASKlient::thread()
                     if( as->zDB()->setGruppeSpielStarten( accountId, gruppeId, spielStarten == 1 ) )
                     {
                         klient->sendeEncrypted( "\1", 1 );
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         weiter->gruppeSpielStarten( gruppeId, spielStarten == 1 );
                         weiter->release();
                     }
@@ -1109,12 +1109,12 @@ void ASKlient::thread()
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
                     int accountId = 0;
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
-                    klient->getNachrichtEncrypted( (char *)& accountId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&accountId, 4 );
                     if( as->zDB()->gruppeEinladungAbbrechen( this->accountId, gruppeId, accountId ) )
                     {
                         klient->sendeEncrypted( "\1", 1 );
-                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                        MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                         weiter->spielEinladungAbbrechen( gruppeId, accountId );
                         weiter->release();
                     }
@@ -1132,10 +1132,10 @@ void ASKlient::thread()
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     int gruppeId = 0;
-                    klient->getNachrichtEncrypted( (char *)& gruppeId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&gruppeId, 4 );
                     klient->sendeEncrypted( "\1", 1 );
                     as->zDB()->gruppeEinladungAbbrechen( as->zDB()->getGruppeAdminId( gruppeId ), gruppeId, accountId );
-                    MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, (AnmeldungServer *)as->getThis() );
+                    MsgWeiterleitung *weiter = new MsgWeiterleitung( accountId, dynamic_cast<AnmeldungServer *>( as->getThis() ) );
                     weiter->spielEinladungAblehnen( gruppeId );
                     weiter->release();
                 }
@@ -1182,12 +1182,12 @@ int ASKlient::getKlientNummer() const // gibt die KlientId zur
 
 // Inhalt der MsgWeiterleitung Klasse aus AnmeldungServer.h
 // Konstruktor
-MsgWeiterleitung::MsgWeiterleitung( int accountId, AnmeldungServer * as )
+MsgWeiterleitung::MsgWeiterleitung( int accountId, AnmeldungServer *as )
+    : ReferenceCounter()
 {
     fehler = new Text( "" );
     this->accountId = accountId;
     this->as = as;
-    ref = 1;
 }
 
 // Destruktor
@@ -1209,7 +1209,7 @@ bool MsgWeiterleitung::spielerBetrittGruppe( int gruppeId )
         int account = accId->get( i );
         if( account == accountId )
             continue;
-        Text * ip = new Text( "" );
+        Text *ip = new Text( "" );
         int port = 0;
         ret = ret & as->zDB()->getChatServer( account, ip, &port );
         if( ip->istGleich( as->getIp() ) )
@@ -1226,16 +1226,16 @@ bool MsgWeiterleitung::spielerBetrittGruppe( int gruppeId )
             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;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1256,7 +1256,7 @@ bool MsgWeiterleitung::spielerLeavesGruppe( int gruppeId )
         int account = accId->get( i );
         if( account == accountId )
             continue;
-        Text * ip = new Text( "" );
+        Text *ip = new Text( "" );
         int port = 0;
         ret = ret & as->zDB()->getChatServer( account, ip, &port );
         if( ip->istGleich( as->getIp() ) )
@@ -1273,16 +1273,16 @@ bool MsgWeiterleitung::spielerLeavesGruppe( int gruppeId )
             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;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1303,7 +1303,7 @@ bool MsgWeiterleitung::setGruppeAdmin( int gruppeId, int admin )
         int account = accId->get( i );
         if( account == accountId )
             continue;
-        Text * ip = new Text( "" );
+        Text *ip = new Text( "" );
         int port = 0;
         ret = ret & as->zDB()->getChatServer( account, ip, &port );
         if( ip->istGleich( as->getIp() ) )
@@ -1320,16 +1320,16 @@ bool MsgWeiterleitung::setGruppeAdmin( int gruppeId, int admin )
             ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             if( res )
             {
-                ret = ret & klient->sendeEncrypted( (char *)& account, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& admin, 4 );
-                ret = ret & klient->sendeEncrypted( (char *)& gruppeId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&admin, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1359,15 +1359,15 @@ bool MsgWeiterleitung::kickSpielerAusGruppe( int accountId, int gruppeId )
         ret = ret & klient->getNachrichtEncrypted( &res, 1 );
         if( res )
         {
-            ret = ret & klient->sendeEncrypted( (char *)& accountId, 4 );
-            ret = ret & klient->sendeEncrypted( (char *)& gruppeId, 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;
         as->addEmpfangen( klient->getDownloadBytes( 1 ) );
         as->addGesendet( klient->getUploadBytes( 1 ) );
         klient->trenne();
-        klient = klient->release();
+        klient = (Klient *)klient->release();
     }
     ip->release();
     if( !ret )
@@ -1381,7 +1381,7 @@ bool MsgWeiterleitung::gruppenNachricht( int gruppeId, char *txt )
     char len = (char)textLength( txt );
     if( !len )
         return 0;
-    Array< int > * accId = new Array< int >();
+    Array< int > *accId = new Array< int >();
     int anzahl = 0;
     as->zDB()->getSpielerInGruppe( gruppeId, accId, &anzahl );
     for( int i = 0; i < anzahl; i++ )
@@ -1404,9 +1404,9 @@ bool MsgWeiterleitung::gruppenNachricht( int gruppeId, char *txt )
             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 *)& len, 1 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&len, 1 );
                 if( len )
                     ret = ret & klient->sendeEncrypted( txt, len );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
@@ -1415,7 +1415,7 @@ bool MsgWeiterleitung::gruppenNachricht( int gruppeId, char *txt )
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1451,15 +1451,15 @@ bool MsgWeiterleitung::gruppeAngemeldet( 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;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1495,15 +1495,15 @@ bool MsgWeiterleitung::gruppeAbgemeldet( 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;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1539,16 +1539,16 @@ bool MsgWeiterleitung::gruppeSpielStarten( int gruppeId, bool starten )
             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 *)& starten, 1 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&starten, 1 );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1579,16 +1579,16 @@ bool MsgWeiterleitung::spielEinladung( int gruppeId, int accountId )
         ret = ret & klient->getNachrichtEncrypted( &res, 1 );
         if( res )
         {
-            ret = ret & klient->sendeEncrypted( (char *)& accountId, 4 );
-            ret = ret & klient->sendeEncrypted( (char *)& this->accountId, 4 );
-            ret = ret & klient->sendeEncrypted( (char *)& gruppeId, 4 );
+            ret = ret & klient->sendeEncrypted( (char *)&accountId, 4 );
+            ret = ret & klient->sendeEncrypted( (char *)&this->accountId, 4 );
+            ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
             ret = ret & klient->getNachrichtEncrypted( &res, 1 );
         }
         ret = (char)ret & res;
         as->addEmpfangen( klient->getDownloadBytes( 1 ) );
         as->addGesendet( klient->getUploadBytes( 1 ) );
         klient->trenne();
-        klient = klient->release();
+        klient = (Klient *)klient->release();
     }
     ip->release();
     // Einladung zu den Gruppenmitgliedern senden
@@ -1615,16 +1615,16 @@ bool MsgWeiterleitung::spielEinladung( 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 *)& accountId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&accountId, 4 );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1660,16 +1660,16 @@ bool MsgWeiterleitung::spielEinladungAbbrechen( 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 *)& accountId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&account, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&gruppeId, 4 );
+                ret = ret & klient->sendeEncrypted( (char *)&accountId, 4 );
                 ret = ret & klient->getNachrichtEncrypted( &res, 1 );
             }
             ret = (char)ret & res;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1705,16 +1705,16 @@ bool MsgWeiterleitung::spielEinladungAblehnen( int gruppeId )
             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;
             as->addEmpfangen( klient->getDownloadBytes( 1 ) );
             as->addGesendet( klient->getUploadBytes( 1 ) );
             klient->trenne();
-            klient = klient->release();
+            klient = (Klient *)klient->release();
         }
         ip->release();
     }
@@ -1732,25 +1732,10 @@ int MsgWeiterleitung::getAccountId() const
 
 Text *MsgWeiterleitung::getLetzterFehler() const
 {
-    return fehler->getThis();
+    return dynamic_cast<Text *>( fehler->getThis() );
 }
 
 Text *MsgWeiterleitung::zLetzterFehler() const
 {
     return fehler;
-}
-
-// Reference Counting
-MsgWeiterleitung *MsgWeiterleitung::getThis()
-{
-    ref++;
-    return this;
-}
-
-MsgWeiterleitung *MsgWeiterleitung::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 89 - 93
AnmeldungServer/AnmeldungServer.h

@@ -16,121 +16,117 @@ class ASKlient;
 class AnmeldungServer : public Thread
 {
 private:
-	Server *server;
-	SSLServer *aServer;
-	InitDatei *ini;
-	ASDatenbank *db;
-	CRITICAL_SECTION cs;
-	RCArray< ASKlient > *klients;
-	Text *fehler;
-	int klientAnzahl;
-	int id;
-	bool nichtPausiert;
-	int empfangen;
-	int gesendet;
-	bool end;
+    Server *server;
+    SSLServer *aServer;
+    InitDatei *ini;
+    ASDatenbank *db;
+    CRITICAL_SECTION cs;
+    RCArray< ASKlient > *klients;
+    Text *fehler;
+    int klientAnzahl;
+    int id;
+    bool nichtPausiert;
+    int empfangen;
+    int gesendet;
+    bool end;
 
 public:
-	// Konstruktor 
-	AnmeldungServer( InitDatei *zIni );
-	// Destruktor 
-	virtual ~AnmeldungServer();
-	// nicht constant 
-	void runn();
-	void thread();
-	void close();
-	bool serverStarten();
-	bool serverPause();
-	bool serverFortsetzen();
-	bool serverBeenden();
-	bool setMaxKlients( int mc );
-	bool absturzKlient( int klientId );
-	bool removeKlient( ASKlient *zKlient );
-	void addGesendet( int bytes );
-	void addEmpfangen( int bytes );
-	// conatant 
-	bool istAn() const;
-	Server *zServer() const;
-	ASDatenbank *zDB() const;
-	bool hatClients() const;
-	int getId() const;
-	char *getLetzterFehler() const;
-	char *getIp() const;
+    // Konstruktor 
+    AnmeldungServer( InitDatei *zIni );
+    // Destruktor 
+    virtual ~AnmeldungServer();
+    // nicht constant 
+    void runn();
+    void thread();
+    void close();
+    bool serverStarten();
+    bool serverPause();
+    bool serverFortsetzen();
+    bool serverBeenden();
+    bool setMaxKlients( int mc );
+    bool absturzKlient( int klientId );
+    bool removeKlient( ASKlient *zKlient );
+    void addGesendet( int bytes );
+    void addEmpfangen( int bytes );
+    // conatant 
+    bool istAn() const;
+    Server *zServer() const;
+    ASDatenbank *zDB() const;
+    bool hatClients() const;
+    int getId() const;
+    char *getLetzterFehler() const;
+    char *getIp() const;
 };
 
 class ASAKlient : public Thread
 {
 private:
-	SSLSKlient *klient;
-	Text *name;
-	Text *passwort;
-	int adminId;
-	AnmeldungServer *as;
-	int version;
+    SSLSKlient *klient;
+    Text *name;
+    Text *passwort;
+    int adminId;
+    AnmeldungServer *as;
+    int version;
 
 public:
-	// Konstruktor 
-	ASAKlient( SSLSKlient *klient, AnmeldungServer *as );
-	// Destruktor 
-	virtual ~ASAKlient();
-	// nicht constant
-	void thread();
-	void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum AKlient
+    // Konstruktor 
+    ASAKlient( SSLSKlient *klient, AnmeldungServer *as );
+    // Destruktor 
+    virtual ~ASAKlient();
+    // nicht constant
+    void thread();
+    void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum AKlient
 };
 
 class ASKlient : public Thread
 {
 private:
-	SKlient     *klient;
-	unsigned int klientNummer;
-	AnmeldungServer *as;
-	int accountId;
+    SKlient *klient;
+    unsigned int klientNummer;
+    AnmeldungServer *as;
+    int accountId;
 
 public:
-	// Konstruktor 
-	ASKlient( SKlient *klient, AnmeldungServer *as );
-	// Destruktor 
-	virtual ~ASKlient();
-	// nicht constant
-	void absturz();
-	virtual void thread();
-	// constant
-	void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum Klient
-	int getKlientNummer() const;
+    // Konstruktor 
+    ASKlient( SKlient *klient, AnmeldungServer *as );
+    // Destruktor 
+    virtual ~ASKlient();
+    // nicht constant
+    void absturz();
+    virtual void thread();
+    // constant
+    void errorZuKlient( const char *nachricht ) const; // sendet eine Fehlernachricht zum Klient
+    int getKlientNummer() const;
 };
 
-class MsgWeiterleitung
+class MsgWeiterleitung : public virtual ReferenceCounter
 {
 private:
-	AnmeldungServer *as;
-	int accountId;
-	int ref;
-	Text *fehler;
+    AnmeldungServer *as;
+    int accountId;
+    Text *fehler;
 
 public:
-	// Konstruktor
-	MsgWeiterleitung( int accountId, AnmeldungServer *as );
-	// Destruktor
-	virtual ~MsgWeiterleitung();
-	// nicht constant
-	bool spielerBetrittGruppe( int gruppeId );
-	bool spielerLeavesGruppe( int gruppeId );
-	bool setGruppeAdmin( int gruppeId, int admin );
-	bool kickSpielerAusGruppe( int accountId, int gruppeId );
-	bool gruppenNachricht( int gruppeId, char *txt );
-	bool gruppeAngemeldet( int gruppeId );
-	bool gruppeAbgemeldet( int gruppeId );
-	bool gruppeSpielStarten( int gruppeId, bool starten );
-	bool spielEinladung( int gruppeId, int accountId );
-	bool spielEinladungAbbrechen( int gruppeId, int accountId );
-	bool spielEinladungAblehnen( int gruppeId );
-	// constant
-	int getAccountId() const;
-	Text *getLetzterFehler() const;
-	Text *zLetzterFehler() const;
-	// Reference Counting
-	MsgWeiterleitung *getThis();
-	MsgWeiterleitung *release();
+    // Konstruktor
+    MsgWeiterleitung( int accountId, AnmeldungServer *as );
+    // Destruktor
+    virtual ~MsgWeiterleitung();
+    // nicht constant
+    bool spielerBetrittGruppe( int gruppeId );
+    bool spielerLeavesGruppe( int gruppeId );
+    bool setGruppeAdmin( int gruppeId, int admin );
+    bool kickSpielerAusGruppe( int accountId, int gruppeId );
+    bool gruppenNachricht( int gruppeId, char *txt );
+    bool gruppeAngemeldet( int gruppeId );
+    bool gruppeAbgemeldet( int gruppeId );
+    bool gruppeSpielStarten( int gruppeId, bool starten );
+    bool spielEinladung( int gruppeId, int accountId );
+    bool spielEinladungAbbrechen( int gruppeId, int accountId );
+    bool spielEinladungAblehnen( int gruppeId );
+    // constant
+    int getAccountId() const;
+    Text *getLetzterFehler() const;
+    Text *zLetzterFehler() const;
 };
 
 #endif

+ 6 - 4
AnmeldungServer/AnmeldungServer.vcxproj

@@ -36,7 +36,7 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <RemoteProjectDir>$(RemoteRootDir)/Server/$(ProjectName)/release</RemoteProjectDir>
-    <IncludePath>..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\sql\sql;../../../Framework/release;../../../Network/release;../../../sql/release;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\sql\sql;../../../Framework/release;../../../Network/release/Network;../../../sql/release/sql;$(IncludePath)</IncludePath>
     <TargetExt />
     <OutDir>$(RemoteRootDir)/Server/$(ProjectName)/release/</OutDir>
     <IntDir>$(RemoteRootDir)/Server/$(ProjectName)/release/</IntDir>
@@ -44,7 +44,7 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <RemoteProjectDir>$(RemoteRootDir)/Server/$(ProjectName)/debug</RemoteProjectDir>
-    <IncludePath>..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\sql\sql;../../../Framework/debug;../../../Network/debug;../../../sql/debug;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\sql\sql;../../../Framework/debug;../../../Network/debug/Network;../../../sql/debug/sql;$(IncludePath)</IncludePath>
     <TargetExt />
     <OutDir>$(RemoteRootDir)/Server/$(ProjectName)/debug/</OutDir>
     <IntDir>$(RemoteRootDir)/Server/$(ProjectName)/debug/</IntDir>
@@ -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>
     <ClCompile>
       <PreprocessorDefinitions>DEBUG</PreprocessorDefinitions>

+ 6 - 21
AnmeldungServer/Datenbank.cpp

@@ -4,17 +4,17 @@
 // Inhalt der ASDatenbank Klasse aus Datenbank.h
 // Konstruktor
 ASDatenbank::ASDatenbank( 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 ) );
+                               zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
+                               (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) );
     if( !datenbank->istOk() )
     {
         std::cout << "AS: Die Verbindung zur Datenbank konnte nicht hergestellt werden.\nDas Programm wird beendet.";
         exit( 1 );
     }
     InitializeCriticalSection( &cs );
-    ref = 1;
     Text befehl = "SELECT port, admin_port, ip  FROM server WHERE id = ";
     befehl += zIni->zWert( "ServerId" )->getText();
     lock();
@@ -53,11 +53,11 @@ int ASDatenbank::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( (char *)n );
     befehl->append( "' AND passwort = md5( '" );
     Text p( passwort );
     p.ersetzen( "'", "''" );
-    befehl->append( (char*)p );
+    befehl->append( (char *)p );
     befehl->append( "' )" );
     lock();
     datenbank->befehl( befehl->getText() );
@@ -205,7 +205,7 @@ bool ASDatenbank::serverIstNichtPausiert( int id )
 bool ASDatenbank::getChatServer( int accountId, Text *ip, int *port )
 {
     Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b, account_client c "
-        "WHERE a.server_typ_name = 'chat' AND c.client_id = b.client_id AND a.id = b.server_id AND c.account_id = " );
+                             "WHERE a.server_typ_name = 'chat' AND c.client_id = b.client_id AND a.id = b.server_id AND c.account_id = " );
     befehl->append( accountId );
     lock();
     if( !datenbank->befehl( befehl->getText() ) )
@@ -729,19 +729,4 @@ Text *ASDatenbank::getAccountRufName( int accountId )
 Text *ASDatenbank::getLetzterFehler() const
 {
     return datenbank->getLetzterFehler();
-}
-
-// Reference Counting
-ASDatenbank *ASDatenbank::getThis()
-{
-    ref++;
-    return this;
-}
-
-ASDatenbank *ASDatenbank::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 47 - 51
AnmeldungServer/Datenbank.h

@@ -11,63 +11,59 @@ using namespace sql;
 
 namespace Admin_Recht
 {
-	const int ASStarten = 28;
-	const int ASBeenden = 29;
-	const int ASPausieren = 30;
-	const int ASMCChange = 31;
+    const int ASStarten = 28;
+    const int ASBeenden = 29;
+    const int ASPausieren = 30;
+    const int ASMCChange = 31;
 }
 
-class ASDatenbank
+class ASDatenbank : public virtual ReferenceCounter
 {
 private:
-	Datenbank *datenbank;
-	CRITICAL_SECTION cs;
-	int ref;
+    Datenbank *datenbank;
+    CRITICAL_SECTION cs;
 
 public:
-	// Konstruktor
-	ASDatenbank( InitDatei *zIni );
-	// Destruktor
-	~ASDatenbank();
-	// nicht constant
-	void lock();
-	void unlock();
-	int istAdministrator( const char *name, const char *passwort );
-	bool adminHatRecht( int id, int recht );
-	bool proveKlient( int num, int sNum );
-	Text *getKlientKey( int cId );
-	void unregisterKlient( int num, int sNum );
-	bool setServerStatus( int id, int status );
-	bool setMaxClients( int id, int maxC );
-	bool serverIstNichtPausiert( int id );
-	bool getChatServer( int accountId, Text *ip, int *port );
-	int gruppeErstellen( int accountId, int karteId, int *gruppe_id );
-	bool gruppeAnmelden( int accountId, int gruppeId );
-	bool gruppeAbmelden( int accountId, int gruppeId );
-	bool setGruppeSpielStarten( int accountId, int gruppeId, bool starten );
-	bool getGruppeSpielStarten( int gruppeId );
-	bool proveEinladung( int vonAccount, int zuAccount, int gruppeId );
-	int gruppeBetreten( int accountId, int gruppeId );
-	int gruppeVerlassen( int accountId, int gruppeId );
-	bool spielerKannKicken( int accountId, int gruppeId );
-	bool getSpielerInGruppe( int gruppeId, Array< int > *accountId, int *anzahl );
-	int getSpielerInGruppeAnzahl( int gruppeId );
-	int getGruppeAdminId( int gruppeId );
-	bool gruppeSpielerEinladen( int vonAccount, int zuAccount, int gruppeId );
-	bool gruppeEinladungAbbrechen( int admin, int gruppeId, int accountId );
-	bool gruppeSpielerIstEingeladen( int gruppeId, int accountId );
-	bool gruppeIstInWarteschlange( int gruppeId );
-	int getAccountId( int clientId );
-	int accountAnmelden( int accountId, int karteId );
-	void accountAbmelden( int accountId );
-	bool spielerBesitztKarte( int accountId, int karteId );
-	int getGruppenKarte( int gruppeId );
-	Text *getAccountRufName( int accountId );
-	// constant
-	Text *getLetzterFehler() const;
-	// Reference Counting
-	ASDatenbank *getThis();
-	ASDatenbank *release();
+    // Konstruktor
+    ASDatenbank( InitDatei *zIni );
+    // Destruktor
+    ~ASDatenbank();
+    // nicht constant
+    void lock();
+    void unlock();
+    int istAdministrator( const char *name, const char *passwort );
+    bool adminHatRecht( int id, int recht );
+    bool proveKlient( int num, int sNum );
+    Text *getKlientKey( int cId );
+    void unregisterKlient( int num, int sNum );
+    bool setServerStatus( int id, int status );
+    bool setMaxClients( int id, int maxC );
+    bool serverIstNichtPausiert( int id );
+    bool getChatServer( int accountId, Text *ip, int *port );
+    int gruppeErstellen( int accountId, int karteId, int *gruppe_id );
+    bool gruppeAnmelden( int accountId, int gruppeId );
+    bool gruppeAbmelden( int accountId, int gruppeId );
+    bool setGruppeSpielStarten( int accountId, int gruppeId, bool starten );
+    bool getGruppeSpielStarten( int gruppeId );
+    bool proveEinladung( int vonAccount, int zuAccount, int gruppeId );
+    int gruppeBetreten( int accountId, int gruppeId );
+    int gruppeVerlassen( int accountId, int gruppeId );
+    bool spielerKannKicken( int accountId, int gruppeId );
+    bool getSpielerInGruppe( int gruppeId, Array< int > *accountId, int *anzahl );
+    int getSpielerInGruppeAnzahl( int gruppeId );
+    int getGruppeAdminId( int gruppeId );
+    bool gruppeSpielerEinladen( int vonAccount, int zuAccount, int gruppeId );
+    bool gruppeEinladungAbbrechen( int admin, int gruppeId, int accountId );
+    bool gruppeSpielerIstEingeladen( int gruppeId, int accountId );
+    bool gruppeIstInWarteschlange( int gruppeId );
+    int getAccountId( int clientId );
+    int accountAnmelden( int accountId, int karteId );
+    void accountAbmelden( int accountId );
+    bool spielerBesitztKarte( int accountId, int karteId );
+    int getGruppenKarte( int gruppeId );
+    Text *getAccountRufName( int accountId );
+    // constant
+    Text *getLetzterFehler() const;
 };
 
 #endif

+ 5 - 5
AnmeldungServer/main.cpp

@@ -7,9 +7,9 @@
 
 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 );
 #ifdef DEBUG
     chdir( "/test/anmeldung" );
 #endif
@@ -18,10 +18,10 @@ int main()
     Text *pfad = new Text( "../log/anmeldung/" );
     pfad->append( z->getZeit( "y-m-d h-i-s.log" ) );
     z->release();
-    DateiPfadErstellen( pfad->getThis() );
+    DateiPfadErstellen( pfad->getText() );
     std::ofstream file;
     file.open( pfad->getText() );
-    std::streambuf* sbuf = std::cout.rdbuf();
+    std::streambuf *sbuf = std::cout.rdbuf();
     std::cout.rdbuf( file.rdbuf() );
     pfad->release();