Kaynağa Gözat

use framework reference counter

Kolja Strohm 3 yıl önce
ebeveyn
işleme
53ca1f8535

+ 19 - 94
Include/KSGNetwork.h

@@ -126,7 +126,7 @@ namespace KSGClient
     };
 
     // Wird benutzt, um die Verbindung mit den Servern aufrecht zu erhalten. Bei einem Verbindungsabbruch wird der Client automatisch abgemeldet
-    class ErhaltungServerClient : protected virtual Framework::Thread
+    class ErhaltungServerClient : protected virtual Framework::Thread, public virtual Framework::ReferenceCounter
     {
     protected:
         // DBeantwortet Ping - Anfragen des Servers. Falls diese 60 Sekunden lang unbeantwortet bleiben, wird der Client vom Serversystem abgemeldet
@@ -144,15 +144,10 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual Thread *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual Thread *release() = 0;
     };
 
     // Wird benutzt, um aktualisierte Spieldateien herunterzuladen
-    class PatchServerClient
+    class PatchServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet ich mit dem Patch Server
@@ -189,15 +184,10 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual PatchServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual PatchServerClient *release() = 0;
     };
 
     // Wird verwendet um News Oberflächen abzufragen (KSG Script Seiten)
-    class NewsServerClient
+    class NewsServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet ich mit dem News Server
@@ -220,15 +210,10 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual NewsServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual NewsServerClient *release() = 0;
     };
 
     // Wird benutzt, um Accounts zu erstellen zu ändern oder zu löschen
-    class RegisterServerClient
+    class RegisterServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet ich mit dem Register Server
@@ -306,15 +291,10 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual RegisterServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual RegisterServerClient *release() = 0;
     };
 
     // Wird verwendet um sich einzuloggen oder auszuloggen
-    class LoginServerClient
+    class LoginServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet sich mit dem zugewiesenen Login Server
@@ -333,7 +313,7 @@ namespace KSGClient
         // Erhält die Verbindung aufrecht
         //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
         //  Sollte während einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
-        virtual bool keepAlive() = 0; 
+        virtual bool keepAlive() = 0;
         // Trennt die Verbindung zum Server
         //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
         //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
@@ -346,11 +326,6 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual LoginServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual LoginServerClient *release() = 0;
     };
 
     class EditorServerClient;
@@ -359,7 +334,7 @@ namespace KSGClient
 
     // Wird verwendet um informationen über Accounts abzufragen
     //  Kann nur von eingeloggten Clients verwendet werden
-    class InformationServerClient
+    class InformationServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet ich mit dem zugewiesenen Informaion Server
@@ -566,16 +541,11 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual InformationServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual InformationServerClient *release() = 0;
     };
 
     // Wird verwendet um Chat nachrichten zu senden oder zu empfangen. Das Serversystem sendet außerdem einiege Mitteilungen über den Chat (z.B. Gefundene Spiele, Gruppeneinladungen ...)
     //  Kann nur von eingeloggten Clients verwendet werden
-    class ChatServerClient
+    class ChatServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet sich mit dem zugewiesenen Chat Server
@@ -654,22 +624,17 @@ namespace KSGClient
         // Wartet auf eine Nachricht vom Chatserver.
         //  Gibt bei Erfolg 1 zurück, 0 sonnst
         //  nachricht: Eine Referenz auf die Struktur, in der die Nachricht gespeichert werden soll
-        virtual bool getNextMessage( ChatServerNachricht &nachricht) = 0;
+        virtual bool getNextMessage( ChatServerNachricht &nachricht ) = 0;
         // Gibt 1 zurück, falls der Client verbunden ist, 0 sonst
         virtual bool istVerbunden() const = 0;
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual ChatServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual ChatServerClient *release() = 0;
     };
 
     // Wird verwendet um Spiele oder Karten zu kaufen
     //  Kann nur von eingeloggten Clients verwendet werden
-    class ShopServerClient
+    class ShopServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet sich mit dem zugewiesenen Shop Server
@@ -699,7 +664,7 @@ namespace KSGClient
         // Gibt den Preis eines Spiels in Kupfer zurück
         //  id: Die Id des Spiels
         //  testVersion: 1:=Es wird der Preis der Testversion zurückgegeben, 0:=Es wird der Preis der Vollversion zurückgegeben
-        virtual int getSpielPreis( int id, bool testVersion ) = 0; 
+        virtual int getSpielPreis( int id, bool testVersion ) = 0;
         // Kauft ein Spiel
         //  id: Die Id des Spiels
         //  testVersion: 1:=Es wird die Testversion erworben, 0:=Es wird die Vollversion erworben
@@ -747,16 +712,11 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual ShopServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual ShopServerClient *release() = 0;
     };
 
     // Wird verwendet um sich für Spiele anzumelden
     //  Kann nur von eingeloggten Clients verwendet werden
-    class AnmeldungServerClient
+    class AnmeldungServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet sich mit dem zugewiesenen Anmeldung Server
@@ -833,16 +793,11 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual AnmeldungServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual AnmeldungServerClient *release() = 0;
     };
 
     // Wird verwendet um die aktuellen versionen der Karten vor dem Spiel herunterzuladen
     //  Kann nur von eingeloggten Clients verwendet werden
-    class KartenServerClient
+    class KartenServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet sich mit dem zugewiesenen Karten Server
@@ -881,16 +836,11 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual KartenServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual KartenServerClient *release() = 0;
     };
 
     // Wird zum Online Spielen verwendet
     //  Kann nur von eingeloggten Clients verwendet werden
-    class SpielServerClient
+    class SpielServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet sich mit dem zugewiesenen Karten Server
@@ -949,16 +899,11 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual SpielServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual SpielServerClient *release() = 0;
     };
 
     // Wird verwendet um Statistiken und Aufzeichnungen von vergangenen Spielen abzufragen
     //  Kann nur von eingeloggten Clients verwendet werden
-    class HistorieServerClient
+    class HistorieServerClient : public virtual Framework::ReferenceCounter
     {
     protected:
         // verbindet sich mit dem zugewiesenen Historie Server
@@ -978,16 +923,11 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual HistorieServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual HistorieServerClient *release() = 0;
     };
 
     // Wird verwendet um Minigame Bestscores abzufragen und Minigame Spielaufzeichnungen zu laden
     //  Kann nur von eingeloggten Clients verwendet werden
-    class MinigameServerClient
+    class MinigameServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet sich mit dem zugewiesenen Minigame Server
@@ -1042,16 +982,11 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual MinigameServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual MinigameServerClient *release() = 0;
     };
 
     // Wird verwendet um Karten für Spiele zu erstellen
     //  Kann nur von eingeloggten Clients verwendet werden
-    class EditorServerClient
+    class EditorServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // verbindet sich mit dem zugewiesenen Editor Server
@@ -1190,7 +1125,7 @@ namespace KSGClient
         // Erstellt neue Datei im Datei Editor
         //  typ: 0=ordner 1=bild 2=modell2d 3=sound
         //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
-        virtual bool deNeueDatei( char typ, Framework::Text *zName ) = 0; 
+        virtual bool deNeueDatei( char typ, Framework::Text *zName ) = 0;
         // Öffnet Ordner im Datei Editor
         //  zName: Der Name des Ordners
         //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
@@ -1303,15 +1238,10 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist (vom selben Thread)
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual EditorServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual EditorServerClient *release() = 0;
     };
 
     // Wird verwendet um Eine Verbindung mit dem Serversystem herzustellen
-    class MainServerClient
+    class MainServerClient : public virtual Framework::ReferenceCounter
     {
     public:
         // Meldet den neuen Client beim Serversystem an. Durch diesen Vorgang erhält der Client eine Id und den Port und die Ip Addresse des Main Servers
@@ -1371,10 +1301,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         virtual char *getLetzterFehler() const = 0;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        virtual MainServerClient *getThis() = 0;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        virtual MainServerClient *release() = 0;
     };
 }

+ 28 - 45
KSGNetwork/AnmeldungClient.cpp

@@ -9,8 +9,8 @@ using namespace KSGClient;
 
 // Konstruktor
 AnmeldungClient::AnmeldungClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -50,7 +50,7 @@ bool AnmeldungClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -73,7 +73,7 @@ bool AnmeldungClient::verbinde()
         else
         {
             err = "network error while sending to Anmeldung Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -81,7 +81,7 @@ bool AnmeldungClient::verbinde()
     else
     {
         err = "network error while connecting to Anmeldung Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -106,12 +106,12 @@ int AnmeldungClient::gruppeErstellen( int karteId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&karteId, 4 );
+        k->sendeEncrypted( (char *)&karteId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
             int gruppeId = 0;
-            k->getNachrichtEncrypted( (char*)&gruppeId, 4 );
+            k->getNachrichtEncrypted( (char *)&gruppeId, 4 );
             cs.unlock();
             return gruppeId;
         }
@@ -152,15 +152,15 @@ bool AnmeldungClient::gruppeBetreten( int gruppeId, Framework::Array< int > *mit
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
-            k->getNachrichtEncrypted( (char*)anzahl, 4 );
+            k->getNachrichtEncrypted( (char *)anzahl, 4 );
             for( int i = 0; i < *anzahl; i++ )
             {
                 int id = 0;
-                k->getNachrichtEncrypted( (char*)&id, 4 );
+                k->getNachrichtEncrypted( (char *)&id, 4 );
                 mitglieder->add( id, i );
             }
             cs.unlock();
@@ -201,7 +201,7 @@ bool AnmeldungClient::gruppeVerlassen( int gruppeId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -243,7 +243,7 @@ bool AnmeldungClient::gruppeAnmelden( int gruppeId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -285,7 +285,7 @@ bool AnmeldungClient::gruppeAbmelden( int gruppeId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -328,8 +328,8 @@ bool AnmeldungClient::gruppeSpielerEinladen( int accountId, int gruppeId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&accountId, 4 );
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&accountId, 4 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -372,8 +372,8 @@ bool AnmeldungClient::gruppeEinladungAbbrechen( int accountId, int gruppeId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
-        k->sendeEncrypted( (char*)&accountId, 4 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&accountId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -415,7 +415,7 @@ bool AnmeldungClient::gruppeEinladungAblehnen( int gruppeId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -458,8 +458,8 @@ bool AnmeldungClient::kickSpielerAusGruppe( int accountId, int gruppeId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&accountId, 4 );
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&accountId, 4 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -502,8 +502,8 @@ bool AnmeldungClient::gruppeSpielStarten( int gruppeId, bool spielStarten )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
-        k->sendeEncrypted( (char*)&spielStarten, 1 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&spielStarten, 1 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -550,8 +550,8 @@ bool AnmeldungClient::gruppeNachricht( int gruppeId, char *nachricht )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&gruppeId, 4 );
-        k->sendeEncrypted( (char*)&län, 1 );
+        k->sendeEncrypted( (char *)&gruppeId, 4 );
+        k->sendeEncrypted( (char *)&län, 1 );
         k->sendeEncrypted( nachricht, län );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
@@ -594,7 +594,7 @@ bool AnmeldungClient::anmelden( int karteId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&karteId, 4 );
+        k->sendeEncrypted( (char *)&karteId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -665,17 +665,17 @@ bool AnmeldungClient::keepAlive()
     char res = 0;
     if( !cs.tryLock() )
         return 1;
-    Framework::logLine( ( char* )"Verbindungstest zum Anmeldung Server..." );
+    Framework::logLine( (char *)"Verbindungstest zum Anmeldung Server..." );
     bool ok = k->sendeEncrypted( "\x13", 1 );
     ok &= k->getNachrichtEncrypted( &res, 1 );
     cs.unlock();
     if( res != 1 || !ok )
     {
-        Framework::logLine( ( char* ) "Verbindungsabbruch." );
+        Framework::logLine( (char *)"Verbindungsabbruch." );
         trenne( 0 );
     }
     else
-        Framework::logLine( ( char* ) "Verbindung besteht." );
+        Framework::logLine( (char *)"Verbindung besteht." );
     return res == 1;
 }
 
@@ -723,7 +723,7 @@ bool AnmeldungClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -739,21 +739,4 @@ bool AnmeldungClient::istVerbunden() const
 char *AnmeldungClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-AnmeldungServerClient *AnmeldungClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-AnmeldungServerClient *AnmeldungClient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/AnmeldungClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class AnmeldungClient : public AnmeldungServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -99,10 +98,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        AnmeldungServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        AnmeldungServerClient *release() override;
     };
 }

+ 72 - 88
KSGNetwork/ChatClient.cpp

@@ -10,8 +10,8 @@ using namespace KSGClient;
 
 // Konstruktor
 ChatClient::ChatClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -52,7 +52,7 @@ bool ChatClient::verbinde()
     {
         if( senden->sendeEncrypted( "\1", 1 ) )
         {
-            senden->sendeEncrypted( (char*)&cId, 4 );
+            senden->sendeEncrypted( (char *)&cId, 4 );
             char ret = 0;
             senden->getNachrichtEncrypted( &ret, 1 );
             if( ret != 1 )
@@ -68,7 +68,7 @@ bool ChatClient::verbinde()
                 char serverReturn = 0;
                 senden->getNachrichtEncrypted( &serverReturn, 1 );
                 senden->trenne();
-                senden = senden->release();
+                senden = (Network::Klient *)senden->release();
                 cs.unlock();
                 return 0;
             }
@@ -86,7 +86,7 @@ bool ChatClient::verbinde()
             if( empfangen->verbinde( senden->getServerPort(), senden->getServerIp() ) )
             {
                 empfangen->sendeEncrypted( "\1", 1 );
-                empfangen->sendeEncrypted( (char*)&cId, 4 );
+                empfangen->sendeEncrypted( (char *)&cId, 4 );
                 char res = 0;
                 empfangen->getNachrichtEncrypted( &res, 1 );
                 if( res == 1 )
@@ -111,12 +111,12 @@ bool ChatClient::verbinde()
             else
             {
                 err = "Der dir zugewiesene Chat Server kann dir keine Nachrichten senden.";
-                empfangen = empfangen->release();
+                empfangen = (Network::Klient *)empfangen->release();
                 senden->sendeEncrypted( "\3", 1 );
                 char serverReturn = 0;
                 senden->getNachrichtEncrypted( &serverReturn, 1 );
                 senden->trenne();
-                senden = senden->release();
+                senden = (Network::Klient *)senden->release();
                 cs.unlock();
                 return 0;
             }
@@ -124,7 +124,7 @@ bool ChatClient::verbinde()
         else
         {
             err = "Der dir zugewiesene Chat Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut.";
-            senden = senden->release();
+            senden = (Network::Klient *)senden->release();
             cs.unlock();
             return 0;
         }
@@ -132,7 +132,7 @@ bool ChatClient::verbinde()
     else
     {
         err = "Der dir zugewiesene Chat Server antwortet nicht. Bitte versuche es Später erneut.";
-        senden = senden->release();
+        senden = (Network::Klient *)senden->release();
         cs.unlock();
         return 0;
     }
@@ -165,7 +165,7 @@ bool ChatClient::chatNachricht( int zuAccount, const char *nachricht )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&zuAccount, 4 );
+        senden->sendeEncrypted( (char *)&zuAccount, 4 );
         senden->sendeEncrypted( &län, 1 );
         senden->sendeEncrypted( nachricht, län );
     }
@@ -233,7 +233,7 @@ bool ChatClient::freundschaftBeenden( int accountId )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
+        senden->sendeEncrypted( (char *)&accountId, 4 );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -263,7 +263,7 @@ bool ChatClient::freundesAnfrage( int accountId )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
+        senden->sendeEncrypted( (char *)&accountId, 4 );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -294,7 +294,7 @@ bool ChatClient::freundesAnfrageBeantworten( int accountId, bool ja )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
+        senden->sendeEncrypted( (char *)&accountId, 4 );
         char ok = (char)ja;
         senden->sendeEncrypted( &ok, 1 );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
@@ -338,7 +338,7 @@ int ChatClient::chatroomErstellen( const char *name )
         if( serverReturn == 1 )
         {
             int ret = 0;
-            senden->getNachrichtEncrypted( (char*)&ret, 4 );
+            senden->getNachrichtEncrypted( (char *)&ret, 4 );
             cs.unlock();
             return ret;
         }
@@ -366,8 +366,8 @@ bool ChatClient::chatroomEinladung( int accountId, int chatroomId )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
+        senden->sendeEncrypted( (char *)&accountId, 4 );
+        senden->sendeEncrypted( (char *)&chatroomId, 4 );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -398,8 +398,8 @@ bool ChatClient::chatroomEinladungAblehnen( int accountId, int chatroomId )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
+        senden->sendeEncrypted( (char *)&accountId, 4 );
+        senden->sendeEncrypted( (char *)&chatroomId, 4 );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -429,7 +429,7 @@ bool ChatClient::chatroomBetreten( int chatroomId )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
+        senden->sendeEncrypted( (char *)&chatroomId, 4 );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -466,7 +466,7 @@ bool ChatClient::chatroomNachricht( int chatroomId, const char *nachricht )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
+        senden->sendeEncrypted( (char *)&chatroomId, 4 );
         senden->sendeEncrypted( &län, 1 );
         senden->sendeEncrypted( nachricht, län );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
@@ -498,7 +498,7 @@ bool ChatClient::chatroomVerlassen( int chatroomId )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
+        senden->sendeEncrypted( (char *)&chatroomId, 4 );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -529,8 +529,8 @@ bool ChatClient::chatroomKick( int chatroomId, int accountId )
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn )
     {
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
-        senden->sendeEncrypted( (char*)&accountId, 4 );
+        senden->sendeEncrypted( (char *)&chatroomId, 4 );
+        senden->sendeEncrypted( (char *)&accountId, 4 );
         senden->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -603,17 +603,17 @@ bool ChatClient::keepAlive()
     char res = 0;
     if( !cs.tryLock() )
         return 1;
-    Framework::logLine( ( char* )"Verbindungstest zum Chat Server..." );
+    Framework::logLine( (char *)"Verbindungstest zum Chat Server..." );
     bool ok = senden->sendeEncrypted( "\x15", 1 );
     ok &= senden->getNachrichtEncrypted( &res, 1 );
     cs.unlock();
     if( res != 1 || !ok )
     {
-        Framework::logLine( ( char* )"Verbindungsabbruch." );
+        Framework::logLine( (char *)"Verbindungsabbruch." );
         trenne( 0 );
     }
     else
-        Framework::logLine( ( char* )"Verbindung besteht." );
+        Framework::logLine( (char *)"Verbindung besteht." );
     return res == 1;
 }
 
@@ -629,11 +629,11 @@ bool ChatClient::trenne( bool abmelden )
     char serverReturn = 0;
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     senden->trenne();
-    senden = senden->release();
+    senden = (Network::Klient *)senden->release();
     if( empfangen )
     {
         empfangen->trenne();
-        empfangen = empfangen->release();
+        empfangen = (Network::Klient *)empfangen->release();
     }
     cs.unlock();
     return 1;
@@ -673,7 +673,7 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
         case 4: // Chat Nachricht
             if( 1 )
             {
-                empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
                 char länge = 0;
                 empfangen->getNachrichtEncrypted( &länge, 1 );
                 char *txt = new char[ länge + 1 ];
@@ -684,13 +684,13 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
             }
             break;
         case 5: // Spiel Einladung
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
             break;
         case 6: // Account Status ändert sich
             if( 1 )
             {
-                empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
                 char län = 0;
                 empfangen->getNachrichtEncrypted( &län, 1 );
                 char *status = new char[ län + 1 ];
@@ -703,7 +703,7 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
         case 7: // Account Name ändert sich
             if( 1 )
             {
-                empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
                 char län = 0;
                 empfangen->getNachrichtEncrypted( &län, 1 );
                 char *name = new char[ län + 1 ];
@@ -714,34 +714,34 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
             }
             break;
         case 8: // kein Freund mehr
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 9: // Freundesanfrage
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0xA: // Neuer Freund
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0xB: // Freundesanfrage abgelehnt
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0xC: // Einladung zum Chatroom
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.chatroom, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.chatroom, 4 );
             break;
         case 0xD: // Einladung zum Chatroom abgelehnt
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.chatroom, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.chatroom, 4 );
             break;
         case 0xE: // Spieler betritt Chatroom
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.chatroom, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.chatroom, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0xF: // Chatroom Nachricht
             if( 1 )
             {
-                empfangen->getNachrichtEncrypted( (char*)&nachricht.chatroom, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&nachricht.chatroom, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
                 char län = 0;
                 empfangen->getNachrichtEncrypted( &län, 1 );
                 char *txt = new char[ län + 1 ];
@@ -755,8 +755,8 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
             }
             break;
         case 0x10: // Spieler verlässt Chatroom
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.chatroom, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.chatroom, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0x11: // Freunde
             if( 1 )
@@ -766,7 +766,7 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
                 for( int i = 0; i < freundeAnzahl; i++ )
                 {
                     int accountId = 0;
-                    empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
+                    empfangen->getNachrichtEncrypted( (char *)&accountId, 4 );
                     nachricht.ids.add( accountId );
                 }
             }
@@ -774,42 +774,42 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
         case 0x12: // Spieler im Chatroom
             if( 1 )
             {
-                empfangen->getNachrichtEncrypted( (char*)&nachricht.chatroom, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&nachricht.chatroom, 4 );
                 char anzahl = 0;
                 empfangen->getNachrichtEncrypted( &anzahl, 1 );
                 for( char i = 0; i < anzahl; i++ )
                 {
                     int accountId = 0;
-                    empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
+                    empfangen->getNachrichtEncrypted( (char *)&accountId, 4 );
                     nachricht.ids.add( accountId );
                 }
             }
             break;
         case 0x13: // Freund online
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0x14: // Freund offline
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0x15: // Chatroom Admin
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.chatroom, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.chatroom, 4 );
             break;
         case 0x16: // Chatroom Kick
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.chatroom, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.chatroom, 4 );
             break;
         case 0x17: // Spieler betritt Gruppe
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
             break;
         case 0x18: // Spieler verlässt Gruppe
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
             break;
         case 0x19: // gruppe Nachricht
             if( 1 )
             {
                 char län = 0;
-                empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
                 empfangen->getNachrichtEncrypted( &län, 1 );
                 if( län )
                 {
@@ -822,38 +822,38 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
             }
             break;
         case 0x1A: // gruppe Angemeldet
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
             break;
         case 0x1B: // gruppe Abgemeldet
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
             break;
         case 0x1C: // gruppe Spiel starten
             if( 1 )
             {
                 char starten = 0;
-                empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
                 empfangen->getNachrichtEncrypted( &starten, 1 );
                 nachricht.account = starten;
             }
             break;
         case 0x1D: // kick aus Gruppe
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
             break;
         case 0x1E: // gruppe Admin
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0x1F: // gruppe Einladung abgelehnt
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0x20: // SpielServer Verbindungs Anfrage
             if( 1 )
             {
                 unsigned short port;
                 unsigned char *ip = new unsigned char[ 4 ];
-                empfangen->getNachrichtEncrypted( (char*)&port, 2 );
-                empfangen->getNachrichtEncrypted( (char*)ip, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&port, 2 );
+                empfangen->getNachrichtEncrypted( (char *)ip, 4 );
                 Text *ipT = new Text( "" );
                 ipT->append( (int)ip[ 0 ] );
                 ipT->append( "." );
@@ -868,12 +868,12 @@ bool ChatClient::getNextMessage( ChatServerNachricht &nachricht )
             }
             break;
         case 0x21: // Gruppe Einladung abgebrochen
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0x22: // Gruppe Einladung hinzufügen
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.gruppe, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.account, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.gruppe, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.account, 4 );
             break;
         case 0x23: // ping
             empfangen->sendeEncrypted( "\1", 1 );
@@ -894,20 +894,4 @@ bool ChatClient::istVerbunden() const
 char *ChatClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-ChatServerClient *ChatClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-ChatServerClient *ChatClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/ChatClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class ChatClient : public ChatServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -108,10 +107,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        ChatServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        ChatServerClient *release() override;
     };
 }

+ 97 - 127
KSGNetwork/EditorClient.cpp

@@ -19,15 +19,14 @@ private:
     __int64 län;
     Network::Klient *k;
     FBalken *f;
-    int ref;
 
 public:
     // Konstruktor
     DownloadSound( Network::Klient *zK, FBalken *zF )
+        : Thread()
     {
         k = zK;
         f = zF;
-        ref = 1;
     }
     // nicht constant
     // GSL
@@ -49,9 +48,9 @@ public:
         k->getNachrichtEncrypted( &m, 1 );
         istM = ( m == 1 );
         sample = 0;
-        k->getNachrichtEncrypted( (char*)&sample, 4 );
+        k->getNachrichtEncrypted( (char *)&sample, 4 );
         län = 0;
-        k->getNachrichtEncrypted( (char*)&län, 8 );
+        k->getNachrichtEncrypted( (char *)&län, 8 );
         if( f )
             f->setAktionAnzahl( län );
     }
@@ -80,27 +79,14 @@ public:
     {
         return län;
     }
-    // Reference Counting
-    GSL::GSLSoundV *getThis() override
-    {
-        ref++;
-        return this;
-    }
-    GSL::GSLSoundV *release() override
-    {
-        ref--;
-        if( !ref )
-            delete this;
-        return 0;
-    }
 };
 
 // Inhalt der KSGClient Klasse
 
 // Konstruktor
 EditorClient::EditorClient( int kId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = kId;
@@ -140,7 +126,7 @@ bool EditorClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -163,7 +149,7 @@ bool EditorClient::verbinde()
         else
         {
             err = "network error while sending to Editor Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -171,7 +157,7 @@ bool EditorClient::verbinde()
     else
     {
         err = "network error while connecting to Editor Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -200,7 +186,7 @@ bool EditorClient::karteErstellen( char *name, int spielArt )
         char l = (char)textLength( name );
         k->sendeEncrypted( &l, 1 );
         k->sendeEncrypted( name, l );
-        k->sendeEncrypted( (char*)&spielArt, 4 );
+        k->sendeEncrypted( (char *)&spielArt, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
     }
     if( ret == 3 )
@@ -237,7 +223,7 @@ bool EditorClient::ladeKarte( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
     }
     if( ret == 3 )
@@ -279,7 +265,7 @@ int EditorClient::getAbbildListe( Framework::RCArray< Framework::Text > *name, F
         if( ret == 1 )
         {
             int anz = 0;
-            k->getNachrichtEncrypted( (char*)&anz, 4 );
+            k->getNachrichtEncrypted( (char *)&anz, 4 );
             for( int i = 0; i < anz; i++ )
             {
                 char l = 0;
@@ -291,17 +277,17 @@ int EditorClient::getAbbildListe( Framework::RCArray< Framework::Text > *name, F
                 delete[] n;
                 Zeit *dat = new Zeit();
                 int d = 0;
-                k->getNachrichtEncrypted( (char*)&d, 4 );
+                k->getNachrichtEncrypted( (char *)&d, 4 );
                 dat->setJahr( d );
-                k->getNachrichtEncrypted( (char*)&d, 4 );
+                k->getNachrichtEncrypted( (char *)&d, 4 );
                 dat->setMonat( d );
-                k->getNachrichtEncrypted( (char*)&d, 4 );
+                k->getNachrichtEncrypted( (char *)&d, 4 );
                 dat->setTag( d );
-                k->getNachrichtEncrypted( (char*)&d, 4 );
+                k->getNachrichtEncrypted( (char *)&d, 4 );
                 dat->setStunde( d );
-                k->getNachrichtEncrypted( (char*)&d, 4 );
+                k->getNachrichtEncrypted( (char *)&d, 4 );
                 dat->setMinute( d );
-                k->getNachrichtEncrypted( (char*)&d, 4 );
+                k->getNachrichtEncrypted( (char *)&d, 4 );
                 dat->setSekunde( d );
                 datum->set( dat, i );
             }
@@ -557,7 +543,7 @@ bool EditorClient::ladeShopSeiteVorschau()
         if( ret == 1 )
         {
             int anz = 0;
-            k->getNachrichtEncrypted( (char*)&anz, 4 );
+            k->getNachrichtEncrypted( (char *)&anz, 4 );
             Text pf = "data/tmp/ke/ssv";
             for( int i = 0; i < anz; i++ )
             {
@@ -574,7 +560,7 @@ bool EditorClient::ladeShopSeiteVorschau()
                 d.erstellen();
                 d.open( Datei::Style::schreiben );
                 __int64 größe = 0;
-                k->getNachrichtEncrypted( (char*)&größe, 8 );
+                k->getNachrichtEncrypted( (char *)&größe, 8 );
                 char *buffer = new char[ 2048 ];
                 while( größe > 0 )
                 {
@@ -751,10 +737,10 @@ Framework::Bild *EditorClient::ssBildLaden( char *datei, char *bild )
                     Bild *ret = new Bild();
                     int br = 0;
                     int hö = 0;
-                    k->getNachrichtEncrypted( (char*)&br, 4 );
-                    k->getNachrichtEncrypted( (char*)&hö, 4 );
+                    k->getNachrichtEncrypted( (char *)&br, 4 );
+                    k->getNachrichtEncrypted( (char *)&hö, 4 );
                     ret->neuBild( br, hö, 0 );
-                    char *buffer = (char*)ret->getBuffer();
+                    char *buffer = (char *)ret->getBuffer();
                     __int64 län = br * hö * 4;
                     for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
                     {
@@ -870,7 +856,7 @@ Framework::Text *EditorClient::ssTextLaden( char *datei )
                 if( ret == 1 )
                 {
                     int län = 0;
-                    k->getNachrichtEncrypted( (char*)&län, 4 );
+                    k->getNachrichtEncrypted( (char *)&län, 4 );
                     char *txt = new char[ län + 1 ];
                     txt[ län ] = 0;
                     for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
@@ -939,7 +925,7 @@ bool EditorClient::ssTextSpeichern( char *datei, Framework::Text *zText )
                 if( ret == 1 )
                 {
                     int län = zText->getLength();
-                    k->sendeEncrypted( (char*)&län, 4 );
+                    k->sendeEncrypted( (char *)&län, 4 );
                     for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
                         k->sende( &( zText->getText()[ i ] ), l );
                     k->getNachrichtEncrypted( &ret, 1 );
@@ -1061,10 +1047,10 @@ bool EditorClient::ssBildSpeichern( char *datei, char *name, Framework::Bild *zB
                 {
                     int br = zBild->getBreite();
                     int hö = zBild->getHeight();
-                    k->sendeEncrypted( (char*)&br, 4 );
-                    k->sendeEncrypted( (char*)&hö, 4 );
+                    k->sendeEncrypted( (char *)&br, 4 );
+                    k->sendeEncrypted( (char *)&hö, 4 );
                     __int64 län = br * hö * 4;
-                    char *buffer = (char*)zBild->getBuffer();
+                    char *buffer = (char *)zBild->getBuffer();
                     for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
                         k->sende( &( buffer[ i ] ), l );
                     k->getNachrichtEncrypted( &ret, 1 );
@@ -1116,7 +1102,7 @@ int EditorClient::ssGetDateiListe( Framework::RCArray< Framework::Text > *zList
             if( ret == 1 )
             {
                 int anz = 0;
-                k->getNachrichtEncrypted( (char*)&anz, 4 );
+                k->getNachrichtEncrypted( (char *)&anz, 4 );
                 for( int i = 0; i < anz; i++ )
                 {
                     char l = 0;
@@ -1183,7 +1169,7 @@ int EditorClient::ssGetBildListe( char *name, Framework::RCArray< Framework::Tex
                 if( ret == 1 )
                 {
                     int anz = 0;
-                    k->getNachrichtEncrypted( (char*)&anz, 4 );
+                    k->getNachrichtEncrypted( (char *)&anz, 4 );
                     for( int i = 0; i < anz; i++ )
                     {
                         l = 0;
@@ -1240,9 +1226,9 @@ bool EditorClient::getShopDaten( int &es, int &tp, int &vp )
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
-            k->getNachrichtEncrypted( (char*)&es, 4 );
-            k->getNachrichtEncrypted( (char*)&tp, 4 );
-            k->getNachrichtEncrypted( (char*)&vp, 4 );
+            k->getNachrichtEncrypted( (char *)&es, 4 );
+            k->getNachrichtEncrypted( (char *)&tp, 4 );
+            k->getNachrichtEncrypted( (char *)&vp, 4 );
             cs.unlock();
             return 1;
         }
@@ -1287,9 +1273,9 @@ bool EditorClient::setShopDaten( int es, int tp, int vp )
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
-            k->sendeEncrypted( (char*)&es, 4 );
-            k->sendeEncrypted( (char*)&tp, 4 );
-            k->sendeEncrypted( (char*)&vp, 4 );
+            k->sendeEncrypted( (char *)&es, 4 );
+            k->sendeEncrypted( (char *)&tp, 4 );
+            k->sendeEncrypted( (char *)&vp, 4 );
             k->getNachrichtEncrypted( &ret, 1 );
             if( ret == 1 )
             {
@@ -1340,7 +1326,7 @@ Framework::Text *EditorClient::beschreibungLaden()
             if( ret == 1 )
             {
                 int län = 0;
-                k->getNachrichtEncrypted( (char*)&län, 4 );
+                k->getNachrichtEncrypted( (char *)&län, 4 );
                 char *txt = new char[ län + 1 ];
                 txt[ län ] = 0;
                 for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
@@ -1401,10 +1387,10 @@ Framework::Bild *EditorClient::titelbildLaden()
                 Bild *ret = new Bild();
                 int br = 0;
                 int hö = 0;
-                k->getNachrichtEncrypted( (char*)&br, 4 );
-                k->getNachrichtEncrypted( (char*)&hö, 4 );
+                k->getNachrichtEncrypted( (char *)&br, 4 );
+                k->getNachrichtEncrypted( (char *)&hö, 4 );
                 ret->neuBild( br, hö, 0 );
-                char *buffer = (char*)ret->getBuffer();
+                char *buffer = (char *)ret->getBuffer();
                 __int64 län = br * hö * 4;
                 for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
                 {
@@ -1461,10 +1447,10 @@ Framework::Bild *EditorClient::minimapLaden()
                 Bild *ret = new Bild();
                 int br = 0;
                 int hö = 0;
-                k->getNachrichtEncrypted( (char*)&br, 4 );
-                k->getNachrichtEncrypted( (char*)&hö, 4 );
+                k->getNachrichtEncrypted( (char *)&br, 4 );
+                k->getNachrichtEncrypted( (char *)&hö, 4 );
                 ret->neuBild( br, hö, 0 );
-                char *buffer = (char*)ret->getBuffer();
+                char *buffer = (char *)ret->getBuffer();
                 __int64 län = br * hö * 4;
                 for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
                 {
@@ -1521,10 +1507,10 @@ Framework::Bild *EditorClient::ladebildLaden()
                 Bild *ret = new Bild();
                 int br = 0;
                 int hö = 0;
-                k->getNachrichtEncrypted( (char*)&br, 4 );
-                k->getNachrichtEncrypted( (char*)&hö, 4 );
+                k->getNachrichtEncrypted( (char *)&br, 4 );
+                k->getNachrichtEncrypted( (char *)&hö, 4 );
                 ret->neuBild( br, hö, 0 );
-                char *buffer = (char*)ret->getBuffer();
+                char *buffer = (char *)ret->getBuffer();
                 __int64 län = br * hö * 4;
                 for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
                 {
@@ -1580,7 +1566,7 @@ bool EditorClient::beschreibungSpeichern( Framework::Text *zText )
             if( ret == 1 )
             {
                 int län = zText->getLength();
-                k->sendeEncrypted( (char*)&län, 4 );
+                k->sendeEncrypted( (char *)&län, 4 );
                 for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
                     k->sende( &( zText->getText()[ i ] ), l );
                 k->getNachrichtEncrypted( &ret, 1 );
@@ -1632,10 +1618,10 @@ bool EditorClient::titelbildSpeichern( Framework::Bild *zBild )
             {
                 int br = zBild->getBreite();
                 int hö = zBild->getHeight();
-                k->sendeEncrypted( (char*)&br, 4 );
-                k->sendeEncrypted( (char*)&hö, 4 );
+                k->sendeEncrypted( (char *)&br, 4 );
+                k->sendeEncrypted( (char *)&hö, 4 );
                 __int64 län = br * hö * 4;
-                char *buffer = (char*)zBild->getBuffer();
+                char *buffer = (char *)zBild->getBuffer();
                 for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
                     k->sende( &( buffer[ i ] ), l );
                 k->getNachrichtEncrypted( &ret, 1 );
@@ -1687,10 +1673,10 @@ bool EditorClient::minimapSpeichern( Framework::Bild *zBild )
             {
                 int br = zBild->getBreite();
                 int hö = zBild->getHeight();
-                k->sendeEncrypted( (char*)&br, 4 );
-                k->sendeEncrypted( (char*)&hö, 4 );
+                k->sendeEncrypted( (char *)&br, 4 );
+                k->sendeEncrypted( (char *)&hö, 4 );
                 __int64 län = br * hö * 4;
-                char *buffer = (char*)zBild->getBuffer();
+                char *buffer = (char *)zBild->getBuffer();
                 for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
                     k->sende( &( buffer[ i ] ), l );
                 k->getNachrichtEncrypted( &ret, 1 );
@@ -1742,10 +1728,10 @@ bool EditorClient::ladebildSpeichern( Framework::Bild *zBild )
             {
                 int br = zBild->getBreite();
                 int hö = zBild->getHeight();
-                k->sendeEncrypted( (char*)&br, 4 );
-                k->sendeEncrypted( (char*)&hö, 4 );
+                k->sendeEncrypted( (char *)&br, 4 );
+                k->sendeEncrypted( (char *)&hö, 4 );
                 __int64 län = br * hö * 4;
-                char *buffer = (char*)zBild->getBuffer();
+                char *buffer = (char *)zBild->getBuffer();
                 for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
                     k->sende( &( buffer[ i ] ), l );
                 k->getNachrichtEncrypted( &ret, 1 );
@@ -1795,18 +1781,18 @@ bool EditorClient::ladeTeamDaten( SpielerTeamStrukturV *sts )
             k->getNachrichtEncrypted( &ret, 1 );
             if( ret == 1 )
             {
-                k->getNachrichtEncrypted( (char*)&sts->spielerAnzahl, 4 );
-                k->getNachrichtEncrypted( (char*)&sts->teamAnzahl, 4 );
+                k->getNachrichtEncrypted( (char *)&sts->spielerAnzahl, 4 );
+                k->getNachrichtEncrypted( (char *)&sts->teamAnzahl, 4 );
                 for( int i = 0; i < sts->spielerAnzahl; i++ )
                 {
                     int f = 0;
-                    k->getNachrichtEncrypted( (char*)&f, 4 );
+                    k->getNachrichtEncrypted( (char *)&f, 4 );
                     sts->spielerFarbe->set( f, i );
                 }
                 for( int i = 0; i < sts->teamAnzahl; i++ )
                 {
                     int f = 0;
-                    k->getNachrichtEncrypted( (char*)&f, 4 );
+                    k->getNachrichtEncrypted( (char *)&f, 4 );
                     sts->teamFarbe->set( f, i );
                 }
                 for( int i = 0; i < sts->teamAnzahl; i++ )
@@ -1822,7 +1808,7 @@ bool EditorClient::ladeTeamDaten( SpielerTeamStrukturV *sts )
                 for( int i = 0; i < sts->teamAnzahl; i++ )
                 {
                     int g = 0;
-                    k->getNachrichtEncrypted( (char*)&g, 4 );
+                    k->getNachrichtEncrypted( (char *)&g, 4 );
                     sts->teamSize->set( g, i );
                 }
                 cs.unlock();
@@ -1872,17 +1858,17 @@ bool EditorClient::speicherTeamDaten( SpielerTeamStrukturV *sts )
             k->getNachrichtEncrypted( &ret, 1 );
             if( ret == 1 )
             {
-                k->sendeEncrypted( (char*)&sts->spielerAnzahl, 4 );
-                k->sendeEncrypted( (char*)&sts->teamAnzahl, 4 );
+                k->sendeEncrypted( (char *)&sts->spielerAnzahl, 4 );
+                k->sendeEncrypted( (char *)&sts->teamAnzahl, 4 );
                 for( int i = 0; i < sts->spielerAnzahl; i++ )
                 {
                     int f = sts->spielerFarbe->get( i );
-                    k->sendeEncrypted( (char*)&f, 4 );
+                    k->sendeEncrypted( (char *)&f, 4 );
                 }
                 for( int i = 0; i < sts->teamAnzahl; i++ )
                 {
                     int f = sts->teamFarbe->get( i );
-                    k->sendeEncrypted( (char*)&f, 4 );
+                    k->sendeEncrypted( (char *)&f, 4 );
                 }
                 for( int i = 0; i < sts->teamAnzahl; i++ )
                 {
@@ -1893,7 +1879,7 @@ bool EditorClient::speicherTeamDaten( SpielerTeamStrukturV *sts )
                 for( int i = 0; i < sts->teamAnzahl; i++ )
                 {
                     int g = sts->teamSize->get( i );
-                    k->sendeEncrypted( (char*)&g, 4 );
+                    k->sendeEncrypted( (char *)&g, 4 );
                 }
                 cs.unlock();
                 return 1;
@@ -2061,11 +2047,11 @@ Framework::Bild *EditorClient::deBildLaden( Framework::Text *zDatei, Framework::
                 {
                     int br = 0;
                     int hö = 0;
-                    k->getNachrichtEncrypted( (char*)&br, 4 );
-                    k->getNachrichtEncrypted( (char*)&hö, 4 );
+                    k->getNachrichtEncrypted( (char *)&br, 4 );
+                    k->getNachrichtEncrypted( (char *)&hö, 4 );
                     retB = new Bild();
                     retB->neuBild( br, hö, 0 );
-                    char *buffer = (char*)retB->getBuffer();
+                    char *buffer = (char *)retB->getBuffer();
                     __int64 län = br * hö * 4;
                     if( zF )
                         zF->setAktionAnzahl( län );
@@ -2095,7 +2081,7 @@ Framework::Bild *EditorClient::deBildLaden( Framework::Text *zDatei, Framework::
     }
     cs.unlock();
     if( !ret && retB )
-        retB = retB->release();
+        retB = (Bild *)retB->release();
     if( !retB )
         err = "Unbekannter Fehler";
     return retB;
@@ -2249,9 +2235,9 @@ bool EditorClient::deBildSpeichern( Framework::Text *zDatei, Framework::Text *zN
                 {
                     int br = zBild->getBreite();
                     int hö = zBild->getHeight();
-                    k->sendeEncrypted( (char*)&br, 4 );
-                    k->sendeEncrypted( (char*)&hö, 4 );
-                    char *buffer = (char*)zBild->getBuffer();
+                    k->sendeEncrypted( (char *)&br, 4 );
+                    k->sendeEncrypted( (char *)&hö, 4 );
+                    char *buffer = (char *)zBild->getBuffer();
                     __int64 gr = br * hö * 4;
                     if( zF )
                         zF->setAktionAnzahl( gr );
@@ -2310,7 +2296,7 @@ int EditorClient::deGetDateiListe( Framework::RCArray< Framework::Text > *zNamen
             if( ret == 1 )
             {
                 int anz = 0;
-                k->getNachrichtEncrypted( (char*)&anz, 4 );
+                k->getNachrichtEncrypted( (char *)&anz, 4 );
                 for( int i = 0; i < anz; i++ )
                 {
                     char l = 0;
@@ -2377,7 +2363,7 @@ int EditorClient::deGetBildListe( Framework::Text *zDatei, Framework::RCArray< F
                 if( ret == 1 )
                 {
                     int anz = 0;
-                    k->getNachrichtEncrypted( (char*)&anz, 4 );
+                    k->getNachrichtEncrypted( (char *)&anz, 4 );
                     for( int i = 0; i < anz; i++ )
                     {
                         k->getNachrichtEncrypted( &l, 1 );
@@ -2445,7 +2431,7 @@ int EditorClient::deGetModelListe( Framework::Text *zDatei, Framework::RCArray<
                 if( ret == 1 )
                 {
                     int anz = 0;
-                    k->getNachrichtEncrypted( (char*)&anz, 4 );
+                    k->getNachrichtEncrypted( (char *)&anz, 4 );
                     for( int i = 0; i < anz; i++ )
                     {
                         k->getNachrichtEncrypted( &l, 1 );
@@ -2513,7 +2499,7 @@ int EditorClient::deGetSoundListe( Framework::Text *zDatei, Framework::RCArray<
                 if( ret == 1 )
                 {
                     int anz = 0;
-                    k->getNachrichtEncrypted( (char*)&anz, 4 );
+                    k->getNachrichtEncrypted( (char *)&anz, 4 );
                     for( int i = 0; i < anz; i++ )
                     {
                         k->getNachrichtEncrypted( &l, 1 );
@@ -2745,7 +2731,7 @@ Framework::Model2DData *EditorClient::deModelLaden( Framework::Text *zDatei, Fra
                     if( ret == 1 )
                     {
                         int anz = 0;
-                        k->getNachrichtEncrypted( (char*)&anz, 4 );
+                        k->getNachrichtEncrypted( (char *)&anz, 4 );
                         if( zF )
                             zF->setAktionAnzahl( anz );
                         Array< Polygon2D > *pol = new Array< Polygon2D >();
@@ -2755,7 +2741,7 @@ Framework::Model2DData *EditorClient::deModelLaden( Framework::Text *zDatei, Fra
                             p.schwerpunkt = new Vertex( 0, 0 );
                             p.vertex = new Array< Vertex >();
                             p.tKordinaten = new Array< Vertex >();
-                            k->getNachrichtEncrypted( (char*)&p.transparent, 1 );
+                            k->getNachrichtEncrypted( (char *)&p.transparent, 1 );
                             char nLän = 0;
                             k->getNachrichtEncrypted( &nLän, 1 );
                             char *txt = new char[ nLän + 1 ];
@@ -2765,16 +2751,16 @@ Framework::Model2DData *EditorClient::deModelLaden( Framework::Text *zDatei, Fra
                             p.name = new Text( txt );
                             delete[] txt;
                             int anz2 = 0;
-                            k->getNachrichtEncrypted( (char*)&anz2, 4 );
+                            k->getNachrichtEncrypted( (char *)&anz2, 4 );
                             for( int j = 0; j < anz2; j++ )
                             {
                                 Vertex v;
-                                k->getNachrichtEncrypted( (char*)&v.x, 4 );
-                                k->getNachrichtEncrypted( (char*)&v.y, 4 );
+                                k->getNachrichtEncrypted( (char *)&v.x, 4 );
+                                k->getNachrichtEncrypted( (char *)&v.y, 4 );
                                 *p.schwerpunkt += v * (float)( 1.0 / anz2 );
                                 Vertex t;
-                                k->getNachrichtEncrypted( (char*)&t.x, 4 );
-                                k->getNachrichtEncrypted( (char*)&t.y, 4 );
+                                k->getNachrichtEncrypted( (char *)&t.x, 4 );
+                                k->getNachrichtEncrypted( (char *)&t.y, 4 );
                                 p.vertex->add( v );
                                 p.tKordinaten->add( t );
                             }
@@ -2816,7 +2802,7 @@ Framework::Model2DData *EditorClient::deModelLaden( Framework::Text *zDatei, Fra
 //  Gibt bei misserfolg 0 zurück
 GSL::GSLSoundV *EditorClient::deSoundLaden( GSL::GSLDateiV *file, Framework::Text *zDatei, Framework::Text *zSound, Framework::FBalken *zF )
 {
-    file->setDatei( (char*)"data/tmp/editor/dateien/sounds/tmp.gsl" );
+    file->setDatei( (char *)"data/tmp/editor/dateien/sounds/tmp.gsl" );
     cs.lock();
     if( !k )
     {
@@ -2922,27 +2908,27 @@ bool EditorClient::deModelSpeichern( Framework::Text *zDatei, Framework::Text *z
                         int anz = zData->polygons ? zData->polygons->getEintragAnzahl() : 0;
                         if( zF )
                             zF->setAktionAnzahl( anz );
-                        k->sendeEncrypted( (char*)&anz, 4 );
+                        k->sendeEncrypted( (char *)&anz, 4 );
                         for( int i = 0; i < anz; i++ )
                         {
                             Polygon2D pol = zData->polygons->get( i );
-                            k->sendeEncrypted( (char*)&pol.transparent, 1 );
+                            k->sendeEncrypted( (char *)&pol.transparent, 1 );
                             char nLän = pol.name->getLength();
                             k->sendeEncrypted( &nLän, 1 );
                             if( nLän )
                                 k->sendeEncrypted( pol.name->getText(), nLän );
                             int anz2 = pol.vertex->getEintragAnzahl();
-                            k->sendeEncrypted( (char*)&anz2, 4 );
+                            k->sendeEncrypted( (char *)&anz2, 4 );
                             for( int j = 0; j < anz2; j++ )
                             {
                                 Vertex v = pol.vertex->get( j );
                                 Vertex p;
                                 if( pol.tKordinaten )
                                     p = pol.tKordinaten->hat( j ) ? pol.tKordinaten->get( j ) : Vertex( 0, 0 );
-                                k->sendeEncrypted( (char*)&v.x, 4 );
-                                k->sendeEncrypted( (char*)&v.y, 4 );
-                                k->sendeEncrypted( (char*)&p.x, 4 );
-                                k->sendeEncrypted( (char*)&p.y, 4 );
+                                k->sendeEncrypted( (char *)&v.x, 4 );
+                                k->sendeEncrypted( (char *)&v.y, 4 );
+                                k->sendeEncrypted( (char *)&p.x, 4 );
+                                k->sendeEncrypted( (char *)&p.y, 4 );
                             }
                             if( zF )
                                 zF->aktionPlus();
@@ -3014,9 +3000,9 @@ bool EditorClient::deSoundSpeichern( Framework::Text *zDatei, Framework::Text *z
                         char channels = zData->istMono() ? 1 : 2;
                         k->sendeEncrypted( &channels, 1 );
                         int sample = zData->getSampleRate();
-                        k->sendeEncrypted( (char*)&sample, 4 );
+                        k->sendeEncrypted( (char *)&sample, 4 );
                         __int64 slän = zData->getDatLength();
-                        k->sendeEncrypted( (char*)&slän, 8 );
+                        k->sendeEncrypted( (char *)&slän, 8 );
                         if( zF )
                             zF->setAktionAnzahl( slän );
                         zData->open();
@@ -3079,7 +3065,7 @@ int EditorClient::getVerkaufStatistik( Framework::Array< int > *verkauft, Framew
         if( ret == 1 )
         {
             int kaufAnz = 0;
-            k->getNachrichtEncrypted( (char*)&kaufAnz, 4 );
+            k->getNachrichtEncrypted( (char *)&kaufAnz, 4 );
             char anz = 0;
             k->getNachrichtEncrypted( &anz, 1 );
             for( int i = 0; i < anz; i++ )
@@ -3087,9 +3073,9 @@ int EditorClient::getVerkaufStatistik( Framework::Array< int > *verkauft, Framew
                 int kupfer = 0;
                 int kauf = 0;
                 int games = 0;
-                k->getNachrichtEncrypted( (char*)&kupfer, 4 );
-                k->getNachrichtEncrypted( (char*)&kauf, 4 );
-                k->getNachrichtEncrypted( (char*)&games, 4 );
+                k->getNachrichtEncrypted( (char *)&kupfer, 4 );
+                k->getNachrichtEncrypted( (char *)&kauf, 4 );
+                k->getNachrichtEncrypted( (char *)&games, 4 );
                 einkommen->add( kupfer );
                 verkauft->add( kauf );
                 gespielt->add( games );
@@ -3220,7 +3206,7 @@ bool EditorClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -3281,20 +3267,4 @@ bool EditorClient::istVerbunden() const
 char *EditorClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-EditorServerClient *EditorClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-EditorServerClient *EditorClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 1 - 7
KSGNetwork/EditorClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class EditorClient : public EditorServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -263,7 +262,7 @@ namespace KSGClient
         //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
         bool trenne( bool abmelden ) override;
         // Beginnt eine individuelle Editor Nachricht
-        //  Gibt den Klient zurück, über den mit dem Server kommuniziert werden kann. Im Fehlerfall wird 0 zurückgegeben
+        //  Gibt den Klient ohne reference Counting zurück, über den mit dem Server kommuniziert werden kann. Im Fehlerfall wird 0 zurückgegeben
         //  Der Thread, der diese Methode aufgerufen hat, sollte nach dem Erfolgreichen Aufruf am Ende der Kommunikation mit dem Server endEditorMessage aufrufen
         Network::Klient *beginEditorMessage() override;
         // Beendet eine Editor Nachricht
@@ -274,10 +273,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        EditorServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        EditorServerClient *release() override;
     };
 }

+ 4 - 27
KSGNetwork/ErhaltungClient.cpp

@@ -86,7 +86,7 @@ bool ErhaltungClient::verbinde()
         k->sende( "\0", 1 ); // Verschlüsselung Aktivieren
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -102,7 +102,7 @@ bool ErhaltungClient::verbinde()
                 k->sendeEncrypted( "\3", 1 );
                 k->getNachrichtEncrypted( &serverReturn, 1 );
                 k->trenne();
-                k = k->release();
+                k = (Network::Klient *)k->release();
                 cs.unlock();
                 return 0;
             }
@@ -113,7 +113,7 @@ bool ErhaltungClient::verbinde()
         else
         {
             err = "network error while sending to Erhaltung Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -121,7 +121,7 @@ bool ErhaltungClient::verbinde()
     else
     {
         err = "network error while connecting to Erhaltung Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -149,27 +149,4 @@ bool ErhaltungClient::trenne()
 char *ErhaltungClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-Thread *ErhaltungClient::getThis()
-{
-    return Thread::getThis();
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-Thread *ErhaltungClient::release()
-{
-    if( ref == 2 && run )
-    {
-        if( k )
-        {
-            abmelden();
-            trenne();
-        }
-        warteAufThread( 10000 );
-        ende();
-    }
-    return Thread::release();
 }

+ 0 - 5
KSGNetwork/ErhaltungClient.h

@@ -39,10 +39,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        Thread *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        Thread *release() override;
     };
 }

+ 8 - 24
KSGNetwork/HistorieClient.cpp

@@ -9,8 +9,8 @@ using namespace KSGClient;
 
 // Konstruktor
 HistorieClient::HistorieClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen, int spielId )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -51,7 +51,7 @@ bool HistorieClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -74,7 +74,7 @@ bool HistorieClient::verbinde()
         else
         {
             err = "network error while sending to Historie Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -82,7 +82,7 @@ bool HistorieClient::verbinde()
     else
     {
         err = "network error while connecting to Historie Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -120,7 +120,7 @@ bool HistorieClient::trenne( bool abmelden )
     k->sendeEncrypted( "\3", 1 );
     k->getNachrichtEncrypted( &serverReturn, 1 );
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     return 1;
 }
 
@@ -143,7 +143,7 @@ bool HistorieClient::downloadSpielHistorie()
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&spielId, 4 );
+        k->sendeEncrypted( (char *)&spielId, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -155,7 +155,7 @@ bool HistorieClient::downloadSpielHistorie()
                 pf[ län ] = 0;
                 k->getNachrichtEncrypted( pf, län );
                 __int64 gr = 0;
-                k->getNachrichtEncrypted( (char*)&gr, 8 );
+                k->getNachrichtEncrypted( (char *)&gr, 8 );
                 Text *pfad = new Text( "data/tmp/historie/" );
                 pfad->append( spielId );
                 pfad->append( pf );
@@ -177,7 +177,7 @@ bool HistorieClient::downloadSpielHistorie()
                 d->release();
                 k->getNachrichtEncrypted( &län, 1 );
             }
-            trenne( 0);
+            trenne( 0 );
             cs.unlock();
             return 1;
         }
@@ -206,20 +206,4 @@ bool HistorieClient::downloadSpielHistorie()
 char *HistorieClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-HistorieServerClient *HistorieClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-HistorieServerClient *HistorieClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/HistorieClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class HistorieClient : public HistorieServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -43,10 +42,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        HistorieServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        HistorieServerClient *release() override;
     };
 }

+ 111 - 127
KSGNetwork/InformationClient.cpp

@@ -11,8 +11,8 @@ using namespace KSGClient;
 
 // Konstruktor
 InformationClient::InformationClient( int kId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = kId;
@@ -52,7 +52,7 @@ bool InformationClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -75,7 +75,7 @@ bool InformationClient::verbinde()
         else
         {
             err = "network error while sending to Information Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -83,7 +83,7 @@ bool InformationClient::verbinde()
     else
     {
         err = "network error while connecting to Information Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -121,7 +121,7 @@ bool InformationClient::getInformationText( Framework::Text *txt, int *typ )
         return 0;
     }
     short län = 0;
-    ret = ret & k->getNachrichtEncrypted( (char*)&län, 2 );
+    ret = ret & k->getNachrichtEncrypted( (char *)&län, 2 );
     char *text = new char[ län + 1 ];
     text[ län ] = 0;
     if( län )
@@ -164,7 +164,7 @@ bool InformationClient::istSpielErlaubt( int spielId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&spielId, 4 );
+    k->sendeEncrypted( (char *)&spielId, 4 );
     char ret = 0;
     k->getNachrichtEncrypted( &ret, 1 );
     if( !ret )
@@ -200,7 +200,7 @@ bool InformationClient::istKarteErlaubt( int karteId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&karteId, 4 );
+    k->sendeEncrypted( (char *)&karteId, 4 );
     char ret = 0;
     k->getNachrichtEncrypted( &ret, 1 );
     if( !ret )
@@ -240,7 +240,7 @@ int InformationClient::getKarteId( char *name )
     k->sendeEncrypted( &län, 1 );
     k->sendeEncrypted( name, län );
     int id = 0;
-    k->getNachrichtEncrypted( (char*)&id, 4 );
+    k->getNachrichtEncrypted( (char *)&id, 4 );
     cs.unlock();
     return id;
 }
@@ -276,7 +276,7 @@ int InformationClient::getSpielId( char *name )
     k->sendeEncrypted( &län, 1 );
     k->sendeEncrypted( name, län );
     int id = 0;
-    k->getNachrichtEncrypted( (char*)&id, 4 );
+    k->getNachrichtEncrypted( (char *)&id, 4 );
     cs.unlock();
     return id;
 }
@@ -308,7 +308,7 @@ Framework::Text *InformationClient::getSpielerName( int accountId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&accountId, 4 );
+    k->sendeEncrypted( (char *)&accountId, 4 );
     char län = 0;
     k->getNachrichtEncrypted( &län, 1 );
     char *name = new char[ län + 1 ];
@@ -350,12 +350,12 @@ bool InformationClient::getSpielStatistik( int accountId, int spielId, Framework
         cs.unlock();
         return 0;
     }
-    ret = ret & k->sendeEncrypted( (char*)&accountId, 4 );
-    ret = ret & k->sendeEncrypted( (char*)&spielId, 4 );
+    ret = ret & k->sendeEncrypted( (char *)&accountId, 4 );
+    ret = ret & k->sendeEncrypted( (char *)&spielId, 4 );
     for( int i = 0; i < 10; i++ )
     {
         int tmp = 0;
-        ret = ret & k->getNachrichtEncrypted( (char*)&tmp, 4 );
+        ret = ret & k->getNachrichtEncrypted( (char *)&tmp, 4 );
         werte->add( tmp, i );
     }
     if( !ret )
@@ -391,7 +391,7 @@ Framework::Text *InformationClient::getKarteName( int karteId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&karteId, 4 );
+    k->sendeEncrypted( (char *)&karteId, 4 );
     char län = 0;
     k->getNachrichtEncrypted( &län, 1 );
     char *name = new char[ län + 1 ];
@@ -431,7 +431,7 @@ Framework::Text *InformationClient::getSpielName( int spielId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&spielId, 4 );
+    k->sendeEncrypted( (char *)&spielId, 4 );
     char län = 0;
     k->getNachrichtEncrypted( &län, 1 );
     char *name = new char[ län + 1 ];
@@ -471,7 +471,7 @@ Framework::Text *InformationClient::getChatroomName( int chatroomId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&chatroomId, 4 );
+    k->sendeEncrypted( (char *)&chatroomId, 4 );
     char län = 0;
     k->getNachrichtEncrypted( &län, 1 );
     char *name = new char[ län + 1 ];
@@ -511,9 +511,9 @@ int InformationClient::getSpielId( int karteId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&karteId, 4 );
+    k->sendeEncrypted( (char *)&karteId, 4 );
     int ret = 0;
-    k->getNachrichtEncrypted( (char*)&ret, 4 );
+    k->getNachrichtEncrypted( (char *)&ret, 4 );
     if( !ret )
         err = "Unbekannter Fehler";
     cs.unlock();
@@ -556,7 +556,7 @@ int InformationClient::getAccountId( char *name )
     k->sendeEncrypted( &län, 1 );
     k->sendeEncrypted( name, län );
     int ret = 0;
-    k->getNachrichtEncrypted( (char*)&ret, 4 );
+    k->getNachrichtEncrypted( (char *)&ret, 4 );
     if( !ret )
         err = "Unbekannter Fehler";
     cs.unlock();
@@ -599,7 +599,7 @@ int InformationClient::getChatroomId( char *name )
     k->sendeEncrypted( &län, 1 );
     k->sendeEncrypted( name, län );
     int ret = 0;
-    k->getNachrichtEncrypted( (char*)&ret, 4 );
+    k->getNachrichtEncrypted( (char *)&ret, 4 );
     if( !ret )
         err = "Unbekannter Fehler";
     cs.unlock();
@@ -633,9 +633,9 @@ int InformationClient::getGruppenKarteId( int gruppenId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&gruppenId, 4 );
+    k->sendeEncrypted( (char *)&gruppenId, 4 );
     int id = 0;
-    k->getNachrichtEncrypted( (char*)&id, 4 );
+    k->getNachrichtEncrypted( (char *)&id, 4 );
     if( !id )
         err = "Unbekannter Fehler";
     cs.unlock();
@@ -668,9 +668,9 @@ bool InformationClient::getGruppeSpielerHinzuf
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&gruppeId, 4 );
+    k->sendeEncrypted( (char *)&gruppeId, 4 );
     char sh = 0;
-    k->getNachrichtEncrypted( (char*)&sh, 1 );
+    k->getNachrichtEncrypted( (char *)&sh, 1 );
     cs.unlock();
     return sh == 1;
 }
@@ -702,9 +702,9 @@ int InformationClient::getGruppeAdminId( int gruppeId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&gruppeId, 4 );
+    k->sendeEncrypted( (char *)&gruppeId, 4 );
     int id = 0;
-    k->getNachrichtEncrypted( (char*)&id, 4 );
+    k->getNachrichtEncrypted( (char *)&id, 4 );
     if( !id )
         err = "Unbekannter Fehler";
     cs.unlock();
@@ -739,10 +739,10 @@ int InformationClient::getSpielerPunkte( int accountId, int spielId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&spielId, 4 );
-    k->sendeEncrypted( (char*)&accountId, 4 );
+    k->sendeEncrypted( (char *)&spielId, 4 );
+    k->sendeEncrypted( (char *)&accountId, 4 );
     int punkte = 0;
-    k->getNachrichtEncrypted( (char*)&punkte, 4 );
+    k->getNachrichtEncrypted( (char *)&punkte, 4 );
     cs.unlock();
     return punkte;
 }
@@ -764,18 +764,18 @@ Framework::Array< int > *InformationClient::getAccountSpielArtListe()
     if( ret == 1 )
     {
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         Array< int > *list = new Array< int >();
         for( int i = 0; i < anz; i++ )
         {
             int id = 0;
-            k->getNachrichtEncrypted( (char*)&id, 4 );
+            k->getNachrichtEncrypted( (char *)&id, 4 );
             list->add( id );
         }
         cs.unlock();
         return list;
     }
-    if( ref == 3 )
+    if( ret == 3 )
     {
         k->getNachrichtEncrypted( &ret, 1 );
         char *f = new char[ ret + 1 ];
@@ -819,9 +819,9 @@ int InformationClient::getSpielVersion( int spielId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&spielId, 4 );
+    k->sendeEncrypted( (char *)&spielId, 4 );
     int version = 0;
-    k->getNachrichtEncrypted( (char*)&version, 4 );
+    k->getNachrichtEncrypted( (char *)&version, 4 );
     cs.unlock();
     return version;
 }
@@ -853,7 +853,7 @@ int InformationClient::getKupfer()
         return 0;
     }
     int kupfer = 0;
-    k->getNachrichtEncrypted( (char*)&kupfer, 4 );
+    k->getNachrichtEncrypted( (char *)&kupfer, 4 );
     cs.unlock();
     return kupfer;
 }
@@ -885,9 +885,9 @@ int InformationClient::getDateiGruppeIdVonSpiel( int spielId )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&spielId, 4 );
+    k->sendeEncrypted( (char *)&spielId, 4 );
     int dgId = 0;
-    k->getNachrichtEncrypted( (char*)&dgId, 4 );
+    k->getNachrichtEncrypted( (char *)&dgId, 4 );
     cs.unlock();
     return dgId;
 }
@@ -909,7 +909,7 @@ Framework::Text *InformationClient::getDateiGruppePfad( int dgId )
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&dgId, 4 );
+        k->sendeEncrypted( (char *)&dgId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
         {
@@ -959,20 +959,20 @@ Framework::Array< int > *InformationClient::getAccountKarteListe( int spielId )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&spielId, 4 );
+        k->sendeEncrypted( (char *)&spielId, 4 );
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         Array< int > *list = new Array< int >();
         for( int i = 0; i < anz; i++ )
         {
             int id = 0;
-            k->getNachrichtEncrypted( (char*)&id, 4 );
+            k->getNachrichtEncrypted( (char *)&id, 4 );
             list->add( id );
         }
         cs.unlock();
         return list;
     }
-    if( ref == 3 )
+    if( ret == 3 )
     {
         k->getNachrichtEncrypted( &ret, 1 );
         char *f = new char[ ret + 1 ];
@@ -1019,10 +1019,10 @@ int InformationClient::getDateiGruppeIdVonPfad( char *pfad )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&län, 1 );
-    k->sendeEncrypted( (char*)pfad, län );
+    k->sendeEncrypted( (char *)&län, 1 );
+    k->sendeEncrypted( (char *)pfad, län );
     int dgId = 0;
-    k->getNachrichtEncrypted( (char*)&dgId, 4 );
+    k->getNachrichtEncrypted( (char *)&dgId, 4 );
     cs.unlock();
     return dgId;
 }
@@ -1054,9 +1054,9 @@ int InformationClient::getDateiGruppeVersion( int dg )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&dg, 4 );
+    k->sendeEncrypted( (char *)&dg, 4 );
     int version = 0;
-    k->getNachrichtEncrypted( (char*)&version, 4 );
+    k->getNachrichtEncrypted( (char *)&version, 4 );
     cs.unlock();
     return version;
 }
@@ -1089,17 +1089,17 @@ int InformationClient::getSpielerListe( char *suche, int *seite, int *maxSeite,
     {
         k->sendeEncrypted( &län, 1 );
         k->sendeEncrypted( suche, län );
-        k->sendeEncrypted( (char*)seite, 4 );
+        k->sendeEncrypted( (char *)seite, 4 );
         k->sendeEncrypted( &sortSpalte, 1 );
         k->sendeEncrypted( &rückwärts, 1 );
-        k->getNachrichtEncrypted( (char*)seite, 4 );
-        k->getNachrichtEncrypted( (char*)maxSeite, 4 );
+        k->getNachrichtEncrypted( (char *)seite, 4 );
+        k->getNachrichtEncrypted( (char *)maxSeite, 4 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         for( int i = 0; i < ret; i++ )
         {
             AccountInfo info;
-            k->getNachrichtEncrypted( (char*)&info.id, 4 );
+            k->getNachrichtEncrypted( (char *)&info.id, 4 );
             k->getNachrichtEncrypted( &län, 1 );
             char *txt = new char[ län + 1 ];
             txt[ län ] = 0;
@@ -1169,7 +1169,7 @@ bool InformationClient::getSpielerAktivit
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&accId, 4 );
+        k->sendeEncrypted( (char *)&accId, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -1182,10 +1182,10 @@ bool InformationClient::getSpielerAktivit
                 k->getNachrichtEncrypted( txt, ret );
                 inf.datum = txt;
                 delete[] txt;
-                k->getNachrichtEncrypted( (char*)&inf.stOnline, 8 );
-                k->getNachrichtEncrypted( (char*)&inf.stGespielt, 8 );
-                k->getNachrichtEncrypted( (char*)&inf.anzSpiele, 4 );
-                k->getNachrichtEncrypted( (char*)&inf.anzGewonnen, 4 );
+                k->getNachrichtEncrypted( (char *)&inf.stOnline, 8 );
+                k->getNachrichtEncrypted( (char *)&inf.stGespielt, 8 );
+                k->getNachrichtEncrypted( (char *)&inf.anzSpiele, 4 );
+                k->getNachrichtEncrypted( (char *)&inf.anzGewonnen, 4 );
                 k->getNachrichtEncrypted( &ret, 1 );
                 info->add( inf );
             }
@@ -1224,10 +1224,10 @@ int InformationClient::getAccountKarteSpiele( int account, int karte )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&account, 4 );
-        k->sendeEncrypted( (char*)&karte, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
+        k->sendeEncrypted( (char *)&karte, 4 );
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         cs.unlock();
         return anz;
     }
@@ -1265,10 +1265,10 @@ int InformationClient::getAccountKarteSpieleGewonnen( int account, int karte )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&account, 4 );
-        k->sendeEncrypted( (char*)&karte, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
+        k->sendeEncrypted( (char *)&karte, 4 );
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         cs.unlock();
         return anz;
     }
@@ -1306,8 +1306,8 @@ bool InformationClient::hatAccountKarte( int account, int karte )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&account, 4 );
-        k->sendeEncrypted( (char*)&karte, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
+        k->sendeEncrypted( (char *)&karte, 4 );
         char status = 0;
         k->getNachrichtEncrypted( &status, 1 );
         cs.unlock();
@@ -1347,8 +1347,8 @@ bool InformationClient::hatAccountSpiel( int account, int spiel )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&account, 4 );
-        k->sendeEncrypted( (char*)&spiel, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
+        k->sendeEncrypted( (char *)&spiel, 4 );
         char status = 0;
         k->getNachrichtEncrypted( &status, 1 );
         cs.unlock();
@@ -1389,15 +1389,15 @@ Framework::Array< int > *InformationClient::getAccountKarteGespieltListe( int ac
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&account, 4 );
-        k->sendeEncrypted( (char*)&spielId, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
+        k->sendeEncrypted( (char *)&spielId, 4 );
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         Array< int > *ret = new Array< int >();
         for( int i = 0; i < anz; i++ )
         {
             int val = 0;
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             ret->set( val, i );
         }
         cs.unlock();
@@ -1437,14 +1437,14 @@ Framework::Array< int > *InformationClient::getAccountSpielGespieltListe( int ac
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&account, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         Array< int > *ret = new Array< int >();
         for( int i = 0; i < anz; i++ )
         {
             int val = 0;
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             ret->set( val, i );
         }
         cs.unlock();
@@ -1487,17 +1487,17 @@ bool InformationClient::getSpielPartnerListe( int account, Framework::Array< int
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&account, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             int val = 0;
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             spieler->set( val, i );
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             karten->set( val, i );
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             anzahl->set( val, i );
         }
         cs.unlock();
@@ -1546,16 +1546,16 @@ bool InformationClient::getStatistikListe( int account, int *seite, int *maxSeit
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&account, 4 );
-        k->sendeEncrypted( (char*)seite, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
+        k->sendeEncrypted( (char *)seite, 4 );
         k->sendeEncrypted( &sortSpalte, 1 );
         k->sendeEncrypted( &rückwärts, 1 );
-        k->getNachrichtEncrypted( (char*)seite, 4 );
-        k->getNachrichtEncrypted( (char*)maxSeite, 4 );
+        k->getNachrichtEncrypted( (char *)seite, 4 );
+        k->getNachrichtEncrypted( (char *)maxSeite, 4 );
         int zAnz = 0;
         int sAnz = 0;
-        k->getNachrichtEncrypted( (char*)&zAnz, 4 );
-        k->getNachrichtEncrypted( (char*)&sAnz, 4 );
+        k->getNachrichtEncrypted( (char *)&zAnz, 4 );
+        k->getNachrichtEncrypted( (char *)&sAnz, 4 );
         for( int i = 0; i < zAnz; i++ )
         {
             Array< int > *tmp = new Array< int >();
@@ -1564,7 +1564,7 @@ bool InformationClient::getStatistikListe( int account, int *seite, int *maxSeit
                 if( j != 1 )
                 {
                     int val = 0;
-                    k->getNachrichtEncrypted( (char*)&val, 4 );
+                    k->getNachrichtEncrypted( (char *)&val, 4 );
                     tmp->set( val, j );
                 }
                 else
@@ -1616,14 +1616,14 @@ Array< SpielHistorieDaten > *InformationClient::getSpielHistorieDaten( int accou
     if( ret == 1 )
     {
         Array< SpielHistorieDaten > *daten = new Array< SpielHistorieDaten >();
-        k->sendeEncrypted( (char*)&account, 4 );
+        k->sendeEncrypted( (char *)&account, 4 );
         char anz = 0;
         k->getNachrichtEncrypted( &anz, 1 );
         for( char i = 0; i < anz; i++ )
         {
             SpielHistorieDaten spiel;
-            k->getNachrichtEncrypted( (char*)&spiel.id, 4 );
-            k->getNachrichtEncrypted( (char*)&spiel.karteId, 4 );
+            k->getNachrichtEncrypted( (char *)&spiel.id, 4 );
+            k->getNachrichtEncrypted( (char *)&spiel.karteId, 4 );
             char län = 0;
             k->getNachrichtEncrypted( &län, 1 );
             char *txt = new char[ län + 1 ];
@@ -1674,7 +1674,7 @@ Array< SpielHistorieDaten > *InformationClient::getSpielHistorieDaten( int accou
                 k->getNachrichtEncrypted( txt, län );
             spiel.gewinner = txt;
             delete[] txt;
-            k->getNachrichtEncrypted( (char*)&spiel.sAnzahl, 4 );
+            k->getNachrichtEncrypted( (char *)&spiel.sAnzahl, 4 );
             char tAnz = 0;
             k->getNachrichtEncrypted( &tAnz, 1 );
             for( char j = 0; j < tAnz; j++ )
@@ -1688,7 +1688,7 @@ Array< SpielHistorieDaten > *InformationClient::getSpielHistorieDaten( int accou
                     k->getNachrichtEncrypted( txt, län );
                 team.name = txt;
                 delete[] txt;
-                k->getNachrichtEncrypted( (char*)&team.sAnzahl, 4 );
+                k->getNachrichtEncrypted( (char *)&team.sAnzahl, 4 );
                 k->getNachrichtEncrypted( &län, 1 );
                 txt = new char[ län + 1 ];
                 txt[ län ] = 0;
@@ -1696,7 +1696,7 @@ Array< SpielHistorieDaten > *InformationClient::getSpielHistorieDaten( int accou
                     k->getNachrichtEncrypted( txt, län );
                 team.status = txt;
                 delete[] txt;
-                k->getNachrichtEncrypted( (char*)&team.farbe, 4 );
+                k->getNachrichtEncrypted( (char *)&team.farbe, 4 );
                 char sAnz = 0;
                 k->getNachrichtEncrypted( &sAnz, 1 );
                 for( char ki = 0; ki < sAnz; ki++ )
@@ -1710,7 +1710,7 @@ Array< SpielHistorieDaten > *InformationClient::getSpielHistorieDaten( int accou
                         k->getNachrichtEncrypted( txt, län );
                     spieler.name = txt;
                     delete[] txt;
-                    k->getNachrichtEncrypted( (char*)&spieler.punkte, 4 );
+                    k->getNachrichtEncrypted( (char *)&spieler.punkte, 4 );
                     k->getNachrichtEncrypted( &län, 1 );
                     txt = new char[ län + 1 ];
                     txt[ län ] = 0;
@@ -1718,7 +1718,7 @@ Array< SpielHistorieDaten > *InformationClient::getSpielHistorieDaten( int accou
                         k->getNachrichtEncrypted( txt, län );
                     spieler.status = txt;
                     delete[] txt;
-                    k->getNachrichtEncrypted( (char*)&spieler.farbe, 4 );
+                    k->getNachrichtEncrypted( (char *)&spieler.farbe, 4 );
                     team.spieler.add( spieler );
                 }
                 spiel.teams.add( team );
@@ -1762,11 +1762,11 @@ HistorieServerClient *InformationClient::createHistorieServerClient( int spielId
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&spielId, 4 );
-        k->getNachrichtEncrypted( (char*)&ret, 1 );
+        k->sendeEncrypted( (char *)&spielId, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 1 );
         if( ret == 1 )
         {
-            k->getNachrichtEncrypted( (char*)&port, 4 );
+            k->getNachrichtEncrypted( (char *)&port, 4 );
             char län = 0;
             k->getNachrichtEncrypted( &län, 1 );
             char *ip = new char[ län + 1 ];
@@ -1812,8 +1812,8 @@ bool InformationClient::hatRecht( int recht )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&recht, 4 );
-        k->getNachrichtEncrypted( (char*)&ret, 1 );
+        k->sendeEncrypted( (char *)&recht, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 1 );
     }
     if( ret == 3 )
     {
@@ -1861,11 +1861,11 @@ int InformationClient::getKartenListe( char *filter, char sortSpalte, char abste
         k->sendeEncrypted( filter, län );
         k->sendeEncrypted( &sortSpalte, 1 );
         k->sendeEncrypted( &absteigend, 1 );
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         for( int i = 0; i < ret; i++ )
         {
             int val = 0;
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             kId->set( val, i );
             k->getNachrichtEncrypted( &län, 1 );
             char *txt = new char[ län + 1 ];
@@ -1881,11 +1881,11 @@ int InformationClient::getKartenListe( char *filter, char sortSpalte, char abste
                 k->getNachrichtEncrypted( txt, län );
             sName->set( new Text( txt ), i );
             delete[] txt;
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             kupfer->set( val, i );
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             verkauft->set( val, i );
-            k->getNachrichtEncrypted( (char*)&val, 4 );
+            k->getNachrichtEncrypted( (char *)&val, 4 );
             maxSpieler->set( val, i );
         }
     }
@@ -1920,12 +1920,12 @@ EditorServerClient *InformationClient::createEditorServerClient( int karteId )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&karteId, 4 );
-        k->getNachrichtEncrypted( (char*)&ret, 1 );
+        k->sendeEncrypted( (char *)&karteId, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 1 );
         if( ret == 1 )
         {
             int port = 0;
-            k->getNachrichtEncrypted( (char*)&port, 4 );
+            k->getNachrichtEncrypted( (char *)&port, 4 );
             char län = 0;
             k->getNachrichtEncrypted( &län, 1 );
             char *ip = new char[ län + 1 ];
@@ -1971,12 +1971,12 @@ KartenServerClient *InformationClient::createKartenServerClient( int karteId )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&karteId, 4 );
-        k->getNachrichtEncrypted( (char*)&ret, 1 );
+        k->sendeEncrypted( (char *)&karteId, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 1 );
         if( ret == 1 )
         {
             int port = 0;
-            k->getNachrichtEncrypted( (char*)&port, 4 );
+            k->getNachrichtEncrypted( (char *)&port, 4 );
             char län = 0;
             k->getNachrichtEncrypted( &län, 1 );
             char *ip = new char[ län + 1 ];
@@ -2071,7 +2071,7 @@ bool InformationClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -2087,20 +2087,4 @@ bool InformationClient::istVerbunden() const
 char *InformationClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-InformationServerClient *InformationClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-InformationServerClient *InformationClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 2 - 8
KSGNetwork/InformationClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class InformationClient : public InformationServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -184,7 +183,7 @@ namespace KSGClient
         //  namen: Enthält nach erfolgreichem Aufruf die Namen der Spiele
         //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
         bool getStatistikListe( int account, int *seite, int *maxSeite, char sortSpalte, char rückwärts,
-                                        Framework::RCArray< Framework::Array< int > > *werte, Framework::RCArray< Framework::Text > *namen ) override;
+                                Framework::RCArray< Framework::Array< int > > *werte, Framework::RCArray< Framework::Text > *namen ) override;
         // Gibt eine Liste mit den Daten der letzten 20 Spiele von einem Account zurück
         //  account: Die Id des Accounts
         //  Gibt bei misserfolg 0 zurück
@@ -207,7 +206,7 @@ namespace KSGClient
                                                 //  verkauft: Eine Liste, welche nach einem erfolgreichen Aufruf die Anzahl der Verkäufe der Karten enthält
                                                 //  maxSpieler: Eine Liste, welche nach einem erfolgreichen Aufruf die Maximalen Spieleranzahlen der Karten enthält
         int getKartenListe( char *filter, char sortSpalte, char absteigend, Framework::Array< int > *kId, Framework::RCArray< Framework::Text > *kName, Framework::RCArray< Framework::Text > *sName,
-                                    Framework::Array< int > *kupfer, Framework::Array< int > *verkauft, Framework::Array< int > *maxSpieler ) override;
+                            Framework::Array< int > *kupfer, Framework::Array< int > *verkauft, Framework::Array< int > *maxSpieler ) override;
         // Erzeugt einen Client zu dem Editor Server von der Karte mit einer bestimmten Id
         //  karteId: Die Id der Karte
         //  Gibt bei misserfolg 0 zurück
@@ -229,10 +228,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        InformationServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        InformationServerClient *release() override;
     };
 }

+ 19 - 36
KSGNetwork/KartenClient.cpp

@@ -10,8 +10,8 @@ using namespace KSGClient;
 
 // Konstruktor
 KartenClient::KartenClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -51,7 +51,7 @@ bool KartenClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -74,7 +74,7 @@ bool KartenClient::verbinde()
         else
         {
             err = "network error while sending to Karten Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -82,7 +82,7 @@ bool KartenClient::verbinde()
     else
     {
         err = "network error while connecting to Karten Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -107,7 +107,7 @@ bool KartenClient::downloadKarte( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 2 )
         { // update
@@ -118,7 +118,7 @@ bool KartenClient::downloadKarte( int id )
         else if( ret == 1 )
         {
             int anz = 0;
-            k->getNachrichtEncrypted( (char*)&anz, 4 );
+            k->getNachrichtEncrypted( (char *)&anz, 4 );
             for( int i = 0; i < anz; i++ )
             {
                 char län = 0;
@@ -129,7 +129,7 @@ bool KartenClient::downloadKarte( int id )
                 pf[ län ] = 0;
                 k->getNachrichtEncrypted( pf, län );
                 __int64 größe = 0;
-                k->getNachrichtEncrypted( (char*)&größe, 8 );
+                k->getNachrichtEncrypted( (char *)&größe, 8 );
                 char *buffer = new char[ 2048 ];
                 Text pfad = "data/tmp/Karten/";
                 pfad += id;
@@ -185,7 +185,7 @@ bool KartenClient::downloadKarteTitel( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 2 )
         { // update
@@ -196,7 +196,7 @@ bool KartenClient::downloadKarteTitel( int id )
         else if( ret == 1 )
         {
             __int64 größe = 0;
-            k->getNachrichtEncrypted( (char*)&größe, 8 );
+            k->getNachrichtEncrypted( (char *)&größe, 8 );
             char *buffer = new char[ 2048 ];
             Text pfad = "data/tmp/Karten/";
             pfad += id;
@@ -249,7 +249,7 @@ bool KartenClient::downloadKarteBeschreibung( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 2 )
         { // update
@@ -260,7 +260,7 @@ bool KartenClient::downloadKarteBeschreibung( int id )
         else if( ret == 1 )
         {
             __int64 größe = 0;
-            k->getNachrichtEncrypted( (char*)&größe, 8 );
+            k->getNachrichtEncrypted( (char *)&größe, 8 );
             char *buffer = new char[ 2048 ];
             Text pfad = "data/tmp/Karten/";
             pfad += id;
@@ -313,7 +313,7 @@ bool KartenClient::downloadKarteMinimap( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 2 )
         { // update
@@ -324,7 +324,7 @@ bool KartenClient::downloadKarteMinimap( int id )
         else if( ret == 1 )
         {
             __int64 größe = 0;
-            k->getNachrichtEncrypted( (char*)&größe, 8 );
+            k->getNachrichtEncrypted( (char *)&größe, 8 );
             char *buffer = new char[ 2048 ];
             Text pfad = "data/tmp/Karten/";
             pfad += id;
@@ -377,7 +377,7 @@ bool KartenClient::downloadKarteLadebild( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 2 )
         { // update
@@ -388,7 +388,7 @@ bool KartenClient::downloadKarteLadebild( int id )
         else if( ret == 1 )
         {
             __int64 größe = 0;
-            k->getNachrichtEncrypted( (char*)&größe, 8 );
+            k->getNachrichtEncrypted( (char *)&größe, 8 );
             char *buffer = new char[ 2048 ];
             Text pfad = "data/tmp/Karten/";
             pfad += id;
@@ -434,18 +434,18 @@ bool KartenClient::keepAlive()
     char res = 0;
     if( !cs.tryLock() )
         return 1;
-    Framework::logLine( (char*)"Verbindungstest zum Karten Server..." );
+    Framework::logLine( (char *)"Verbindungstest zum Karten Server..." );
     bool ok = k->sendeEncrypted( "\x5", 1 );
     ok &= k->getNachrichtEncrypted( &res, 1 );
     cs.unlock();
     if( res != 1 || !ok )
     {
-        Framework::logLine( ( char* )"Verbindungsabbruch." );
+        Framework::logLine( (char *)"Verbindungsabbruch." );
         trenne( 0 );
         err = "Verbindung unterbrochen: 'Keep Alive' nicht erfolgreich.";
     }
     else
-        Framework::logLine( ( char* )"Verbindung besteht." );
+        Framework::logLine( (char *)"Verbindung besteht." );
     return res == 1;
 }
 
@@ -493,7 +493,7 @@ bool KartenClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -509,21 +509,4 @@ bool KartenClient::istVerbunden() const
 char *KartenClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-KartenServerClient *KartenClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-KartenServerClient *KartenClient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/KartenClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class KartenClient : public KartenServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -61,10 +60,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        KartenServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        KartenServerClient *release() override;
     };
 }

+ 31 - 47
KSGNetwork/LoginClient.cpp

@@ -10,8 +10,8 @@ using namespace KSGClient;
 
 // Konstruktor
 LoginClient::LoginClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -31,7 +31,7 @@ LoginClient::~LoginClient()
 
 // verbindet sich mit dem zugewiesenen Login Server
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
-bool LoginClient::verbinde() 
+bool LoginClient::verbinde()
 {
     cs.lock();
     if( k )
@@ -52,7 +52,7 @@ bool LoginClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -75,7 +75,7 @@ bool LoginClient::verbinde()
         else
         {
             err = "network error while sending to Login Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -83,7 +83,7 @@ bool LoginClient::verbinde()
     else
     {
         err = "network error while connecting to Login Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -94,7 +94,7 @@ bool LoginClient::verbinde()
 // Der Client wird beim Serversystem in einen Account eingeloggt
 //  gibt bei Erfolg 1 zurück, 2 falls en anderer Client in dem Account eingeloggt ist, 0 sonnst
 //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
-int LoginClient::login( const char *name, const char *pass ) 
+int LoginClient::login( const char *name, const char *pass )
 {
     cs.lock();
     if( !k )
@@ -109,10 +109,10 @@ int LoginClient::login( const char *name, const char *pass )
     if( serverReturn == 1 )
     {
         unsigned char byte = (unsigned char)textLength( name );
-        k->sendeEncrypted( (char*)&byte, 1 );
+        k->sendeEncrypted( (char *)&byte, 1 );
         k->sendeEncrypted( name, byte );
         byte = (unsigned char)textLength( pass );
-        k->sendeEncrypted( (char*)&byte, 1 );
+        k->sendeEncrypted( (char *)&byte, 1 );
         k->sendeEncrypted( pass, byte );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 1 )
@@ -125,12 +125,12 @@ int LoginClient::login( const char *name, const char *pass )
             localIp[ 1 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 0 ) + 1, 10 );
             localIp[ 2 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 1 ) + 1, 10 );
             localIp[ 3 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 2 ) + 1, 10 );
-            addresse = addresse->release();
-            k->sendeEncrypted( (char*)&localIp, 4 );
+            addresse = (Text *)addresse->release();
+            k->sendeEncrypted( (char *)&localIp, 4 );
             byte = textLength( host );
-            k->sendeEncrypted( (char*)&byte, 1 );
+            k->sendeEncrypted( (char *)&byte, 1 );
             k->sendeEncrypted( host, byte );
-            k->getNachrichtEncrypted( (char*)&accountId, 4 );
+            k->getNachrichtEncrypted( (char *)&accountId, 4 );
             cs.unlock();
             return 1;
         }
@@ -174,18 +174,18 @@ bool LoginClient::kick( const char *name, const char *pass, const char *geheim )
     if( serverReturn == 1 )
     {
         unsigned char byte = (unsigned char)textLength( name );
-        k->sendeEncrypted( (char*)&byte, 1 );
+        k->sendeEncrypted( (char *)&byte, 1 );
         k->sendeEncrypted( name, byte );
         byte = (unsigned char)textLength( pass );
-        k->sendeEncrypted( (char*)&byte, 1 );
+        k->sendeEncrypted( (char *)&byte, 1 );
         k->sendeEncrypted( pass, byte );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         if( serverReturn == 2 )
         {
             unsigned char byte = (unsigned char)textLength( geheim );
-            k->sendeEncrypted( (char*)&byte, 1 );
+            k->sendeEncrypted( (char *)&byte, 1 );
             k->sendeEncrypted( geheim, byte );
-            k->getNachrichtEncrypted( (char*)&serverReturn, 1 );
+            k->getNachrichtEncrypted( (char *)&serverReturn, 1 );
             if( !serverReturn )
             {
                 cs.unlock();
@@ -202,12 +202,12 @@ bool LoginClient::kick( const char *name, const char *pass, const char *geheim )
             localIp[ 1 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 0 ) + 1, 10 );
             localIp[ 2 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 1 ) + 1, 10 );
             localIp[ 3 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 2 ) + 1, 10 );
-            addresse = addresse->release();
-            k->sendeEncrypted( (char*)&localIp, 4 );
+            addresse = (Text *)addresse->release();
+            k->sendeEncrypted( (char *)&localIp, 4 );
             byte = textLength( host );
-            k->sendeEncrypted( (char*)&byte, 1 );
+            k->sendeEncrypted( (char *)&byte, 1 );
             k->sendeEncrypted( host, byte );
-            k->getNachrichtEncrypted( (char*)&accountId, 4 );
+            k->getNachrichtEncrypted( (char *)&accountId, 4 );
             return 1;
         }
     }
@@ -231,7 +231,7 @@ bool LoginClient::kick( const char *name, const char *pass, const char *geheim )
 // logt den Account aus
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
 //  sollte erst aufgerufen werden, nachdem ein erfolgreicher Aufruf von login erfolg ist
-bool LoginClient::logout() 
+bool LoginClient::logout()
 {
     cs.lock();
     if( !k )
@@ -245,7 +245,7 @@ bool LoginClient::logout()
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 1 )
     {
-        k->sendeEncrypted( (char*)&accountId, 4 );
+        k->sendeEncrypted( (char *)&accountId, 4 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
     }
     if( serverReturn == 3 )
@@ -267,7 +267,7 @@ bool LoginClient::logout()
 // Erhält die Verbindung aufrecht
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
 //  Sollte während einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
-bool LoginClient::keepAlive() 
+bool LoginClient::keepAlive()
 {
     char res = 0;
     if( !cs.tryLock() )
@@ -278,24 +278,24 @@ bool LoginClient::keepAlive()
         cs.unlock();
         return 0;
     }
-    Framework::logLine( (char*)"Verbindungstest zum Login Server..." );
+    Framework::logLine( (char *)"Verbindungstest zum Login Server..." );
     bool ok = k->sendeEncrypted( "\x7", 1 );
     ok &= k->getNachrichtEncrypted( &res, 1 );
     cs.unlock();
     if( res != 1 || !ok )
     {
-        Framework::logLine( ( char* )"Verbindungsabbruch." );
+        Framework::logLine( (char *)"Verbindungsabbruch." );
         trenne( 0 );
     }
     else
-        Framework::logLine( ( char* )"Verbindung besteht." );
+        Framework::logLine( (char *)"Verbindung besteht." );
     return res == 1;
 }
 
 // Trennt die Verbindung zum Server
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
 //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
-bool LoginClient::trenne( bool abmelden ) 
+bool LoginClient::trenne( bool abmelden )
 {
     cs.lock();
     verbinde();
@@ -336,43 +336,27 @@ bool LoginClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
 
 // Gibt 1 zurück, falls der Client verbunden ist, 0 sonst
-bool LoginClient::istVerbunden() const 
+bool LoginClient::istVerbunden() const
 {
     return k != 0;
 }
 
 // Gibt die Id des Accounts zurück, in den sich der Client eingeloggt hat.
 //  sollte erst aufgerufen werden, nachdem ein erfolgreicher Aufruf von login erfolg ist
-int LoginClient::getAccountId() const 
+int LoginClient::getAccountId() const
 {
     return accountId;
 }
 
 // gibt den Letzten Fehlertext zuück
 //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
-char *LoginClient::getLetzterFehler() const 
+char *LoginClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-LoginServerClient *LoginClient::getThis() 
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-LoginServerClient *LoginClient::release() 
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/LoginClient.h

@@ -9,7 +9,6 @@ namespace KSGClient
     class LoginClient : public LoginServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -54,10 +53,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        LoginServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        LoginServerClient *release() override;
     };
 }

+ 19 - 35
KSGNetwork/MainClient.cpp

@@ -18,8 +18,8 @@ using namespace KSGClient;
 
 // Konstruktor
 MainClient::MainClient()
+    : ReferenceCounter()
 {
-    ref = 1;
     port = 0;
     cId = 0;
     k = 0;
@@ -28,8 +28,8 @@ MainClient::MainClient()
 }
 
 MainClient::MainClient( char *ip, unsigned short port, int klientId, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -86,9 +86,9 @@ bool MainClient::registerSSL( char *ip, unsigned short port )
     }
     if( byte == 1 )
     {
-        klientSSL->getNachricht( (char*)&this->port, 4 );
-        klientSSL->getNachricht( (char*)&cId, 4 );
-        klientSSL->getNachricht( (char*)&keyLen, 1 );
+        klientSSL->getNachricht( (char *)&this->port, 4 );
+        klientSSL->getNachricht( (char *)&cId, 4 );
+        klientSSL->getNachricht( (char *)&keyLen, 1 );
         this->ip = ip;
         if( keyLen )
         {
@@ -126,13 +126,13 @@ bool MainClient::connect()
     if( !k->verbinde( port, ip ) )
     {
         err = "error while trying to connect to Main Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
     k->sende( "\0", 1 ); // Verschlüsselung aktivieren
     k->sendeEncrypted( "\1", 1 );
-    k->sendeEncrypted( (char*)&cId, 4 );
+    k->sendeEncrypted( (char *)&cId, 4 );
     char serverReturn = 0;
     k->getNachrichtEncrypted( &serverReturn, 1 );
     if( serverReturn == 3 )
@@ -147,7 +147,7 @@ bool MainClient::connect()
         k->sendeEncrypted( "\3", 1 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
         k->trenne();
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -181,7 +181,7 @@ ErhaltungServerClient *MainClient::createErhaltungServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -232,7 +232,7 @@ PatchServerClient *MainClient::createPatchServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -283,7 +283,7 @@ NewsServerClient *MainClient::createNewsServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -334,7 +334,7 @@ RegisterServerClient *MainClient::createRegisterServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -385,7 +385,7 @@ LoginServerClient *MainClient::createLoginServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -436,7 +436,7 @@ InformationServerClient *MainClient::createInformationServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -487,7 +487,7 @@ ChatServerClient *MainClient::createChatServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -538,7 +538,7 @@ ShopServerClient *MainClient::createShopServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -589,7 +589,7 @@ AnmeldungServerClient *MainClient::createAnmeldungServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -640,7 +640,7 @@ MinigameServerClient *MainClient::createMinigameServerClient()
         unsigned char lsIp[ 4 ];
         k->getNachrichtEncrypted( (char *)lsIp, 4 );
         unsigned short lsPort = 0;
-        k->getNachrichtEncrypted( (char*)&lsPort, 2 );
+        k->getNachrichtEncrypted( (char *)&lsPort, 2 );
         Framework::Text ipT;
         ipT += (int)lsIp[ 0 ];
         ipT += ".";
@@ -683,7 +683,7 @@ bool MainClient::disconnect()
     k->sendeEncrypted( "\3", 1 );
     k->getNachrichtEncrypted( &serverReturn, 1 );
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -768,20 +768,4 @@ unsigned char MainClient::getKeyLen() const
 char *MainClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-MainServerClient *MainClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-MainServerClient *MainClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/MainClient.h

@@ -8,7 +8,6 @@ namespace KSGClient
     class MainClient : public MainServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -81,10 +80,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        MainServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        MainServerClient *release() override;
     };
 }

+ 15 - 31
KSGNetwork/MinigameClient.cpp

@@ -9,8 +9,8 @@ using namespace KSGClient;
 
 // Konstruktor
 MinigameClient::MinigameClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -50,7 +50,7 @@ bool MinigameClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -73,7 +73,7 @@ bool MinigameClient::verbinde()
         else
         {
             err = "network error while sending to Minigame Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -81,7 +81,7 @@ bool MinigameClient::verbinde()
     else
     {
         err = "network error while connecting to Minigame Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -108,7 +108,7 @@ int MinigameClient::getAccountId()
     if( ret == 1 )
     {
         int acc = 0;
-        k->getNachrichtEncrypted( (char*)&acc, 4 );
+        k->getNachrichtEncrypted( (char *)&acc, 4 );
         cs.unlock();
         return acc;
     }
@@ -148,7 +148,7 @@ Text *MinigameClient::getAccountName( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -199,7 +199,7 @@ Text *MinigameClient::getSecret()
     if( ret == 1 )
     {
         unsigned char l = 0;
-        k->getNachrichtEncrypted( (char*)&l, 1 );
+        k->getNachrichtEncrypted( (char *)&l, 1 );
         char *buff = new char[ l + 1 ];
         buff[ l ] = 0;
         k->getNachrichtEncrypted( buff, l );
@@ -250,7 +250,7 @@ int MinigameClient::getMinigameOptionList( char *mName, Framework::RCArray< Fram
         k->sendeEncrypted( &l, 1 );
         k->sendeEncrypted( mName, l );
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             k->getNachrichtEncrypted( &l, 1 );
@@ -307,11 +307,11 @@ int MinigameClient::getMinigameBestscoreList( char *mName, Framework::Array< int
         k->sendeEncrypted( &l, 1 );
         k->sendeEncrypted( mName, l );
         int anz = 0;
-        k->getNachrichtEncrypted( (char*)&anz, 4 );
+        k->getNachrichtEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             int score = 0;
-            k->getNachrichtEncrypted( (char*)&score, 4 );
+            k->getNachrichtEncrypted( (char *)&score, 4 );
             zScore->add( score );
             k->getNachrichtEncrypted( &l, 1 );
             char *player = new char[ l + 1 ];
@@ -374,7 +374,7 @@ int MinigameClient::getMinigameOptionBestscore( char *mName, char *oName, Framew
         k->sendeEncrypted( &l, 1 );
         k->sendeEncrypted( oName, l );
         int score = 0;
-        k->getNachrichtEncrypted( (char*)&score, 4 );
+        k->getNachrichtEncrypted( (char *)&score, 4 );
         k->getNachrichtEncrypted( &l, 1 );
         char *player = new char[ l + 1 ];
         player[ l ] = 0;
@@ -430,14 +430,14 @@ bool MinigameClient::reportEndOfGame( char *mName, char *oName, int score, Frame
         l = (char)textLength( oName );
         k->sendeEncrypted( &l, 1 );
         k->sendeEncrypted( oName, l );
-        k->sendeEncrypted( (char*)&score, 4 );
+        k->sendeEncrypted( (char *)&score, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
             int size = (int)zCapture->getSize();
             if( !zCapture->istOffen() )
                 zCapture->open( Datei::Style::lesen );
-            k->sendeEncrypted( (char*)&size, 4 );
+            k->sendeEncrypted( (char *)&size, 4 );
             char *buffer = new char[ 2048 ];
             while( size > 0 )
             {
@@ -509,7 +509,7 @@ Framework::Datei *MinigameClient::downloadGameCapture( char *mName, char *oName
             capture->erstellen();
             capture->open( Datei::Style::schreiben );
             int size = 0;
-            k->getNachrichtEncrypted( (char*)&size, 4 );
+            k->getNachrichtEncrypted( (char *)&size, 4 );
             char *buffer = new char[ 2048 ];
             while( size > 0 )
             {
@@ -610,7 +610,7 @@ bool MinigameClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -626,20 +626,4 @@ bool MinigameClient::istVerbunden() const
 char *MinigameClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-MinigameServerClient *MinigameClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-MinigameServerClient *MinigameClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/MinigameClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class MinigameClient : public MinigameServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -77,10 +76,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        MinigameServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        MinigameServerClient *release() override;
     };
 }

+ 12 - 28
KSGNetwork/NewsClient.cpp

@@ -10,8 +10,8 @@ using namespace KSGClient;
 
 // Konstruktor
 NewsClient::NewsClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -51,7 +51,7 @@ bool NewsClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -74,7 +74,7 @@ bool NewsClient::verbinde()
         else
         {
             err = "network error while sending to Patch Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -82,7 +82,7 @@ bool NewsClient::verbinde()
     else
     {
         err = "network error while connecting to Patch Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -115,11 +115,11 @@ bool NewsClient::ladeSeite( char *name )
         {
             Text *pfad = new Text( "data/tmp/news/" );
             pfad->append( name );
-            if( DateiExistiert( pfad->getThis() ) )
-                DateiRemove( pfad->getThis() );
+            if( DateiExistiert( pfad->getText() ) )
+                DateiRemove( pfad->getText() );
             pfad->append( "/" );
             int dAnz = 0;
-            k->getNachrichtEncrypted( (char*)&dAnz, 4 );
+            k->getNachrichtEncrypted( (char *)&dAnz, 4 );
             for( int i = 0; i < dAnz; i++ )
             {
                 char nLän = 0;
@@ -135,7 +135,7 @@ bool NewsClient::ladeSeite( char *name )
                 d->erstellen();
                 d->open( Datei::Style::schreiben );
                 __int64 dGr = 0;
-                k->getNachrichtEncrypted( (char*)&dGr, 8 );
+                k->getNachrichtEncrypted( (char *)&dGr, 8 );
                 char buffer[ 2048 ];
                 while( dGr > 0 )
                 {
@@ -179,17 +179,17 @@ bool NewsClient::keepAlive()
     char res = 0;
     if( !cs.tryLock() )
         return 1;
-    Framework::logLine( ( char* )"Verbindungstest zum News Server..." );
+    Framework::logLine( (char *)"Verbindungstest zum News Server..." );
     bool ok = k->sendeEncrypted( "\x6", 1 );
     ok &= k->getNachrichtEncrypted( &res, 1 );
     cs.unlock();
     if( res != 1 || !ok )
     {
-        Framework::logLine( ( char* )"Verbindungsabbruch." );
+        Framework::logLine( (char *)"Verbindungsabbruch." );
         trenne( 0 );
     }
     else
-        Framework::logLine( ( char* )"Verbindung besteht." );
+        Framework::logLine( (char *)"Verbindung besteht." );
     return res == 1;
 }
 
@@ -237,7 +237,7 @@ bool NewsClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -253,20 +253,4 @@ bool NewsClient::istVerbunden() const
 char *NewsClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-NewsServerClient *NewsClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-NewsServerClient *NewsClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/NewsClient.h

@@ -9,7 +9,6 @@ namespace KSGClient
     class NewsClient : public NewsServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -44,11 +43,6 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        NewsServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        NewsServerClient *release() override;
     };
 
 };

+ 28 - 44
KSGNetwork/PatchClient.cpp

@@ -12,8 +12,8 @@ using namespace KSGClient;
 
 // Konstruktor
 PatchClient::PatchClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -54,7 +54,7 @@ bool PatchClient::verbinde()
         k->sende( "\0", 1 ); // Verschlüsselung Aktivieren
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
 #ifdef _X64
             k->sendeEncrypted( "\2", 1 ); // 64 Bit Client
 #else
@@ -82,7 +82,7 @@ bool PatchClient::verbinde()
         else
         {
             err = "network error while sending to Patch Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -90,7 +90,7 @@ bool PatchClient::verbinde()
     else
     {
         err = "network error while connecting to Patch Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -126,7 +126,7 @@ Framework::KSGTDatei *PatchClient::getDateiGruppenListe()
     }
     Framework::KSGTDatei *dgtb = new Framework::KSGTDatei();
     int id = 0;
-    k->getNachrichtEncrypted( (char*)&id, 4 );
+    k->getNachrichtEncrypted( (char *)&id, 4 );
     while( id )
     {
         RCArray< Text > *zeile = new RCArray< Text >();
@@ -134,7 +134,7 @@ Framework::KSGTDatei *PatchClient::getDateiGruppenListe()
         idT->append( id );
         zeile->set( idT, 0 );
         int län = 0;
-        k->getNachrichtEncrypted( (char*)&län, 4 );
+        k->getNachrichtEncrypted( (char *)&län, 4 );
         char *pfad = new char[ län + 1 ];
         pfad[ län ] = 0;
         if( län )
@@ -142,13 +142,13 @@ Framework::KSGTDatei *PatchClient::getDateiGruppenListe()
         zeile->set( new Text( pfad ), 1 );
         delete[] pfad;
         int vs = 0;
-        k->getNachrichtEncrypted( (char*)&vs, 4 );
+        k->getNachrichtEncrypted( (char *)&vs, 4 );
         Text *vsT = new Text();
         vsT->append( vs );
         zeile->set( vsT, 2 );
         dgtb->addZeile( 3, zeile );
         zeile->release();
-        k->getNachrichtEncrypted( (char*)&id, 4 );
+        k->getNachrichtEncrypted( (char *)&id, 4 );
     }
     k->sendeEncrypted( "\1", 1 );
     cs.unlock();
@@ -182,7 +182,7 @@ Framework::KSGTDatei *PatchClient::getDateiListe( int gruppe )
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&gruppe, 4 );
+    k->sendeEncrypted( (char *)&gruppe, 4 );
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 3 )
     { // error
@@ -198,7 +198,7 @@ Framework::KSGTDatei *PatchClient::getDateiListe( int gruppe )
     }
     KSGTDatei *dtb = new KSGTDatei();
     int län = 0;
-    k->getNachrichtEncrypted( (char*)&län, 4 );
+    k->getNachrichtEncrypted( (char *)&län, 4 );
     while( län )
     {
         RCArray< Text > *zeile = new RCArray< Text >();
@@ -209,15 +209,15 @@ Framework::KSGTDatei *PatchClient::getDateiListe( int gruppe )
         zeile->set( new Text( pfad ), 1 );
         delete[] pfad;
         int vs = 0;
-        k->getNachrichtEncrypted( (char*)&vs, 4 );
+        k->getNachrichtEncrypted( (char *)&vs, 4 );
         Text *vsT = new Text();
         vsT->append( vs );
         zeile->set( vsT, 2 );
         dtb->addZeile( 3, zeile );
         zeile->release();
-        k->getNachrichtEncrypted( (char*)&län, 4 );
+        k->getNachrichtEncrypted( (char *)&län, 4 );
     }
-    k->getNachrichtEncrypted( (char*)&län, 4 );
+    k->getNachrichtEncrypted( (char *)&län, 4 );
     while( län )
     {
         RCArray< Text > *zeile = new RCArray< Text >();
@@ -229,7 +229,7 @@ Framework::KSGTDatei *PatchClient::getDateiListe( int gruppe )
         delete[] pfad;
         dtb->addZeile( 2, zeile );
         zeile->release();
-        k->getNachrichtEncrypted( (char*)&län, 4 );
+        k->getNachrichtEncrypted( (char *)&län, 4 );
     }
     cs.unlock();
     return dtb;
@@ -262,7 +262,7 @@ __int64 PatchClient::getDateiGr
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&gruppe, 4 );
+    k->sendeEncrypted( (char *)&gruppe, 4 );
     ret = 0;
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 3 )
@@ -280,10 +280,10 @@ __int64 PatchClient::getDateiGr
     if( ret == 2 )
     { // verweis auf anderen Server
         int p = 0;
-        k->getNachrichtEncrypted( (char*)&p, 4 );
+        k->getNachrichtEncrypted( (char *)&p, 4 );
         port = (unsigned short)p;
         int län = 0;
-        k->getNachrichtEncrypted( (char*)&län, 4 );
+        k->getNachrichtEncrypted( (char *)&län, 4 );
         delete[]ip;
         ip = new char[ län + 1 ];
         ip[ län ] = 0;
@@ -304,10 +304,10 @@ __int64 PatchClient::getDateiGr
         return getDateiGröße( gruppe, pfad );
     }
     int län = textLength( pfad );
-    k->sendeEncrypted( (char*)&län, 4 );
+    k->sendeEncrypted( (char *)&län, 4 );
     k->sendeEncrypted( pfad, län );
     __int64 größe = 0;
-    k->getNachrichtEncrypted( (char*)&größe, 8 );
+    k->getNachrichtEncrypted( (char *)&größe, 8 );
     cs.unlock();
     return größe;
 }
@@ -363,7 +363,7 @@ bool PatchClient::downloadDatei( int gruppe, __int64 *start, const char *pfad, c
         cs.unlock();
         return 0;
     }
-    k->sendeEncrypted( (char*)&gruppe, 4 );
+    k->sendeEncrypted( (char *)&gruppe, 4 );
     ret = 0;
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 3 )
@@ -383,10 +383,10 @@ bool PatchClient::downloadDatei( int gruppe, __int64 *start, const char *pfad, c
     if( ret == 2 )
     { // verweis auf anderen Server
         int p = 0;
-        k->getNachrichtEncrypted( (char*)&p, 4 );
+        k->getNachrichtEncrypted( (char *)&p, 4 );
         port = (unsigned short)p;
         int län = 0;
-        k->getNachrichtEncrypted( (char*)&län, 4 );
+        k->getNachrichtEncrypted( (char *)&län, 4 );
         delete[] ip;
         ip = new char[ län + 1 ];
         ip[ län ] = 0;
@@ -413,12 +413,12 @@ bool PatchClient::downloadDatei( int gruppe, __int64 *start, const char *pfad, c
         return downloadDatei( gruppe, start, pfad, zielPfad, zFb, abbruch, maxbps );
     }
     int län = textLength( pfad );
-    k->sendeEncrypted( (char*)&län, 4 );
+    k->sendeEncrypted( (char *)&län, 4 );
     k->sendeEncrypted( pfad, län );
-    k->sendeEncrypted( (char*)start, 8 );
+    k->sendeEncrypted( (char *)start, 8 );
     char *bytes = new char[ 2048 ];
     unsigned short byteLän = 0;
-    k->getNachricht( (char*)&byteLän, 2 );
+    k->getNachricht( (char *)&byteLän, 2 );
     ZeitMesser *zMess = new ZeitMesser();
     zMess->messungStart();
     if( byteLän )
@@ -440,13 +440,13 @@ bool PatchClient::downloadDatei( int gruppe, __int64 *start, const char *pfad, c
                     zielD->close();
                     zielD->release();
                     k->trenne();
-                    k = k->release();
+                    k = (Network::Klient *)k->release();
                     delete[] bytes;
                     zMess->release();
                     cs.unlock();
                     return 1;
                 }
-                k->getNachricht( (char*)&byteLän, 2 ); // sendelänge empfangen
+                k->getNachricht( (char *)&byteLän, 2 ); // sendelänge empfangen
                 if( !byteLän )
                     break;
             }
@@ -530,7 +530,7 @@ bool PatchClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -552,20 +552,4 @@ int PatchClient::getDownload() const
 char *PatchClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-PatchServerClient *PatchClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-PatchServerClient *PatchClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/PatchClient.h

@@ -8,7 +8,6 @@ namespace KSGClient
     class PatchClient : public PatchServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -57,10 +56,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        PatchServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        PatchServerClient *release() override;
     };
 }

+ 33 - 49
KSGNetwork/RegisterClient.cpp

@@ -11,8 +11,8 @@ using namespace KSGClient;
 
 // Konstruktor
 RegisterClient::RegisterClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -31,7 +31,7 @@ RegisterClient::~RegisterClient()
 
 // verbindet ich mit dem Register Server
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
-bool RegisterClient::verbinde() 
+bool RegisterClient::verbinde()
 {
     cs.lock();
     if( k )
@@ -52,7 +52,7 @@ bool RegisterClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -75,7 +75,7 @@ bool RegisterClient::verbinde()
         else
         {
             err = "network error while sending to Register Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -83,7 +83,7 @@ bool RegisterClient::verbinde()
     else
     {
         err = "network error while connecting to Patch Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -100,7 +100,7 @@ bool RegisterClient::verbinde()
 //  jahr: Das Jahr des Geburtsdatums
 //  monat: Der Monat des Geburtstages
 //  tag: Der Tag des Geburtstages
-bool RegisterClient::accountErstellen( const char *name, const char *pass, const char *geheim, const char *eMail, unsigned short jahr, char monat, char tag ) 
+bool RegisterClient::accountErstellen( const char *name, const char *pass, const char *geheim, const char *eMail, unsigned short jahr, char monat, char tag )
 {
     cs.lock();
     if( !k )
@@ -120,12 +120,12 @@ bool RegisterClient::accountErstellen( const char *name, const char *pass, const
             (unsigned char)textLength( geheim ),
             (unsigned char)textLength( eMail )
         };
-        k->sendeEncrypted( (char*)län, 4 );
+        k->sendeEncrypted( (char *)län, 4 );
         k->sendeEncrypted( name, län[ 0 ] );
         k->sendeEncrypted( pass, län[ 1 ] );
         k->sendeEncrypted( geheim, län[ 2 ] );
         k->sendeEncrypted( eMail, län[ 3 ] );
-        k->sendeEncrypted( (char*)&jahr, 2 );
+        k->sendeEncrypted( (char *)&jahr, 2 );
         k->sendeEncrypted( &monat, 1 );
         k->sendeEncrypted( &tag, 1 );
         k->getNachrichtEncrypted( &serverReturn, 1 );
@@ -157,7 +157,7 @@ bool RegisterClient::accountErstellen( const char *name, const char *pass, const
 //  name: Der Login Name des Accounts
 //  pass: Das Login Passwort des Accounts
 //  geheim: Das Geheimnis des Accounts
-bool RegisterClient::accountLöschen( const char *name, const char *pass, const char *geheim ) 
+bool RegisterClient::accountLöschen( const char *name, const char *pass, const char *geheim )
 {
     cs.lock();
     if( !k )
@@ -176,7 +176,7 @@ bool RegisterClient::accountL
             (unsigned char)textLength( pass ),
             (unsigned char)textLength( geheim )
         };
-        k->sendeEncrypted( (char*)län, 3 );
+        k->sendeEncrypted( (char *)län, 3 );
         k->sendeEncrypted( name, län[ 0 ] );
         k->sendeEncrypted( pass, län[ 1 ] );
         k->sendeEncrypted( geheim, län[ 2 ] );
@@ -210,7 +210,7 @@ bool RegisterClient::accountL
 //  pass: Das Login Passwort des Accounts
 //  geheim: Das Geheimnis des Accounts
 //  nPass: Das neue Passwort des Accounts
-bool RegisterClient::passwortÄndern( const char *name, const char *pass, const char *geheim, const char *nPass ) 
+bool RegisterClient::passwortÄndern( const char *name, const char *pass, const char *geheim, const char *nPass )
 {
     cs.lock();
     if( !k )
@@ -230,7 +230,7 @@ bool RegisterClient::passwort
             (unsigned char)textLength( nPass ),
             (unsigned char)textLength( geheim )
         };
-        k->sendeEncrypted( (char*)län, 4 );
+        k->sendeEncrypted( (char *)län, 4 );
         k->sendeEncrypted( name, län[ 0 ] );
         k->sendeEncrypted( pass, län[ 1 ] );
         k->sendeEncrypted( nPass, län[ 2 ] );
@@ -265,7 +265,7 @@ bool RegisterClient::passwort
 //  pass: Das Login Passwort des Accounts
 //  geheim: Das Geheimnis des Accounts
 //  nEMail: Die neue EMail Adresse
-bool RegisterClient::eMailÄndern( const char *name, const char *pass, const char *geheim, const char *nEMail ) 
+bool RegisterClient::eMailÄndern( const char *name, const char *pass, const char *geheim, const char *nEMail )
 {
     cs.lock();
     if( !k )
@@ -286,7 +286,7 @@ bool RegisterClient::eMail
             (unsigned char)textLength( geheim ),
             (unsigned char)textLength( nEMail )
         };
-        k->sendeEncrypted( (char*)län, 4 );
+        k->sendeEncrypted( (char *)län, 4 );
         k->sendeEncrypted( name, län[ 0 ] );
         k->sendeEncrypted( pass, län[ 1 ] );
         k->sendeEncrypted( geheim, län[ 2 ] );
@@ -321,7 +321,7 @@ bool RegisterClient::eMail
 //  pass: Das Login Passwort des Accounts
 //  geheim: Das Geheimnis des Accounts
 //  nGeheim: Das neue Geheimnis
-bool RegisterClient::geheimnisÄndern( const char *name, const char *pass, const char *geheim, const char *nGeheim ) 
+bool RegisterClient::geheimnisÄndern( const char *name, const char *pass, const char *geheim, const char *nGeheim )
 {
     cs.lock();
     if( !k )
@@ -342,7 +342,7 @@ bool RegisterClient::geheimnis
             (unsigned char)textLength( geheim ),
             (unsigned char)textLength( nGeheim )
         };
-        k->sendeEncrypted( (char*)län, 4 );
+        k->sendeEncrypted( (char *)län, 4 );
         k->sendeEncrypted( name, län[ 0 ] );
         k->sendeEncrypted( pass, län[ 1 ] );
         k->sendeEncrypted( geheim, län[ 2 ] );
@@ -375,7 +375,7 @@ bool RegisterClient::geheimnis
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
 //  pass: Das Login Passwort des Accounts
 //  geheim: Das Geheimnis des Accounts
-bool RegisterClient::nameVergessen( const char *pass, const char *geheim ) 
+bool RegisterClient::nameVergessen( const char *pass, const char *geheim )
 {
     cs.lock();
     if( !k )
@@ -394,7 +394,7 @@ bool RegisterClient::nameVergessen( const char *pass, const char *geheim )
             (unsigned char)textLength( pass ),
             (unsigned char)textLength( geheim )
         };
-        k->sendeEncrypted( (char*)län, 2 );
+        k->sendeEncrypted( (char *)län, 2 );
         k->sendeEncrypted( pass, län[ 0 ] );
         k->sendeEncrypted( geheim, län[ 1 ] );
         k->getNachrichtEncrypted( &serverReturn, 1 );
@@ -425,7 +425,7 @@ bool RegisterClient::nameVergessen( const char *pass, const char *geheim )
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
 //  name: Der Login Name des Accounts
 //  geheim: Das Geheimnis des Accounts
-bool RegisterClient::passwortVergessen( const char *name, const char *geheim ) 
+bool RegisterClient::passwortVergessen( const char *name, const char *geheim )
 {
     cs.lock();
     if( !k )
@@ -444,7 +444,7 @@ bool RegisterClient::passwortVergessen( const char *name, const char *geheim )
             (unsigned char)textLength( name ),
             (unsigned char)textLength( geheim )
         };
-        k->sendeEncrypted( (char*)län, 2 );
+        k->sendeEncrypted( (char *)län, 2 );
         k->sendeEncrypted( name, län[ 0 ] );
         k->sendeEncrypted( geheim, län[ 1 ] );
         k->getNachrichtEncrypted( &serverReturn, 1 );
@@ -475,7 +475,7 @@ bool RegisterClient::passwortVergessen( const char *name, const char *geheim )
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
 //  name: Der Login Name des Accounts
 //  pass: Das Login Passwort des Accounts
-bool RegisterClient::geheimnisVergessen( const char *name, const char *pass ) 
+bool RegisterClient::geheimnisVergessen( const char *name, const char *pass )
 {
     cs.lock();
     if( !k )
@@ -494,7 +494,7 @@ bool RegisterClient::geheimnisVergessen( const char *name, const char *pass )
             (unsigned char)textLength( name ),
             (unsigned char)textLength( pass )
         };
-        k->sendeEncrypted( (char*)län, 2 );
+        k->sendeEncrypted( (char *)län, 2 );
         k->sendeEncrypted( name, län[ 0 ] );
         k->sendeEncrypted( pass, län[ 1 ] );
         k->getNachrichtEncrypted( &serverReturn, 1 );
@@ -527,7 +527,7 @@ bool RegisterClient::geheimnisVergessen( const char *name, const char *pass )
 //  pass: Das Login Passwort des Accounts
 //  geheim: Das Geheimnis des Accounts
 //  eMail: Ein Zeiger auf eine Zeichenkette. Diese wird bei einem Erfolgreichen Aufruf auf die EMail Adresse gesetzt und muss manuell mit delete[] gelöscht werden
-bool RegisterClient::eMailVergessen( const char *name, const char *pass, const char *geheim, char **eMail ) 
+bool RegisterClient::eMailVergessen( const char *name, const char *pass, const char *geheim, char **eMail )
 {
     cs.lock();
     if( !k )
@@ -547,7 +547,7 @@ bool RegisterClient::eMailVergessen( const char *name, const char *pass, const c
             (unsigned char)textLength( pass ),
             (unsigned char)textLength( geheim )
         };
-        k->sendeEncrypted( (char*)län, 3 );
+        k->sendeEncrypted( (char *)län, 3 );
         k->sendeEncrypted( name, län[ 0 ] );
         k->sendeEncrypted( pass, län[ 1 ] );
         k->sendeEncrypted( geheim, län[ 2 ] );
@@ -555,7 +555,7 @@ bool RegisterClient::eMailVergessen( const char *name, const char *pass, const c
         if( serverReturn == 1 )
         {
             unsigned char len = 0;
-            k->getNachrichtEncrypted( (char*)&len, 1 );
+            k->getNachrichtEncrypted( (char *)&len, 1 );
             char *mail = new char[ len + 1 ];
             mail[ len ] = 0;
             k->getNachrichtEncrypted( mail, len );
@@ -584,31 +584,31 @@ bool RegisterClient::eMailVergessen( const char *name, const char *pass, const c
 // Erhält die Verbindung aufrecht
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
 //  Sollte während einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
-bool RegisterClient::keepAlive() 
+bool RegisterClient::keepAlive()
 {
     if( !k )
         return 0;
     char res = 0;
     if( !cs.tryLock() )
         return 1;
-    Framework::logLine( (char*)"Verbindungstest zum Register Server..." );
+    Framework::logLine( (char *)"Verbindungstest zum Register Server..." );
     bool ok = k->sendeEncrypted( "\xF", 1 );
     ok &= k->getNachrichtEncrypted( &res, 1 );
     cs.unlock();
     if( res != 1 || !ok )
     {
-        Framework::logLine( ( char* )"Verbindungsabbruch." );
+        Framework::logLine( (char *)"Verbindungsabbruch." );
         trenne( 0 );
     }
     else
-        Framework::logLine( ( char* )"Verbindung besteht." );
+        Framework::logLine( (char *)"Verbindung besteht." );
     return res == 1;
 }
 
 // Trennt die Verbindung zum Server
 //  Gibt 1 zurück, falls der Vorgang erfolgreich ist, 0 sonnst
 //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
-bool RegisterClient::trenne( bool abmelden ) 
+bool RegisterClient::trenne( bool abmelden )
 {
     cs.lock();
     verbinde();
@@ -649,36 +649,20 @@ bool RegisterClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
 
 // Gibt 1 zurück, falls der Client verbunden ist, 0 sonst
-bool RegisterClient::istVerbunden() const 
+bool RegisterClient::istVerbunden() const
 {
     return k != 0;
 }
 
 // gibt den Letzten Fehlertext zuück
 //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
-char *RegisterClient::getLetzterFehler() const 
+char *RegisterClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-RegisterServerClient *RegisterClient::getThis() 
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-RegisterServerClient *RegisterClient::release() 
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/RegisterServer.h

@@ -9,7 +9,6 @@ namespace KSGClient
     class RegisterClient : public RegisterServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -99,10 +98,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        RegisterServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        RegisterServerClient *release() override;
     };
 }

+ 53 - 70
KSGNetwork/ShopClient.cpp

@@ -10,8 +10,8 @@ using namespace KSGClient;
 
 // Konstruktor
 ShopClient::ShopClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -51,7 +51,7 @@ bool ShopClient::verbinde()
     {
         if( k->sendeEncrypted( "\1", 1 ) )
         {
-            k->sendeEncrypted( (char*)&cId, 4 );
+            k->sendeEncrypted( (char *)&cId, 4 );
             char serverReturn = 0;
             k->getNachrichtEncrypted( &serverReturn, 1 );
             if( serverReturn == 3 )
@@ -74,7 +74,7 @@ bool ShopClient::verbinde()
         else
         {
             err = "network error while sending to Shop Server";
-            k = k->release();
+            k = (Network::Klient *)k->release();
             cs.unlock();
             return 0;
         }
@@ -82,7 +82,7 @@ bool ShopClient::verbinde()
     else
     {
         err = "network error while connecting to Shop Server";
-        k = k->release();
+        k = (Network::Klient *)k->release();
         cs.unlock();
         return 0;
     }
@@ -115,12 +115,12 @@ Framework::Array< int > *ShopClient::suchSpiele( const char *suche )
         if( ret == 1 )
         {
             int anz = 0;
-            k->getNachrichtEncrypted( (char*)&anz, 4 );
+            k->getNachrichtEncrypted( (char *)&anz, 4 );
             Array< int > *ret = new Array< int >();
             for( int i = 0; i < anz; i++ )
             {
                 int w = 0;
-                k->getNachrichtEncrypted( (char*)&w, 4 );
+                k->getNachrichtEncrypted( (char *)&w, 4 );
                 ret->add( w );
             }
             cs.unlock();
@@ -161,7 +161,7 @@ bool ShopClient::ladeSpielTitel( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -173,7 +173,7 @@ bool ShopClient::ladeSpielTitel( int id )
             dat->erstellen();
             dat->open( Datei::Style::schreiben );
             __int64 gr = 0;
-            k->getNachrichtEncrypted( (char*)&gr, 8 );
+            k->getNachrichtEncrypted( (char *)&gr, 8 );
             char bytes[ 2048 ];
             while( gr > 0 )
             {
@@ -188,14 +188,14 @@ bool ShopClient::ladeSpielTitel( int id )
         if( ret == 2 )
         { // Verweis auf anderen ShopServer
             char län = 0;
-            k->getNachrichtEncrypted( (char*)&port, 4 );
+            k->getNachrichtEncrypted( (char *)&port, 4 );
             k->getNachrichtEncrypted( &län, 1 );
             delete[] ip;
             ip = new char[ län + 1 ];
             k->getNachrichtEncrypted( ip, län );
             ip[ län ] = 0;
             k->trenne();
-            k = k->release();
+            k = (Network::Klient *)k->release();
             if( !verbinde() )
             {
                 err = "Fehler beim Verbinden mit zuständigen Shop Server.";
@@ -239,7 +239,7 @@ bool ShopClient::ladeSpielSeite( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -247,7 +247,7 @@ bool ShopClient::ladeSpielSeite( int id )
             pf->append( id );
             pf->append( "/" );
             int anz = 0;
-            k->getNachrichtEncrypted( (char*)&anz, 4 );
+            k->getNachrichtEncrypted( (char *)&anz, 4 );
             for( int i = 0; i < anz; i++ )
             {
                 char län = 0;
@@ -263,7 +263,7 @@ bool ShopClient::ladeSpielSeite( int id )
                 d->erstellen();
                 d->open( Datei::Style::schreiben );
                 __int64 gr = 0;
-                k->getNachrichtEncrypted( (char*)&gr, 8 );
+                k->getNachrichtEncrypted( (char *)&gr, 8 );
                 char bytes[ 2048 ];
                 while( gr > 0 )
                 {
@@ -280,14 +280,14 @@ bool ShopClient::ladeSpielSeite( int id )
         if( ret == 2 )
         { // Verweis auf anderen ShopServer
             char län = 0;
-            k->getNachrichtEncrypted( (char*)&port, 4 );
+            k->getNachrichtEncrypted( (char *)&port, 4 );
             k->getNachrichtEncrypted( &län, 1 );
             delete[] ip;
             ip = new char[ län + 1 ];
             k->getNachrichtEncrypted( ip, län );
             ip[ län ] = 0;
             k->trenne();
-            k = k->release();
+            k = (Network::Klient *)k->release();
             if( !verbinde() )
             {
                 err = "Fehler beim Verbinden mit zuständigen Shop Server.";
@@ -330,9 +330,9 @@ int ShopClient::getSpielBesitzStatus( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         cs.unlock();
         return ret;
     }
@@ -369,9 +369,9 @@ int ShopClient::getSpielTestversion( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         cs.unlock();
         return ret;
     }
@@ -408,9 +408,9 @@ int ShopClient::istSpielErwerbbar( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         cs.unlock();
         return ret;
     }
@@ -448,10 +448,10 @@ int ShopClient::getSpielPreis( int id, bool testVersion )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
-        k->sendeEncrypted( (char*)&testVersion, 1 );
+        k->sendeEncrypted( (char *)&id, 4 );
+        k->sendeEncrypted( (char *)&testVersion, 1 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         cs.unlock();
         return ret;
     }
@@ -489,8 +489,8 @@ bool ShopClient::spielErwerben( int spielId, bool testVersion )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&spielId, 4 );
-        k->sendeEncrypted( (char*)&testVersion, 1 );
+        k->sendeEncrypted( (char *)&spielId, 4 );
+        k->sendeEncrypted( (char *)&testVersion, 1 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -534,7 +534,7 @@ Framework::Array< int > *ShopClient::suchKarten( const char *suche, int spielId
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&spielId, 4 );
+        k->sendeEncrypted( (char *)&spielId, 4 );
         k->sendeEncrypted( &län, 1 );
         if( län )
             k->sendeEncrypted( suche, län );
@@ -542,12 +542,12 @@ Framework::Array< int > *ShopClient::suchKarten( const char *suche, int spielId
         if( ret == 1 )
         {
             int anz = 0;
-            k->getNachrichtEncrypted( (char*)&anz, 4 );
+            k->getNachrichtEncrypted( (char *)&anz, 4 );
             Array< int > *ret = new Array< int >();
             for( int i = 0; i < anz; i++ )
             {
                 int w = 0;
-                k->getNachrichtEncrypted( (char*)&w, 4 );
+                k->getNachrichtEncrypted( (char *)&w, 4 );
                 ret->add( w );
             }
             cs.unlock();
@@ -588,7 +588,7 @@ bool ShopClient::ladeKarteTitel( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -600,7 +600,7 @@ bool ShopClient::ladeKarteTitel( int id )
             dat->erstellen();
             dat->open( Datei::Style::schreiben );
             __int64 gr = 0;
-            k->getNachrichtEncrypted( (char*)&gr, 8 );
+            k->getNachrichtEncrypted( (char *)&gr, 8 );
             char bytes[ 2048 ];
             while( gr > 0 )
             {
@@ -615,14 +615,14 @@ bool ShopClient::ladeKarteTitel( int id )
         if( ret == 2 )
         { // Verweis auf anderen ShopServer
             char län = 0;
-            k->getNachrichtEncrypted( (char*)&port, 4 );
+            k->getNachrichtEncrypted( (char *)&port, 4 );
             k->getNachrichtEncrypted( &län, 1 );
             delete[] ip;
             ip = new char[ län + 1 ];
             k->getNachrichtEncrypted( ip, län );
             ip[ län ] = 0;
             k->trenne();
-            k = k->release();
+            k = (Network::Klient *)k->release();
             if( !verbinde() )
             {
                 err = "Fehler beim Verbinden mit zuständigen Shop Server.";
@@ -666,7 +666,7 @@ bool ShopClient::ladeKarteSeite( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -674,7 +674,7 @@ bool ShopClient::ladeKarteSeite( int id )
             pf->append( id );
             pf->append( "/" );
             int anz = 0;
-            k->getNachrichtEncrypted( (char*)&anz, 4 );
+            k->getNachrichtEncrypted( (char *)&anz, 4 );
             for( int i = 0; i < anz; i++ )
             {
                 char län = 0;
@@ -690,7 +690,7 @@ bool ShopClient::ladeKarteSeite( int id )
                 d->erstellen();
                 d->open( Datei::Style::schreiben );
                 __int64 gr = 0;
-                k->getNachrichtEncrypted( (char*)&gr, 8 );
+                k->getNachrichtEncrypted( (char *)&gr, 8 );
                 char bytes[ 2048 ];
                 while( gr > 0 )
                 {
@@ -707,14 +707,14 @@ bool ShopClient::ladeKarteSeite( int id )
         if( ret == 2 )
         { // Verweis auf anderen ShopServer
             char län = 0;
-            k->getNachrichtEncrypted( (char*)&port, 4 );
+            k->getNachrichtEncrypted( (char *)&port, 4 );
             k->getNachrichtEncrypted( &län, 1 );
             delete[] ip;
             ip = new char[ län + 1 ];
             k->getNachrichtEncrypted( ip, län );
             ip[ län ] = 0;
             k->trenne();
-            k = k->release();
+            k = (Network::Klient *)k->release();
             if( !verbinde() )
             {
                 err = "Fehler beim Verbinden mit zuständigen Shop Server.";
@@ -757,9 +757,9 @@ int ShopClient::getKarteBesitzStatus( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         cs.unlock();
         return ret;
     }
@@ -796,9 +796,9 @@ int ShopClient::getKarteTestversion( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         cs.unlock();
         return ret;
     }
@@ -835,9 +835,9 @@ int ShopClient::istKarteErwerbbar( int id )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
+        k->sendeEncrypted( (char *)&id, 4 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         cs.unlock();
         return ret;
     }
@@ -875,10 +875,10 @@ int ShopClient::getKartePreis( int id, bool testVersion )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&id, 4 );
-        k->sendeEncrypted( (char*)&testVersion, 1 );
+        k->sendeEncrypted( (char *)&id, 4 );
+        k->sendeEncrypted( (char *)&testVersion, 1 );
         int ret = 0;
-        k->getNachrichtEncrypted( (char*)&ret, 4 );
+        k->getNachrichtEncrypted( (char *)&ret, 4 );
         cs.unlock();
         return ret;
     }
@@ -916,8 +916,8 @@ bool ShopClient::karteErwerben( int karteId, bool testVersion )
     k->getNachrichtEncrypted( &ret, 1 );
     if( ret == 1 )
     {
-        k->sendeEncrypted( (char*)&karteId, 4 );
-        k->sendeEncrypted( (char*)&testVersion, 1 );
+        k->sendeEncrypted( (char *)&karteId, 4 );
+        k->sendeEncrypted( (char *)&testVersion, 1 );
         k->getNachrichtEncrypted( &ret, 1 );
         if( ret == 1 )
         {
@@ -952,17 +952,17 @@ bool ShopClient::keepAlive()
     char res = 0;
     if( !cs.tryLock() )
         return 1;
-    Framework::logLine( ( char* )"Verbindungstest zum Shop Server..." );
+    Framework::logLine( (char *)"Verbindungstest zum Shop Server..." );
     bool ok = k->sendeEncrypted( "\x15", 1 );
     ok &= k->getNachrichtEncrypted( &res, 1 );
     cs.unlock();
     if( res != 1 || !ok )
     {
-        Framework::logLine( ( char* )"Verbindungsabbruch." );
+        Framework::logLine( (char *)"Verbindungsabbruch." );
         trenne( 0 );
     }
     else
-        Framework::logLine( (char*)"Verbindung besteht." );
+        Framework::logLine( (char *)"Verbindung besteht." );
     return res == 1;
 }
 
@@ -1010,7 +1010,7 @@ bool ShopClient::trenne( bool abmelden )
         delete[] msg;
     }
     k->trenne();
-    k = k->release();
+    k = (Network::Klient *)k->release();
     cs.unlock();
     return 1;
 }
@@ -1026,21 +1026,4 @@ bool ShopClient::istVerbunden() const
 char *ShopClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-ShopServerClient *ShopClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-ShopServerClient *ShopClient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/ShopClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class ShopClient : public ShopServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -100,10 +99,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        ShopServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        ShopServerClient *release() override;
     };
 }

+ 35 - 51
KSGNetwork/SpielClient.cpp

@@ -8,8 +8,8 @@ using namespace KSGClient;
 
 // Konstruktor
 SpielClient::SpielClient( int klientId, unsigned short port, char *ip, char *key, unsigned char keyLen )
+    : ReferenceCounter()
 {
-    ref = 1;
     this->ip = ip;
     this->port = port;
     cId = klientId;
@@ -52,7 +52,7 @@ bool SpielClient::verbinde()
         if( senden->sendeEncrypted( "\1", 1 ) )
         {
             char serverReturn = 0;
-            senden->sendeEncrypted( (char*)&cId, 4 );
+            senden->sendeEncrypted( (char *)&cId, 4 );
             char ret = 0;
             senden->getNachrichtEncrypted( &ret, 1 );
             if( ret != 1 )
@@ -70,7 +70,7 @@ bool SpielClient::verbinde()
                 senden->sendeEncrypted( "\3", 1 );
                 senden->getNachrichtEncrypted( &serverReturn, 1 );
                 senden->trenne();
-                senden = senden->release();
+                senden = (Network::Klient *)senden->release();
                 err = "Server akzeptiert den Klient nicht.";
                 cs.unlock();
                 return 0;
@@ -90,7 +90,7 @@ bool SpielClient::verbinde()
             if( empfangen->verbinde( senden->getServerPort(), senden->getServerIp() ) )
             {
                 empfangen->sendeEncrypted( "\1", 1 );
-                empfangen->sendeEncrypted( (char*)&cId, 4 );
+                empfangen->sendeEncrypted( (char *)&cId, 4 );
                 char res = 0;
                 empfangen->getNachrichtEncrypted( &res, 1 );
                 if( res == 3 )
@@ -115,9 +115,9 @@ bool SpielClient::verbinde()
                     char serverReturn = 0;
                     senden->getNachrichtEncrypted( &serverReturn, 1 );
                     senden->trenne();
-                    senden = senden->release();
+                    senden = (Network::Klient *)senden->release();
                     empfangen->trenne();
-                    empfangen = empfangen->release();
+                    empfangen = (Network::Klient *)empfangen->release();
                     return 0;
                 }
                 cs.unlock();
@@ -125,12 +125,12 @@ bool SpielClient::verbinde()
             }
             else
             {
-                empfangen = empfangen->release();
+                empfangen = (Network::Klient *)empfangen->release();
                 senden->sendeEncrypted( "\3", 1 );
                 char serverReturn = 0;
                 senden->getNachrichtEncrypted( &serverReturn, 1 );
                 senden->trenne();
-                senden = senden->release();
+                senden = (Network::Klient *)senden->release();
                 err = "Der dir zugewiesene Spiel Server kann dir keine Nachrichten senden.";
                 cs.unlock();
                 return 0;
@@ -139,7 +139,7 @@ bool SpielClient::verbinde()
         else
         {
             senden->trenne();
-            senden = senden->release();
+            senden = (Network::Klient *)senden->release();
             err = "Der dir zugewiesene Spiel Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut.";
             cs.unlock();
             return 0;
@@ -148,7 +148,7 @@ bool SpielClient::verbinde()
     else
     {
         err = "Der dir zugewiesene Spiel Server antwortet nicht. Bitte versuche es Später erneut.";
-        senden = senden->release();
+        senden = (Network::Klient *)senden->release();
         cs.unlock();
         return 0;
     }
@@ -218,7 +218,7 @@ bool SpielClient::spielErstelltTeamWechseln( int team )
         cs.unlock();
         return 0;
     }
-    senden->sendeEncrypted( (char*)&team, 4 );
+    senden->sendeEncrypted( (char *)&team, 4 );
     senden->getNachrichtEncrypted( &ret, 1 );
     if( ret != 1 )
         err = "Fehler beim wechseln des Teams.";
@@ -315,7 +315,7 @@ bool SpielClient::setLadenProzent( int prozent )
     senden->getNachrichtEncrypted( &ret, 1 );
     if( ret )
     {
-        senden->sendeEncrypted( (char*)&prozent, 4 );
+        senden->sendeEncrypted( (char *)&prozent, 4 );
         senden->getNachrichtEncrypted( &ret, 1 );
     }
     if( ret != 1 )
@@ -358,7 +358,7 @@ bool SpielClient::spielNachricht( short l
         return 0;
     }
     senden->sendeEncrypted( "\xB", 1 );
-    senden->sende( (char*)&län, 2 );
+    senden->sende( (char *)&län, 2 );
     senden->sende( bytes, län );
     cs.unlock();
     return 1;
@@ -382,7 +382,7 @@ bool SpielClient::statistikNachricht( short l
     senden->getNachrichtEncrypted( &ret, 1 );
     if( ret )
     {
-        senden->sendeEncrypted( (char*)&län, 2 );
+        senden->sendeEncrypted( (char *)&län, 2 );
         senden->sendeEncrypted( bytes, län );
         senden->getNachrichtEncrypted( &ret, 1 );
     }
@@ -428,7 +428,7 @@ bool SpielClient::getNextMessage( SpielServerNachricht &nachricht )
             if( 1 )
             {
                 unsigned char länge = 0;
-                empfangen->getNachrichtEncrypted( (char*)&länge, 1 );
+                empfangen->getNachrichtEncrypted( (char *)&länge, 1 );
                 char *txt = new char[ länge + 1 ];
                 txt[ länge ] = 0;
                 empfangen->getNachrichtEncrypted( txt, länge );
@@ -442,18 +442,18 @@ bool SpielClient::getNextMessage( SpielServerNachricht &nachricht )
             empfangen->getNachrichtEncrypted( &nachricht.sekunden, 1 );
             break;
         case 6: // SpielErstellt Initialisierung
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.sts->spielerAnzahl, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.sts->teamAnzahl, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.sts->spielerAnzahl, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.sts->teamAnzahl, 4 );
             for( int i = 0; i < nachricht.sts->spielerAnzahl; i++ )
             {
                 int farbe = 0;
-                empfangen->getNachrichtEncrypted( (char*)&farbe, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&farbe, 4 );
                 nachricht.sts->spielerFarbe->set( farbe, i );
             }
             for( int i = 0; i < nachricht.sts->teamAnzahl; i++ )
             {
                 int farbe = 0;
-                empfangen->getNachrichtEncrypted( (char*)&farbe, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&farbe, 4 );
                 nachricht.sts->teamFarbe->set( farbe, i );
             }
             for( int i = 0; i < nachricht.sts->teamAnzahl; i++ )
@@ -471,19 +471,19 @@ bool SpielClient::getNextMessage( SpielServerNachricht &nachricht )
             for( int i = 0; i < nachricht.sts->teamAnzahl; i++ )
             {
                 int größe = 0;
-                empfangen->getNachrichtEncrypted( (char*)&größe, 4 );
+                empfangen->getNachrichtEncrypted( (char *)&größe, 4 );
                 nachricht.sts->teamSize->set( größe, i );
             }
             break;
         case 7: // SpielErstellt Spieler hinzugefügt
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.accountId, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.accountId, 4 );
             break;
         case 8: // SpielErstellt Spieler entfernt
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.accountId, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.accountId, 4 );
             break;
         case 9: // SpielErstellt Spieler wechselt Team
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.accountId, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.spielerNummer, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.accountId, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.spielerNummer, 4 );
             break;
         case 0xA: // SpielErstellt Chat Nachricht
             if( 1 )
@@ -499,30 +499,30 @@ bool SpielClient::getNextMessage( SpielServerNachricht &nachricht )
             }
             break;
         case 0xB: // Spiel gefunden
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.karteId, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.karteId, 4 );
             break;
         case 0xD: // Spiel Laden Spieler hinzufügen
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.accountId, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.spielerNummer, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.accountId, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.spielerNummer, 4 );
             break;
         case 0xE: // Spiel Laden Spieler Prozent
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.accountId, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.prozent, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.accountId, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.prozent, 4 );
             break;
         case 0xF: // Spiel Laden Spieler Ping
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.accountId, 4 );
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.ping, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.accountId, 4 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.ping, 4 );
             break;
         case 0x10: // ping
             empfangen->sendeEncrypted( "\1", 1 );
             break;
         case 0x12: // Spiel Nachricht
-            empfangen->getNachricht( (char*)&nachricht.län, 2 );
+            empfangen->getNachricht( (char *)&nachricht.län, 2 );
             nachricht.data = new char[ nachricht.län ];
             empfangen->getNachricht( nachricht.data, nachricht.län );
             break;
         case 0x13: // Statistik Nachricht
-            empfangen->getNachrichtEncrypted( (char*)&nachricht.län, 2 );
+            empfangen->getNachrichtEncrypted( (char *)&nachricht.län, 2 );
             nachricht.data = new char[ nachricht.län ];
             empfangen->getNachrichtEncrypted( nachricht.data, nachricht.län );
             break;
@@ -571,9 +571,9 @@ bool SpielClient::trenne()
     char serverReturn = 0;
     senden->getNachrichtEncrypted( &serverReturn, 1 );
     senden->trenne();
-    senden = senden->release();
+    senden = (Network::Klient *)senden->release();
     empfangen->trenne();
-    empfangen = empfangen->release();
+    empfangen = (Network::Klient *)empfangen->release();
     cs.unlock();
     return 1;
 }
@@ -589,20 +589,4 @@ bool SpielClient::istVerbunden() const
 char *SpielClient::getLetzterFehler() const
 {
     return err;
-}
-
-// Erhöht den Reference Counter um 1 un gibt this zurück
-SpielServerClient *SpielClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counter um 1 und gibt 0 zurück.
-//  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-SpielServerClient *SpielClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
 }

+ 0 - 6
KSGNetwork/SpielClient.h

@@ -10,7 +10,6 @@ namespace KSGClient
     class SpielClient : public SpielServerClient
     {
     private:
-        int ref;
         Framework::Text ip;
         unsigned short port;
         int cId;
@@ -82,10 +81,5 @@ namespace KSGClient
         // gibt den Letzten Fehlertext zuück
         //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
         char *getLetzterFehler() const override;
-        // Erhöht den Reference Counter um 1 un gibt this zurück
-        SpielServerClient *getThis() override;
-        // Verringert den Reference Counter um 1 und gibt 0 zurück.
-        //  Falls der Reference Counter nach dem Aufruf auf 0 ist löscht sich das Objekt selbst 
-        SpielServerClient *release() override;
     };
 }