浏览代码

use framework reference counting

Kolja Strohm 3 年之前
父节点
当前提交
3ec2900d0a

+ 27 - 42
EditorServer/BeschreibungEditor.cpp

@@ -6,11 +6,11 @@
 // Inhalt der BeschreibungEditor Klasse aus BeschreibungEditor.h
 // Konstruktor
 BeschreibungEditor::BeschreibungEditor( char *pf )
+    : ReferenceCounter()
 {
     pfad = pf;
     pfad += "/live/map/client";
     fehler = "";
-    ref = 1;
 }
 
 // Destruktor
@@ -39,7 +39,7 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
         bool ok = d.open( Datei::Style::lesen );
         char *buffer = new char[ 2048 ];
         int gr = (int)d.getSize();
-        zKlient->sendeEncrypted( (char*)&gr, 4 );
+        zKlient->sendeEncrypted( (char *)&gr, 4 );
         while( gr > 0 )
         {
             int l = gr > 2048 ? 2048 : gr;
@@ -67,7 +67,7 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         Bild *b = dat.laden( 0, dat.zBildListe()->get( 0 ) );
         if( !b )
@@ -78,9 +78,9 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
         zKlient->sendeEncrypted( "\1", 1 );
         int br = b->getBreite();
         int hi = b->getHeight();
-        zKlient->sendeEncrypted( (char*)&br, 4 );
-        zKlient->sendeEncrypted( (char*)&hi, 4 );
-        char *buffer = (char*)b->getBuffer();
+        zKlient->sendeEncrypted( (char *)&br, 4 );
+        zKlient->sendeEncrypted( (char *)&hi, 4 );
+        char *buffer = (char *)b->getBuffer();
         __int64 gr = br * hi * 4;
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->sende( &( buffer[ i ] ), l );
@@ -97,7 +97,7 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         Bild *b = dat.laden( 0, dat.zBildListe()->get( 0 ) );
         if( !b )
@@ -108,9 +108,9 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
         zKlient->sendeEncrypted( "\1", 1 );
         int br = b->getBreite();
         int hi = b->getHeight();
-        zKlient->sendeEncrypted( (char*)&br, 4 );
-        zKlient->sendeEncrypted( (char*)&hi, 4 );
-        char *buffer = (char*)b->getBuffer();
+        zKlient->sendeEncrypted( (char *)&br, 4 );
+        zKlient->sendeEncrypted( (char *)&hi, 4 );
+        char *buffer = (char *)b->getBuffer();
         __int64 gr = br * hi * 4;
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->sende( &( buffer[ i ] ), l );
@@ -127,7 +127,7 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         Bild *b = dat.laden( 0, dat.zBildListe()->get( 0 ) );
         if( !b )
@@ -138,9 +138,9 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
         zKlient->sendeEncrypted( "\1", 1 );
         int br = b->getBreite();
         int hi = b->getHeight();
-        zKlient->sendeEncrypted( (char*)&br, 4 );
-        zKlient->sendeEncrypted( (char*)&hi, 4 );
-        char *buffer = (char*)b->getBuffer();
+        zKlient->sendeEncrypted( (char *)&br, 4 );
+        zKlient->sendeEncrypted( (char *)&hi, 4 );
+        char *buffer = (char *)b->getBuffer();
         __int64 gr = br * hi * 4;
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->sende( &( buffer[ i ] ), l );
@@ -159,7 +159,7 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
         bool ok = d.open( Datei::Style::schreiben );
         char *buffer = new char[ 2048 ];
         int gr = 0;
-        zKlient->getNachrichtEncrypted( (char*)&gr, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&gr, 4 );
         while( gr > 0 )
         {
             int l = gr > 2048 ? 2048 : gr;
@@ -184,16 +184,16 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
         p += "/titel.ltdb";
         int br = 0;
         int hi = 0;
-        zKlient->getNachrichtEncrypted( (char*)&br, 4 );
-        zKlient->getNachrichtEncrypted( (char*)&hi, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&br, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&hi, 4 );
         __int64 gr = br * hi * 4;
         Bild *b = new Bild();
         b->neuBild( br, hi, 0 );
-        char *buffer = (char*)b->getBuffer();
+        char *buffer = (char *)b->getBuffer();
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->getNachricht( &( buffer[ i ] ), l );
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         if( !DateiExistiert( p ) )
             dat.erstellen();
         dat.leseDaten( 0 );
@@ -213,16 +213,16 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
         p += "/minimap.ltdb";
         int br = 0;
         int hi = 0;
-        zKlient->getNachrichtEncrypted( (char*)&br, 4 );
-        zKlient->getNachrichtEncrypted( (char*)&hi, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&br, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&hi, 4 );
         __int64 gr = br * hi * 4;
         Bild *b = new Bild();
         b->neuBild( br, hi, 0 );
-        char *buffer = (char*)b->getBuffer();
+        char *buffer = (char *)b->getBuffer();
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->getNachricht( &( buffer[ i ] ), l );
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         if( !DateiExistiert( p ) )
             dat.erstellen();
         dat.leseDaten( 0 );
@@ -242,16 +242,16 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
         p += "/ladebild.ltdb";
         int br = 0;
         int hi = 0;
-        zKlient->getNachrichtEncrypted( (char*)&br, 4 );
-        zKlient->getNachrichtEncrypted( (char*)&hi, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&br, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&hi, 4 );
         __int64 gr = br * hi * 4;
         Bild *b = new Bild();
         b->neuBild( br, hi, 0 );
-        char *buffer = (char*)b->getBuffer();
+        char *buffer = (char *)b->getBuffer();
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->getNachricht( &( buffer[ i ] ), l );
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         if( !DateiExistiert( p ) )
             dat.erstellen();
         dat.leseDaten( 0 );
@@ -274,19 +274,4 @@ bool BeschreibungEditor::prozessMessage( SKlient *zKlient )
 char *BeschreibungEditor::getLetzterFehler() const
 {
     return fehler;
-}
-
-// Reference Counting
-BeschreibungEditor *BeschreibungEditor::getThis()
-{
-    ref++;
-    return this;
-}
-
-BeschreibungEditor *BeschreibungEditor::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 1 - 5
EditorServer/BeschreibungEditor.h

@@ -6,12 +6,11 @@
 using namespace Framework;
 using namespace Network;
 
-class BeschreibungEditor
+class BeschreibungEditor : public virtual ReferenceCounter
 {
 private:
     Text pfad;
     Text fehler;
-    int ref;
 
 public:
     // Konstruktor
@@ -22,7 +21,4 @@ public:
     bool prozessMessage( SKlient *zKlient );
     // constant
     char *getLetzterFehler() const;
-    // Reference Counting
-    BeschreibungEditor *getThis();
-    BeschreibungEditor *release();
 };

+ 62 - 91
EditorServer/DateienEditor.cpp

@@ -23,16 +23,15 @@ private:
     int sample;
     __int64 len;
     SKlient *k;
-    int ref;
     bool ok;
 
 public:
     // Konstruktor
     DownloadSound( SKlient *zK )
+        : ReferenceCounter()
     {
         k = zK;
         ok = 0;
-        ref = 1;
     }
     // nicht constant
     // GSL
@@ -56,13 +55,13 @@ public:
         k->getNachrichtEncrypted( &m, 1 );
         istM = ( m == 1 );
         sample = 0;
-        k->getNachrichtEncrypted( (char*)&sample, 4 );
+        k->getNachrichtEncrypted( (char *)&sample, 4 );
         len = 0;
-        k->getNachrichtEncrypted( (char*)&len, 8 );
+        k->getNachrichtEncrypted( (char *)&len, 8 );
     }
     int getDaten( char *buffer, int len ) override
     {
-        int l = len < this->len ? len : ( int )this->len;
+        int l = len < this->len ? len : (int)this->len;
         if( !l )
             return -1;
         k->getNachricht( buffer, l );
@@ -87,31 +86,18 @@ public:
     {
         return ok;
     }
-    // Reference Counting
-    GSL::GSLSoundV *getThis() override
-    {
-        ref++;
-        return this;
-    }
-    GSL::GSLSoundV *release() override
-    {
-        ref--;
-        if( !ref )
-            delete this;
-        return 0;
-    }
 };
 
 // Inhalt der DateienEditor Klasse aus DateienEditor.h
 // Konstruktor
 DateienEditor::DateienEditor( char *pf, InitDatei *zIni )
+    : ReferenceCounter()
 {
-    this->ini = zIni->getThis();
+    this->ini = dynamic_cast<InitDatei *>( zIni->getThis() );
     pfad = pf;
     pfad += "/live/map/client/map/files";
     workPfad = "";
     fehler = "";
-    ref = 1;
 }
 
 // Destruktor
@@ -133,7 +119,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         char typ = 0;
         zKlient->getNachrichtEncrypted( &typ, 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         if( len )
             zKlient->getNachrichtEncrypted( name, len );
@@ -222,7 +208,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -272,12 +258,12 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *dName = new char[ len + 1 ];
         dName[ (int)len ] = 0;
         if( len )
             zKlient->getNachrichtEncrypted( dName, len );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *bName = new char[ len + 1 ];
         bName[ (int)len ] = 0;
         if( len )
@@ -301,7 +287,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         Bild *b = dat.laden( 0, new Text( bName ) );
         delete[] bName;
@@ -313,9 +299,9 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         zKlient->sendeEncrypted( "\1", 1 );
         int br = b->getBreite();
         int hi = b->getHeight();
-        zKlient->sendeEncrypted( (char*)&br, 4 );
-        zKlient->sendeEncrypted( (char*)&hi, 4 );
-        char *buffer = (char*)b->getBuffer();
+        zKlient->sendeEncrypted( (char *)&br, 4 );
+        zKlient->sendeEncrypted( (char *)&hi, 4 );
+        char *buffer = (char *)b->getBuffer();
         __int64 gr = br * hi * 4;
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->sende( &( buffer[ i ] ), l );
@@ -326,7 +312,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -375,12 +361,12 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *dName = new char[ len + 1 ];
         dName[ (int)len ] = 0;
         if( len )
             zKlient->getNachrichtEncrypted( dName, len );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *bName = new char[ len + 1 ];
         bName[ (int)len ] = 0;
         if( len )
@@ -404,7 +390,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         dat.remove( 0, new Text( bName ) );
         delete[] bName;
@@ -415,12 +401,12 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *dName = new char[ len + 1 ];
         dName[ (int)len ] = 0;
         if( len )
             zKlient->getNachrichtEncrypted( dName, len );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *bName = new char[ len + 1 ];
         bName[ (int)len ] = 0;
         if( len )
@@ -446,16 +432,16 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         zKlient->sendeEncrypted( "\1", 1 );
         int br = 0;
         int hi = 0;
-        zKlient->getNachrichtEncrypted( (char*)&br, 4 );
-        zKlient->getNachrichtEncrypted( (char*)&hi, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&br, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&hi, 4 );
         __int64 gr = br * hi * 4;
         Bild *b = new Bild();
         b->neuBild( br, hi, 0 );
-        char *buffer = (char*)b->getBuffer();
+        char *buffer = (char *)b->getBuffer();
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->getNachricht( &( buffer[ i ] ), l );
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         dat.remove( 0, new Text( bName ) );
         if( dat.speichern( 0, b, new Text( bName ) ) < 0 )
@@ -477,7 +463,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         int anz = list ? list->getEintragAnzahl() : 0;
         if( workPfad.getLength() )
             anz++;
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         if( workPfad.getLength() )
         {
             zKlient->sendeEncrypted( "\2", 1 );
@@ -498,7 +484,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -521,10 +507,10 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         }
         zKlient->sendeEncrypted( "\1", 1 );
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         int anz = dat.getBildAnzahl();
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             char len = (char)dat.zBildListe()->z( i )->getLength();
@@ -537,7 +523,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -563,7 +549,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         dat.setPfad( p );
         dat.leseDaten();
         int anz = dat.getModelAnzahl();
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             char len = (char)dat.zModelName( i )->getLength();
@@ -576,7 +562,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -616,7 +602,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         gslDatei->setDatei( p );
         gslDatei->leseDaten();
         int anz = gslDatei->getSoundAnzahl();
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             Text *n = gslDatei->getSoundName( i );
@@ -633,7 +619,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -655,7 +641,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         zKlient->sendeEncrypted( "\1", 1 );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -686,7 +672,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -708,7 +694,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         zKlient->sendeEncrypted( "\1", 1 );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -748,7 +734,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -770,7 +756,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         zKlient->sendeEncrypted( "\1", 1 );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -787,27 +773,27 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         }
         zKlient->sendeEncrypted( "\1", 1 );
         int anz = mdl->polygons ? mdl->polygons->getEintragAnzahl() : 0;
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             Polygon2D pol = mdl->polygons->get( i );
-            zKlient->sendeEncrypted( (char*)&pol.transparent, 1 );
+            zKlient->sendeEncrypted( (char *)&pol.transparent, 1 );
             char nLen = (char)pol.name->getLength();
             zKlient->sendeEncrypted( &nLen, 1 );
             if( nLen )
                 zKlient->sendeEncrypted( pol.name->getText(), nLen );
             int anz2 = pol.vertex ? pol.vertex->getEintragAnzahl() : 0;
-            zKlient->sendeEncrypted( (char*)&anz2, 4 );
+            zKlient->sendeEncrypted( (char *)&anz2, 4 );
             for( int j = 0; j < anz2; j++ )
             {
                 float var = pol.vertex->get( j ).x;
-                zKlient->sendeEncrypted( (char*)&var, 4 );
+                zKlient->sendeEncrypted( (char *)&var, 4 );
                 var = pol.vertex->get( j ).y;
-                zKlient->sendeEncrypted( (char*)&var, 4 );
+                zKlient->sendeEncrypted( (char *)&var, 4 );
                 var = ( pol.tKordinaten && pol.tKordinaten->hat( j ) ) ? pol.tKordinaten->get( j ).x : 0;
-                zKlient->sendeEncrypted( (char*)&var, 4 );
+                zKlient->sendeEncrypted( (char *)&var, 4 );
                 var = ( pol.tKordinaten && pol.tKordinaten->hat( j ) ) ? pol.tKordinaten->get( j ).y : 0;
-                zKlient->sendeEncrypted( (char*)&var, 4 );
+                zKlient->sendeEncrypted( (char *)&var, 4 );
             }
         }
         mdl->release();
@@ -818,7 +804,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -840,7 +826,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         zKlient->sendeEncrypted( "\1", 1 );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -875,9 +861,9 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         char channels = sound->istMono() ? 1 : 2;
         zKlient->sendeEncrypted( &channels, 1 );
         int sample = sound->getSampleRate();
-        zKlient->sendeEncrypted( (char*)&sample, 4 );
+        zKlient->sendeEncrypted( (char *)&sample, 4 );
         __int64 length = sound->getDatLength();
-        zKlient->sendeEncrypted( (char*)&length, 8 );
+        zKlient->sendeEncrypted( (char *)&length, 8 );
         sound->open();
         char *buffer = new char[ 2048 ];
         while( length > 0 )
@@ -885,7 +871,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             int l = length > 2048 ? 2048 : (int)length;
             sound->getDaten( buffer, l );
             zKlient->sende( buffer, l );
-			length -= l;
+            length -= l;
         }
         delete[] buffer;
         sound->close();
@@ -899,7 +885,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -921,7 +907,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         zKlient->sendeEncrypted( "\1", 1 );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -940,16 +926,16 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         Model2DData *mdl = new Model2DData();
         Array< Polygon2D > *data = new Array< Polygon2D >();
         int anz = 0;
-        zKlient->getNachrichtEncrypted( (char*)&anz, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             Polygon2D pol;
             pol.schwerpunkt = 0;
             pol.vertex = new Array< Vertex >();
             pol.tKordinaten = new Array< Vertex >();
-            zKlient->getNachrichtEncrypted( (char*)&pol.transparent, 1 );
+            zKlient->getNachrichtEncrypted( (char *)&pol.transparent, 1 );
             unsigned char nLen = 0;
-            zKlient->getNachrichtEncrypted( (char*)&nLen, 1 );
+            zKlient->getNachrichtEncrypted( (char *)&nLen, 1 );
             char *txt = new char[ nLen + 1 ];
             if( nLen )
                 zKlient->getNachrichtEncrypted( txt, nLen );
@@ -957,15 +943,15 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             pol.name = new Text( txt );
             delete[] txt;
             int anz2 = 0;
-            zKlient->getNachrichtEncrypted( (char*)&anz2, 4 );
+            zKlient->getNachrichtEncrypted( (char *)&anz2, 4 );
             for( int j = 0; j < anz2; j++ )
             {
                 Vertex v;
                 Vertex p;
-                zKlient->getNachrichtEncrypted( (char*)&v.x, 4 );
-                zKlient->getNachrichtEncrypted( (char*)&v.y, 4 );
-                zKlient->getNachrichtEncrypted( (char*)&p.x, 4 );
-                zKlient->getNachrichtEncrypted( (char*)&p.y, 4 );
+                zKlient->getNachrichtEncrypted( (char *)&v.x, 4 );
+                zKlient->getNachrichtEncrypted( (char *)&v.y, 4 );
+                zKlient->getNachrichtEncrypted( (char *)&p.x, 4 );
+                zKlient->getNachrichtEncrypted( (char *)&p.y, 4 );
                 pol.vertex->add( v );
                 pol.tKordinaten->add( p );
             }
@@ -998,7 +984,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -1020,7 +1006,7 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         zKlient->sendeEncrypted( "\1", 1 );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -1080,19 +1066,4 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
 char *DateienEditor::getLetzterFehler() const
 {
     return fehler;
-}
-
-// Reference Counting
-DateienEditor *DateienEditor::getThis()
-{
-    ref++;
-    return this;
-}
-
-DateienEditor *DateienEditor::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 1 - 5
EditorServer/DateienEditor.h

@@ -7,14 +7,13 @@
 using namespace Framework;
 using namespace Network;
 
-class DateienEditor
+class DateienEditor : public virtual ReferenceCounter
 {
 private:
     Text pfad;
     Text workPfad;
     Text fehler;
     InitDatei *ini;
-    int ref;
 
 public:
     // Konstruktor
@@ -25,7 +24,4 @@ public:
     bool prozessMessage( SKlient *zKlient );
     // constant
     char *getLetzterFehler() const;
-    // Reference Counting
-    DateienEditor *getThis();
-    DateienEditor *release();
 };

+ 1 - 16
EditorServer/Datenbank.cpp

@@ -5,6 +5,7 @@
 // Inhalt der LSDatenbank Klasse aus Datenbank.h
 // Konstruktor
 EdSDatenbank::EdSDatenbank( InitDatei *zIni )
+    : ReferenceCounter()
 {
     datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(),
                                zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
@@ -15,7 +16,6 @@ EdSDatenbank::EdSDatenbank( InitDatei *zIni )
         exit( 1 );
     }
     InitializeCriticalSection( &cs );
-    ref = 1;
     Text befehl = "SELECT port, admin_port  FROM server WHERE id = ";
     befehl += zIni->zWert( "ServerId" )->getText();
     lock();
@@ -596,19 +596,4 @@ int EdSDatenbank::getKaufAnz( int karte )
 Text *EdSDatenbank::getLetzterFehler() const
 {
     return datenbank->getLetzterFehler();
-}
-
-// Reference Counting
-EdSDatenbank *EdSDatenbank::getThis()
-{
-    ref++;
-    return this;
-}
-
-EdSDatenbank *EdSDatenbank::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 26 - 30
EditorServer/Datenbank.h

@@ -11,39 +11,38 @@ using namespace sql;
 
 namespace Admin_Recht
 {
-	const int EdSStarten = 49;
-	const int EdSBeenden = 50;
-	const int EdSPausieren = 51;
-	const int EdSMKChange = 52;
+    const int EdSStarten = 49;
+    const int EdSBeenden = 50;
+    const int EdSPausieren = 51;
+    const int EdSMKChange = 52;
 }
 
 struct AHDaten;
 
-class EdSDatenbank
+class EdSDatenbank : public virtual ReferenceCounter
 {
 private:
-	Datenbank *datenbank;
-	CRITICAL_SECTION cs;
-	int ref;
+    Datenbank *datenbank;
+    CRITICAL_SECTION cs;
 
 public:
-	// Konstruktor
-	EdSDatenbank( InitDatei *zIni );
-	// Destruktor
-	~EdSDatenbank();
-	// nicht constant
-	void lock();
-	void unlock();
-	int istAdministrator( const char *name, const char *passwort );
-	bool adminHatRecht( int id, int recht );
-	bool proveKlient( int num, int sNum );
-	Text *getKlientKey( int cId );
-	void unregisterKlient( int num, int sNum );
-	bool setServerStatus( int id, int status );
-	bool setMaxKarten( int id, int maxK );
-	bool serverIstNichtPausiert( int id );
-	Text *getKarteName( int id );
-	bool proveKarte( int id, int cId, int sNum );
+    // Konstruktor
+    EdSDatenbank( InitDatei *zIni );
+    // Destruktor
+    ~EdSDatenbank();
+    // nicht constant
+    void lock();
+    void unlock();
+    int istAdministrator( const char *name, const char *passwort );
+    bool adminHatRecht( int id, int recht );
+    bool proveKlient( int num, int sNum );
+    Text *getKlientKey( int cId );
+    void unregisterKlient( int num, int sNum );
+    bool setServerStatus( int id, int status );
+    bool setMaxKarten( int id, int maxK );
+    bool serverIstNichtPausiert( int id );
+    Text *getKarteName( int id );
+    bool proveKarte( int id, int cId, int sNum );
     bool istKarteInUpdate( int id );
     bool startKarteUpdate( int id );
     bool startShopUpdate( int id );
@@ -55,11 +54,8 @@ public:
     bool getLast30DaysIncomeStatistik( int karte, Array< int > *einkommen, Array< int > *verkauft );
     bool getLast30DaysSpielStatistik( int karte, Array< int > *spiele );
     int getKaufAnz( int karte );
-	// constant
-	Text *getLetzterFehler() const;
-	// Reference Counting
-	EdSDatenbank *getThis();
-	EdSDatenbank *release();
+    // constant
+    Text *getLetzterFehler() const;
 };
 
 #endif

+ 1 - 4
EditorServer/ESEditorV.h

@@ -6,7 +6,7 @@
 using namespace Framework;
 using namespace Network;
 
-class ESEditorV
+class ESEditorV : public virtual ReferenceCounter
 {
 private:
 
@@ -19,7 +19,4 @@ public:
     virtual bool nachricht( SKlient *k ) = 0;
     // constant
     virtual char *getLetzterFehler() const = 0;
-    // Reference Counting 
-    virtual ESEditorV *getThis() = 0;
-    virtual ESEditorV *release() = 0;
 };

二进制
EditorServer/EditorServer


+ 38 - 39
EditorServer/EditorServer.cpp

@@ -16,7 +16,7 @@ EditorServer::EditorServer( InitDatei *zIni )
     empfangen = 0;
     gesendet = 0;
     fehler = new Text();
-    ini = zIni->getThis();
+    ini = dynamic_cast<InitDatei *>( zIni->getThis() );
     id = *zIni->zWert( "ServerId" );
     server = new Server();
     aServer = new SSLServer();
@@ -65,13 +65,13 @@ void EditorServer::runn()
         if( end && klient )
         {
             klient->trenne();
-            klient = klient->release();
+            klient = (SSLSKlient *)klient->release();
             Sleep( 1000 );
             return;
         }
         if( !klient )
             continue;
-        EdSAKlient * clHandle = new EdSAKlient( klient, (EditorServer *)getThis() );
+        EdSAKlient *clHandle = new EdSAKlient( klient, dynamic_cast<EditorServer *>( getThis() ) );
         clHandle->start();
     }
 }
@@ -85,7 +85,7 @@ void EditorServer::thread()
         if( !klient )
             continue;
         Framework::getThreadRegister()->cleanUpClosedThreads();
-        EdSKlient * clHandle = new EdSKlient( klient, (EditorServer *)getThis() );
+        EdSKlient *clHandle = new EdSKlient( klient, dynamic_cast<EditorServer *>( getThis() ) );
         EnterCriticalSection( &cs );
         klients->set( clHandle, klientAnzahl );
         klientAnzahl++;
@@ -104,13 +104,13 @@ void EditorServer::close()
     EnterCriticalSection( &cs );
     for( int i = 0; i < klientAnzahl; i++ )
         klients->z( i )->absturz();
-    klients = klients->release();
+    klients = ( RCArray<EdSKlient>* )klients->release();
     klientAnzahl = 0;
     LeaveCriticalSection( &cs );
     ende();
     run = 0;
     end = 1;
-    Klient * klient = new Klient();
+    Klient *klient = new Klient();
     klient->verbinde( aServer->getPort(), "127.0.0.1" );
     Sleep( 500 );
     aServer->trenne();
@@ -223,7 +223,7 @@ bool EditorServer::absturzKlient( int klientId )
     return gefunden;
 }
 
-bool EditorServer::removeKlient( EdSKlient * zKlient )
+bool EditorServer::removeKlient( EdSKlient *zKlient )
 {
     bool gefunden = 0;
     EnterCriticalSection( &cs );
@@ -290,7 +290,7 @@ char *EditorServer::getLetzterFehler() const
 
 // Inhalt der EdSAKlient Klasse aus EditorServer.h
 // Konstruktor 
-EdSAKlient::EdSAKlient( SSLSKlient * klient, EditorServer * eds )
+EdSAKlient::EdSAKlient( SSLSKlient *klient, EditorServer *eds )
     : Thread()
 {
     this->klient = klient;
@@ -328,13 +328,13 @@ void EdSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     unsigned char nLen = 0;
-                    klient->getNachricht( (char *)& nLen, 1 );
+                    klient->getNachricht( (char *)&nLen, 1 );
                     char *n = new char[ nLen + 1 ];
                     n[ (int)nLen ] = 0;
                     if( nLen )
                         klient->getNachricht( n, nLen );
                     unsigned char pLen = 0;
-                    klient->getNachricht( (char *)& pLen, 1 );
+                    klient->getNachricht( (char *)&pLen, 1 );
                     char *p = new char[ pLen + 1 ];
                     p[ (int)pLen ] = 0;
                     if( pLen )
@@ -430,7 +430,7 @@ void EdSAKlient::thread()
                     }
                     else
                         ok = 1;
-                    if( ok &&eds->hatClients() )
+                    if( ok && eds->hatClients() )
                     {
                         errorZuKlient( "Es sind noch Klients Online. Bitte versuche es später erneut." );
                         break;
@@ -526,7 +526,7 @@ void EdSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int maxK = 0;
-                    klient->getNachricht( (char *)& maxK, 4 );
+                    klient->getNachricht( (char *)&maxK, 4 );
                     if( eds->zDB()->adminHatRecht( adminId, Admin_Recht::EdSMKChange ) )
                     {
                         if( eds->setMaxKarten( maxK ) )
@@ -548,8 +548,8 @@ void EdSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int klientId = 0;
-                    klient->getNachricht( (char *)& klientId, 4 );
-                    if( klientId &&eds->absturzKlient( klientId ) )
+                    klient->getNachricht( (char *)&klientId, 4 );
+                    if( klientId && eds->absturzKlient( klientId ) )
                         klient->sende( "\1", 1 );
                     else
                         klient->sende( "\0", 1 );
@@ -581,7 +581,7 @@ void EdSAKlient::errorZuKlient( const char *nachricht ) const // sendet eine Feh
 
 // Inhalt der EdSKlient aus EditorServer.h
 // Konstruktor 
-EdSKlient::EdSKlient( SKlient * klient, EditorServer * eds )
+EdSKlient::EdSKlient( SKlient *klient, EditorServer *eds )
     : Thread()
 {
     this->klient = klient;
@@ -591,7 +591,6 @@ EdSKlient::EdSKlient( SKlient * klient, EditorServer * eds )
     klientNummer = 0;
     this->eds = eds;
     ked = 0;
-    ref = 1;
 }
 
 // Destruktor 
@@ -624,7 +623,7 @@ void EdSKlient::thread()
             switch( c )
             {
             case 1: // Klient identifikation
-                klient->getNachrichtEncrypted( (char *)& klientNummer, 4 );
+                klient->getNachrichtEncrypted( (char *)&klientNummer, 4 );
                 if( !eds->zDB()->proveKlient( klientNummer, eds->getId() ) )
                 {
                     klientNummer = 0;
@@ -655,8 +654,8 @@ void EdSKlient::thread()
                         if( 1 )
                         {
                             int klientId = 0;
-                            klient->getNachrichtEncrypted( (char *)& klientId, 4 );
-                            if( klientId &&eds->absturzKlient( klientId ) )
+                            klient->getNachrichtEncrypted( (char *)&klientId, 4 );
+                            if( klientId && eds->absturzKlient( klientId ) )
                                 klient->sendeEncrypted( "\1", 1 );
                             else
                                 klient->sendeEncrypted( "\0", 1 );
@@ -699,18 +698,18 @@ void EdSKlient::thread()
                 {
                     klient->sendeEncrypted( "\1", 1 );
                     int karteId = 0;
-                    klient->getNachrichtEncrypted( (char *)& karteId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&karteId, 4 );
                     if( eds->zDB()->proveKarte( karteId, klientNummer, eds->getId() ) )
                     {
                         if( ked )
                             ked->release();
-                        ked = new KarteEditor( karteId, eds->zDB()->getThis(), eds->zIni()->zWert( "KartenPfad" )->getText(), eds->zIni() );
+                        ked = new KarteEditor( karteId, dynamic_cast<EdSDatenbank *>( eds->zDB()->getThis() ), eds->zIni()->zWert( "KartenPfad" )->getText(), eds->zIni() );
                         if( ked->istOk() )
                             klient->sendeEncrypted( "\1", 1 );
                         else
                         {
                             errorZuKlient( ked->getLetzterFehler() );
-                            ked = ked->release();
+                            ked = (KarteEditor *)ked->release();
                         }
                     }
                     else
@@ -746,20 +745,20 @@ void EdSKlient::thread()
                 {
                     klient->sendeEncrypted( "\1", 1 );
                     int id = 0;
-                    klient->getNachrichtEncrypted( (char *)& id, 4 );
+                    klient->getNachrichtEncrypted( (char *)&id, 4 );
                     if( ked )
                         ked->release();
-                    ked = new KarteEditor( id, eds->zDB()->getThis(), eds->zIni()->zWert( "KartenPfad" )->getText(), eds->zIni() );
+                    ked = new KarteEditor( id, dynamic_cast<EdSDatenbank *>( eds->zDB()->getThis() ), eds->zIni()->zWert( "KartenPfad" )->getText(), eds->zIni() );
                     if( !ked->istOk() )
                     {
                         errorZuKlient( "Die Karte konnte nicht geladen werden." );
-                        ked = ked->release();
+                        ked = (KarteEditor *)ked->release();
                         break;
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     RCArray< Text > *list = new RCArray< Text >();
-                    int anz = ked->getDateiUpdateListe( ( char * )"shop", list );
-                    klient->sendeEncrypted( (char *)& anz, 4 );
+                    int anz = ked->getDateiUpdateListe( (char *)"shop", list );
+                    klient->sendeEncrypted( (char *)&anz, 4 );
                     for( int i = 0; i < anz; i++ )
                     {
                         Text p = list->z( i )->getText();
@@ -772,7 +771,7 @@ void EdSKlient::thread()
                         Datei d;
                         d.setDatei( p );
                         __int64 size = d.getSize();
-                        klient->sendeEncrypted( (char *)& size, 8 );
+                        klient->sendeEncrypted( (char *)&size, 8 );
                         d.open( Datei::Style::lesen );
                         char *buffer = new char[ 2048 ];
                         while( size )
@@ -787,7 +786,7 @@ void EdSKlient::thread()
                     }
                     list->release();
                     if( ked )
-                        ked = ked->release();
+                        ked = (KarteEditor *)ked->release();
                 }
                 break;
             case 9: // Karte Update herunterladen (Vom Karten Server)
@@ -800,20 +799,20 @@ void EdSKlient::thread()
                 {
                     klient->sendeEncrypted( "\1", 1 );
                     int id = 0;
-                    klient->getNachrichtEncrypted( (char *)& id, 4 );
+                    klient->getNachrichtEncrypted( (char *)&id, 4 );
                     if( ked )
                         ked->release();
-                    ked = new KarteEditor( id, eds->zDB()->getThis(), eds->zIni()->zWert( "KartenPfad" )->getText(), eds->zIni() );
+                    ked = new KarteEditor( id, dynamic_cast<EdSDatenbank *>( eds->zDB()->getThis() ), eds->zIni()->zWert( "KartenPfad" )->getText(), eds->zIni() );
                     if( !ked->istOk() )
                     {
                         errorZuKlient( "Die Karte konnte nicht geladen werden." );
-                        ked = ked->release();
+                        ked = (KarteEditor *)ked->release();
                         break;
                     }
                     klient->sendeEncrypted( "\1", 1 );
                     RCArray< Text > *list = new RCArray< Text >();
-                    int anz = ked->getDateiUpdateListe( ( char * )"map", list );
-                    klient->sendeEncrypted( (char *)& anz, 4 );
+                    int anz = ked->getDateiUpdateListe( (char *)"map", list );
+                    klient->sendeEncrypted( (char *)&anz, 4 );
                     for( int i = 0; i < anz; i++ )
                     {
                         Text p = list->z( i )->getText();
@@ -826,7 +825,7 @@ void EdSKlient::thread()
                         Datei d;
                         d.setDatei( p );
                         __int64 size = d.getSize();
-                        klient->sendeEncrypted( (char *)& size, 8 );
+                        klient->sendeEncrypted( (char *)&size, 8 );
                         d.open( Datei::Style::lesen );
                         char *buffer = new char[ 2048 ];
                         while( size )
@@ -841,7 +840,7 @@ void EdSKlient::thread()
                     }
                     list->release();
                     if( ked )
-                        ked = ked->release();
+                        ked = (KarteEditor *)ked->release();
                 }
                 break;
             case 10: // Neue Karte erstellen
@@ -855,12 +854,12 @@ void EdSKlient::thread()
                 {
                     klient->sendeEncrypted( "\1", 1 );
                     unsigned char l = 0;
-                    klient->getNachrichtEncrypted( (char *)& l, 1 );
+                    klient->getNachrichtEncrypted( (char *)&l, 1 );
                     char *n = new char[ l + 1 ];
                     n[ (int)l ] = 0;
                     klient->getNachrichtEncrypted( n, l );
                     int spielArt = 0;
-                    klient->getNachrichtEncrypted( (char *)& spielArt, 4 );
+                    klient->getNachrichtEncrypted( (char *)&spielArt, 4 );
                     if( eds->zDB()->karteErstellen( n, spielArt, klientNummer ) )
                         klient->sendeEncrypted( "\1", 1 );
                     else
@@ -889,7 +888,7 @@ void EdSKlient::errorZuKlient( const char *nachricht ) const // sendet eine Fehl
 {
     klient->sendeEncrypted( "\3", 1 );
     unsigned char len = (unsigned char)textLength( nachricht );
-    klient->sendeEncrypted( (char *)& len, 1 );
+    klient->sendeEncrypted( (char *)&len, 1 );
     klient->sendeEncrypted( nachricht, len );
 }
 

+ 6 - 4
EditorServer/EditorServer.vcxproj

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

+ 1 - 4
EditorServer/GSLDateiV.h

@@ -5,7 +5,7 @@
 
 namespace GSL
 {
-    class GSLDateiV
+    class GSLDateiV : public virtual ReferenceCounter
     {
     public:
         virtual ~GSLDateiV()
@@ -24,8 +24,5 @@ namespace GSL
         // Löschen
         virtual bool removeSound( Framework::Text *name ) = 0;
         virtual bool removeSound( char *name ) = 0;
-        // Reference Counting
-        virtual GSLDateiV *getThis() = 0;
-        virtual GSLDateiV *release() = 0;
     };
 }

+ 1 - 4
EditorServer/GSLSoundV.h

@@ -4,7 +4,7 @@
 
 namespace GSL
 {
-    class GSLSoundV : protected Framework::Thread
+    class GSLSoundV : protected Framework::Thread, public virtual ReferenceCounter
     {
     public:
         virtual ~GSLSoundV()
@@ -22,8 +22,5 @@ namespace GSL
         virtual bool istMono() const = 0;
         virtual int getSampleRate() const = 0;
         virtual __int64 getDatLength() const = 0;
-        // Reference Counting
-        virtual GSLSoundV *getThis() = 0;
-        virtual GSLSoundV *release() = 0;
     };
 }

+ 41 - 56
EditorServer/KarteEditor.cpp

@@ -12,15 +12,16 @@
 #define GetProcAddress           dlsym
 #define FreeLibrary              dlclose
 
-typedef ESEditorV*( *DllStart )( );
+typedef ESEditorV *( *DllStart )( );
 
 // Inhalt der KarteEditor Klasse aus KarteEditor.h
 // Konstruktor
 KarteEditor::KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *zIni )
+    : ReferenceCounter()
 {
     this->id = id;
     db = datenbank;
-    ini = zIni->getThis();
+    ini = dynamic_cast<InitDatei *>( zIni->getThis() );
     pfad = new Text( pf );
     pfad->append( "/" );
     pfad->append( id );
@@ -30,20 +31,20 @@ KarteEditor::KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *
         Text dn = pfad->getText();
         dn += "/live/map/client/titel.ltdb";
         LTDBDatei bilder;
-        bilder.setDatei( dn.getThis() );
+        bilder.setDatei( dynamic_cast<Text *>( dn.getThis() ) );
         bilder.erstellen();
         Bild *bild = new Bild();
         bild->neuBild( 200, 100, 0x00000000 );
-        bilder.speichern( 0, bild->getThis(), new Text( "titel" ) );
+        bilder.speichern( 0, dynamic_cast<Bild *>( bild->getThis() ), new Text( "titel" ) );
         dn = pfad->getText();
         dn += "/live/map/client/minimap.ltdb";
-        bilder.setDatei( dn.getThis() );
+        bilder.setDatei( dynamic_cast<Text *>( dn.getThis() ) );
         bilder.erstellen();
         bild->neuBild( 348, 348, 0x00000000 );
-        bilder.speichern( 0, bild->getThis(), new Text( "vorschau" ) );
+        bilder.speichern( 0, dynamic_cast<Bild *>( bild->getThis() ), new Text( "vorschau" ) );
         dn = pfad->getText();
         dn += "/live/map/client/ladebild.ltdb";
-        bilder.setDatei( dn.getThis() );
+        bilder.setDatei( dynamic_cast<Text *>( dn.getThis() ) );
         bilder.erstellen();
         bild->neuBild( 1300, 900, 0x00000000 );
         bilder.speichern( 0, bild, new Text( "spielladen" ) );
@@ -53,7 +54,7 @@ KarteEditor::KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *
         d.setDatei( dn );
         d.erstellen();
         d.open( Datei::Style::schreiben );
-        d.schreibe( (char*)_neu_karte_ksgs_beschreibung, textLength( _neu_karte_ksgs_beschreibung ) );
+        d.schreibe( (char *)_neu_karte_ksgs_beschreibung, textLength( _neu_karte_ksgs_beschreibung ) );
         d.close();
         dn = pfad->getText();
         dn += "/live/map/client/map/data/data.sts";
@@ -61,8 +62,8 @@ KarteEditor::KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *
         d.erstellen();
         d.open( Datei::Style::schreiben );
         int i = 0;
-        d.schreibe( (char*)&i, 4 );
-        d.schreibe( (char*)&i, 4 );
+        d.schreibe( (char *)&i, 4 );
+        d.schreibe( (char *)&i, 4 );
         d.close();
         // Shop Seite
         dn = pfad->getText();
@@ -70,14 +71,14 @@ KarteEditor::KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *
         d.setDatei( dn );
         d.erstellen();
         d.open( Datei::Style::schreiben );
-        d.schreibe( (char*)_neu_karte_ksgs_shop_seite, textLength( _neu_karte_ksgs_shop_seite ) );
+        d.schreibe( (char *)_neu_karte_ksgs_shop_seite, textLength( _neu_karte_ksgs_shop_seite ) );
         d.close();
         dn = pfad->getText();
         dn += "/live/shop/titelbg.ltdb";
-        bilder.setDatei( dn.getThis() );
+        bilder.setDatei( dynamic_cast<Text *>( dn.getThis() ) );
         bilder.erstellen();
         bild->neuBild( 200, 100, 0x00000000 );
-        bilder.speichern( 0, bild->getThis(), new Text( "auswbg.jpg" ) );
+        bilder.speichern( 0, dynamic_cast<Bild *>( bild->getThis() ), new Text( "auswbg.jpg" ) );
         // Server Daten
         dn = pfad->getText();
         dn += "/live/map/server/sts.ltgd";
@@ -85,8 +86,8 @@ KarteEditor::KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *
         d.erstellen();
         d.open( Datei::Style::schreiben );
         i = 0;
-        d.schreibe( (char*)&i, 4 );
-        d.schreibe( (char*)&i, 4 );
+        d.schreibe( (char *)&i, 4 );
+        d.schreibe( (char *)&i, 4 );
         d.close();
         dn = pfad->getText();
         dn += "/live/map/server/...";
@@ -94,12 +95,11 @@ KarteEditor::KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *
     }
     shop = new SSEditor( pfad->getText() );
     beschreibung = new BeschreibungEditor( pfad->getText() );
-    teams = new TeamsEditor( id, pfad->getText(), db->getThis() );
+    teams = new TeamsEditor( id, pfad->getText(), dynamic_cast<EdSDatenbank *>( db->getThis() ) );
     dateien = new DateienEditor( pfad->getText(), zIni );
     editor = 0;
     editorDll = 0;
     fehler = "";
-    ref = 1;
 }
 
 // Destruktor
@@ -353,7 +353,7 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char l = 0;
-        zKlient->getNachrichtEncrypted( (char*)&l, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&l, 1 );
         char *name = new char[ l + 1 ];
         name[ (int)l ] = 0;
         if( l )
@@ -377,7 +377,7 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char l = 0;
-        zKlient->getNachrichtEncrypted( (char*)&l, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&l, 1 );
         char *name = new char[ l + 1 ];
         name[ (int)l ] = 0;
         if( l )
@@ -401,7 +401,7 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char l = 0;
-        zKlient->getNachrichtEncrypted( (char*)&l, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&l, 1 );
         char *name = new char[ l + 1 ];
         name[ (int)l ] = 0;
         if( l )
@@ -437,7 +437,7 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
         RCArray< Zeit > *datum = new RCArray< Zeit >();
         getAbbildListe( name, datum );
         int anz = name->getEintragAnzahl();
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             Text n = name->z( i )->getText();
@@ -445,17 +445,17 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
             zKlient->sendeEncrypted( &len, 1 );
             zKlient->sendeEncrypted( n, len );
             int d = datum->z( i )->zDatum()->getJahr();
-            zKlient->sendeEncrypted( (char*)&d, 4 );
+            zKlient->sendeEncrypted( (char *)&d, 4 );
             d = datum->z( i )->zDatum()->getMonat();
-            zKlient->sendeEncrypted( (char*)&d, 4 );
+            zKlient->sendeEncrypted( (char *)&d, 4 );
             d = datum->z( i )->zDatum()->getTag();
-            zKlient->sendeEncrypted( (char*)&d, 4 );
+            zKlient->sendeEncrypted( (char *)&d, 4 );
             d = datum->z( i )->zUhrzeit()->getStunde();
-            zKlient->sendeEncrypted( (char*)&d, 4 );
+            zKlient->sendeEncrypted( (char *)&d, 4 );
             d = datum->z( i )->zUhrzeit()->getMinute();
-            zKlient->sendeEncrypted( (char*)&d, 4 );
+            zKlient->sendeEncrypted( (char *)&d, 4 );
             d = datum->z( i )->zUhrzeit()->getSekunde();
-            zKlient->sendeEncrypted( (char*)&d, 4 );
+            zKlient->sendeEncrypted( (char *)&d, 4 );
         }
         name->release();
         datum->release();
@@ -486,17 +486,17 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
         Text pf = pfad->getText();
         pf += "/live/shop";
         int anz = findeDateien( pf, list );
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             Text p = list->z( i )->getText();
             char l = (char)( p.getLength() - pf.getLength() );
             zKlient->sendeEncrypted( &l, 1 );
-            zKlient->sendeEncrypted( (char*)p + pf.getLength(), l );
+            zKlient->sendeEncrypted( (char *)p + pf.getLength(), l );
             Datei d;
             d.setDatei( p );
             __int64 size = d.getSize();
-            zKlient->sendeEncrypted( (char*)&size, 8 );
+            zKlient->sendeEncrypted( (char *)&size, 8 );
             d.open( Datei::Style::lesen );
             char *buffer = new char[ 2048 ];
             while( size > 0 )
@@ -521,18 +521,18 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         zKlient->sendeEncrypted( "\1", 1 );
-        zKlient->sendeEncrypted( (char*)&es, 4 );
-        zKlient->sendeEncrypted( (char*)&tp, 4 );
-        zKlient->sendeEncrypted( (char*)&vp, 4 );
+        zKlient->sendeEncrypted( (char *)&es, 4 );
+        zKlient->sendeEncrypted( (char *)&tp, 4 );
+        zKlient->sendeEncrypted( (char *)&vp, 4 );
         return 1;
     }
     case 0xA: // Set Shop Daten
     {
         zKlient->sendeEncrypted( "\1", 1 );
         int es = 0, tp = 0, vp = 0;
-        zKlient->getNachrichtEncrypted( (char*)&es, 4 );
-        zKlient->getNachrichtEncrypted( (char*)&tp, 4 );
-        zKlient->getNachrichtEncrypted( (char*)&vp, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&es, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&tp, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&vp, 4 );
         if( db->setKarteShopDaten( id, es, tp, vp ) )
         {
             zKlient->sendeEncrypted( "\1", 1 );
@@ -573,7 +573,7 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
         if( editorDll )
         {
             if( editor )
-                editor = editor->release();
+                editor = (ESEditorV *)editor->release();
             FreeLibrary( editorDll );
         }
         if( !ini->wertExistiert( "SpielePfad" ) )
@@ -651,7 +651,7 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
         {
             zKlient->sendeEncrypted( "\1", 1 );
             int kaufAnz = db->getKaufAnz( id );
-            zKlient->sendeEncrypted( (char*)&kaufAnz, 4 );
+            zKlient->sendeEncrypted( (char *)&kaufAnz, 4 );
             char anz = (char)einkommen.getEintragAnzahl();
             zKlient->sendeEncrypted( &anz, 1 );
             for( int i = 0; i < anz; i++ )
@@ -659,9 +659,9 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
                 int kupfer = einkommen.get( i );
                 int kauf = verkauft.get( i );
                 int games = spiele.get( i );
-                zKlient->sendeEncrypted( (char*)&kupfer, 4 );
-                zKlient->sendeEncrypted( (char*)&kauf, 4 );
-                zKlient->sendeEncrypted( (char*)&games, 4 );
+                zKlient->sendeEncrypted( (char *)&kupfer, 4 );
+                zKlient->sendeEncrypted( (char *)&kauf, 4 );
+                zKlient->sendeEncrypted( (char *)&games, 4 );
             }
             return 1;
         }
@@ -698,19 +698,4 @@ char *KarteEditor::getLetzterFehler() const
 char *KarteEditor::getPfad() const
 {
     return pfad->getText();
-}
-
-// Reference Counting
-KarteEditor *KarteEditor::getThis()
-{
-    ref++;
-    return this;
-}
-
-KarteEditor *KarteEditor::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 14 - 18
EditorServer/KarteEditor.h

@@ -21,31 +21,30 @@
 using namespace Framework;
 using namespace Network;
 
-class KarteEditor
+class KarteEditor : public virtual ReferenceCounter
 {
 private:
-	int id;
-	Text *pfad;
-	EdSDatenbank *db;
+    int id;
+    Text *pfad;
+    EdSDatenbank *db;
     SSEditor *shop;
     BeschreibungEditor *beschreibung;
     TeamsEditor *teams;
     DateienEditor *dateien;
-	Text fehler;
+    Text fehler;
     InitDatei *ini;
     ESEditorV *editor;
     HINSTANCE editorDll;
-	int ref;
     // private
     int findeDateien( char *pf, RCArray< Text > *pfad );
 
 public:
-	// Konstruktor
-	KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *zIni );
-	// Destruktor
-	~KarteEditor();
-	// nicht constant
-	bool getAbbildListe( RCArray< Text > *name, RCArray< Zeit > *datum );
+    // Konstruktor
+    KarteEditor( int id, EdSDatenbank *datenbank, char *pf, InitDatei *zIni );
+    // Destruktor
+    ~KarteEditor();
+    // nicht constant
+    bool getAbbildListe( RCArray< Text > *name, RCArray< Zeit > *datum );
     int getDateiUpdateListe( char *p, RCArray< Text > *pfad );
     bool abbildErstellen( char *name );
     bool abbildRemove( char *name );
@@ -54,12 +53,9 @@ public:
     bool startShopUpdate();
     bool prozessMessage( SKlient *zKlient );
     void removeError();
-	// constant
+    // constant
     bool inUpdate() const;
-	bool istOk() const;
-	char *getLetzterFehler() const;
+    bool istOk() const;
+    char *getLetzterFehler() const;
     char *getPfad() const;
-	// Reference Counting
-	KarteEditor *getThis();
-	KarteEditor *release();
 };

+ 27 - 42
EditorServer/SSEditor.cpp

@@ -6,12 +6,12 @@
 // Inhalt der SSEditor Klasse aus SSEditor.h
 // Konstruktor
 SSEditor::SSEditor( char *pf )
+    : ReferenceCounter()
 {
     pfad = pf;
     pfad += "/live/shop";
     workPfad = "";
     fehler = "";
-    ref = 1;
 }
 
 // Destruktor
@@ -31,7 +31,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
         char typ = 0;
         zKlient->getNachrichtEncrypted( &typ, 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         if( len )
             zKlient->getNachrichtEncrypted( name, len );
@@ -95,7 +95,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -145,12 +145,12 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *dName = new char[ len + 1 ];
         dName[ (int)len ] = 0;
         if( len )
             zKlient->getNachrichtEncrypted( dName, len );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *bName = new char[ len + 1 ];
         bName[ (int)len ] = 0;
         if( len )
@@ -174,7 +174,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         Bild *b = dat.laden( 0, new Text( bName ) );
         delete[] bName;
@@ -186,9 +186,9 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
         zKlient->sendeEncrypted( "\1", 1 );
         int br = b->getBreite();
         int hi = b->getHeight();
-        zKlient->sendeEncrypted( (char*)&br, 4 );
-        zKlient->sendeEncrypted( (char*)&hi, 4 );
-        char *buffer = (char*)b->getBuffer();
+        zKlient->sendeEncrypted( (char *)&br, 4 );
+        zKlient->sendeEncrypted( (char *)&hi, 4 );
+        char *buffer = (char *)b->getBuffer();
         __int64 gr = br * hi * 4;
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->sende( &( buffer[ i ] ), l );
@@ -199,7 +199,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -239,7 +239,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -265,7 +265,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
         bool ok = d.open( Datei::Style::schreiben );
         char *buffer = new char[ 2048 ];
         int gr = 0;
-        zKlient->getNachrichtEncrypted( (char*)&gr, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&gr, 4 );
         while( gr > 0 )
         {
             int l = gr > 2048 ? 2048 : gr;
@@ -287,12 +287,12 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *dName = new char[ len + 1 ];
         dName[ (int)len ] = 0;
         if( len )
             zKlient->getNachrichtEncrypted( dName, len );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *bName = new char[ len + 1 ];
         bName[ (int)len ] = 0;
         if( len )
@@ -316,7 +316,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         dat.remove( 0, new Text( bName ) );
         delete[] bName;
@@ -327,12 +327,12 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *dName = new char[ len + 1 ];
         dName[ (int)len ] = 0;
         if( len )
             zKlient->getNachrichtEncrypted( dName, len );
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *bName = new char[ len + 1 ];
         bName[ (int)len ] = 0;
         if( len )
@@ -358,16 +358,16 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
         zKlient->sendeEncrypted( "\1", 1 );
         int br = 0;
         int hi = 0;
-        zKlient->getNachrichtEncrypted( (char*)&br, 4 );
-        zKlient->getNachrichtEncrypted( (char*)&hi, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&br, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&hi, 4 );
         __int64 gr = br * hi * 4;
         Bild *b = new Bild();
         b->neuBild( br, hi, 0 );
-        char *buffer = (char*)b->getBuffer();
+        char *buffer = (char *)b->getBuffer();
         for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
             zKlient->getNachricht( &( buffer[ i ] ), l );
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         dat.remove( 0, new Text( bName ) );
         if( dat.speichern( 0, b, new Text( bName ) ) < 0 )
@@ -394,7 +394,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
         int anz = list->getEintragAnzahl();
         if( workPfad.getLength() )
             anz++;
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         if( workPfad.getLength() )
         {
             zKlient->sendeEncrypted( "\2", 1 );
@@ -414,7 +414,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -437,10 +437,10 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
         }
         zKlient->sendeEncrypted( "\1", 1 );
         LTDBDatei dat;
-        dat.setDatei( p.getThis() );
+        dat.setDatei( dynamic_cast<Text *>( p.getThis() ) );
         dat.leseDaten( 0 );
         int anz = dat.getBildAnzahl();
-        zKlient->sendeEncrypted( (char*)&anz, 4 );
+        zKlient->sendeEncrypted( (char *)&anz, 4 );
         for( int i = 0; i < anz; i++ )
         {
             char len = (char)dat.zBildListe()->z( i )->getLength();
@@ -453,7 +453,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
     {
         zKlient->sendeEncrypted( "\1", 1 );
         unsigned char len = 0;
-        zKlient->getNachrichtEncrypted( (char*)&len, 1 );
+        zKlient->getNachrichtEncrypted( (char *)&len, 1 );
         char *name = new char[ len + 1 ];
         name[ (int)len ] = 0;
         if( len )
@@ -479,7 +479,7 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
         bool ok = d.open( Datei::Style::lesen );
         char *buffer = new char[ 2048 ];
         int gr = (int)d.getSize();
-        zKlient->sendeEncrypted( (char*)&gr, 4 );
+        zKlient->sendeEncrypted( (char *)&gr, 4 );
         while( gr > 0 )
         {
             int l = gr > 2048 ? 2048 : gr;
@@ -507,19 +507,4 @@ bool SSEditor::prozessMessage( SKlient *zKlient )
 char *SSEditor::getLetzterFehler() const
 {
     return fehler;
-}
-
-// Reference Counting
-SSEditor *SSEditor::getThis()
-{
-    ref++;
-    return this;
-}
-
-SSEditor *SSEditor::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 1 - 5
EditorServer/SSEditor.h

@@ -7,13 +7,12 @@
 using namespace Framework;
 using namespace Network;
 
-class SSEditor
+class SSEditor : public virtual ReferenceCounter
 {
 private:
     Text pfad;
     Text workPfad;
     Text fehler;
-    int ref;
 
 public:
     // Konstruktor
@@ -24,9 +23,6 @@ public:
     bool prozessMessage( SKlient *zKlient );
     // constant
     char *getLetzterFehler() const;
-    // Reference Counting
-    SSEditor *getThis();
-    SSEditor *release();
 };
 
 #endif

+ 19 - 34
EditorServer/TeamsEditor.cpp

@@ -6,13 +6,13 @@
 // Inhalt der TeamsEditor Klasse aus TeamsEditor.h
 // Konstruktor
 TeamsEditor::TeamsEditor( int id, char *pf, EdSDatenbank *db )
+    : ReferenceCounter()
 {
     pfad = pf;
     pfad += "/live/map";
     fehler = "";
     this->id = id;
     this->db = db;
-    ref = 1;
 }
 
 // Destruktor
@@ -77,37 +77,37 @@ bool TeamsEditor::prozessMessage( SKlient *zKlient )
             return 0;
         }
         int sAnz = 0;
-        zKlient->getNachrichtEncrypted( (char*)&sAnz, 4 );
-        d1.schreibe( (char*)&sAnz, 4 );
-        d2.schreibe( (char*)&sAnz, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&sAnz, 4 );
+        d1.schreibe( (char *)&sAnz, 4 );
+        d2.schreibe( (char *)&sAnz, 4 );
         db->setMaxSpieler( id, sAnz );
         int tAnz = 0;
-        zKlient->getNachrichtEncrypted( (char*)&tAnz, 4 );
-        d1.schreibe( (char*)&tAnz, 4 );
-        d2.schreibe( (char*)&tAnz, 4 );
+        zKlient->getNachrichtEncrypted( (char *)&tAnz, 4 );
+        d1.schreibe( (char *)&tAnz, 4 );
+        d2.schreibe( (char *)&tAnz, 4 );
         for( int i = 0; i < sAnz; i++ )
         { // Spielerfarbe
             int f = 0;
-            zKlient->getNachrichtEncrypted( (char*)&f, 4 );
-            d1.schreibe( (char*)&f, 4 );
-            d2.schreibe( (char*)&f, 4 );
+            zKlient->getNachrichtEncrypted( (char *)&f, 4 );
+            d1.schreibe( (char *)&f, 4 );
+            d2.schreibe( (char *)&f, 4 );
         }
         for( int i = 0; i < tAnz; i++ )
         { // Teamfarbe
             int f = 0;
-            zKlient->getNachrichtEncrypted( (char*)&f, 4 );
-            d1.schreibe( (char*)&f, 4 );
-            d2.schreibe( (char*)&f, 4 );
+            zKlient->getNachrichtEncrypted( (char *)&f, 4 );
+            d1.schreibe( (char *)&f, 4 );
+            d2.schreibe( (char *)&f, 4 );
         }
         for( int i = 0; i < tAnz; i++ )
         { // Teamname
             unsigned char l = 0;
-            zKlient->getNachrichtEncrypted( (char*)&l, 1 );
+            zKlient->getNachrichtEncrypted( (char *)&l, 1 );
             char *txt = new char[ l + 1 ];
             txt[ (int)l ] = 0;
             zKlient->getNachrichtEncrypted( txt, l );
-            d1.schreibe( (char*)&l, 1 );
-            d2.schreibe( (char*)&l, 1 );
+            d1.schreibe( (char *)&l, 1 );
+            d2.schreibe( (char *)&l, 1 );
             d1.schreibe( txt, l );
             d2.schreibe( txt, l );
             delete[] txt;
@@ -115,9 +115,9 @@ bool TeamsEditor::prozessMessage( SKlient *zKlient )
         for( int i = 0; i < tAnz; i++ )
         { // Teamgröße
             int g = 0;
-            zKlient->getNachrichtEncrypted( (char*)&g, 4 );
-            d1.schreibe( (char*)&g, 4 );
-            d2.schreibe( (char*)&g, 4 );
+            zKlient->getNachrichtEncrypted( (char *)&g, 4 );
+            d1.schreibe( (char *)&g, 4 );
+            d2.schreibe( (char *)&g, 4 );
         }
         d1.close();
         d2.close();
@@ -133,19 +133,4 @@ bool TeamsEditor::prozessMessage( SKlient *zKlient )
 char *TeamsEditor::getLetzterFehler() const
 {
     return fehler;
-}
-
-// Reference Counting
-TeamsEditor *TeamsEditor::getThis()
-{
-    ref++;
-    return this;
-}
-
-TeamsEditor *TeamsEditor::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 1 - 5
EditorServer/TeamsEditor.h

@@ -7,14 +7,13 @@
 using namespace Framework;
 using namespace Network;
 
-class TeamsEditor
+class TeamsEditor : public virtual ReferenceCounter
 {
 private:
     Text pfad;
     Text fehler;
     EdSDatenbank *db;
     int id;
-    int ref;
 
 public:
     // Konstruktor
@@ -25,7 +24,4 @@ public:
     bool prozessMessage( SKlient *zKlient );
     // constant
     char *getLetzterFehler() const;
-    // Reference Counting
-    TeamsEditor *getThis();
-    TeamsEditor *release();
 };

+ 31 - 31
EditorServer/main.cpp

@@ -7,32 +7,32 @@
 
 int main()
 {
-	struct rlimit core_limits;
-	core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
-	setrlimit(RLIMIT_CORE, &core_limits);
+    struct rlimit core_limits;
+    core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
+    setrlimit( RLIMIT_CORE, &core_limits );
 #ifdef DEBUG
     chdir( "/test/editor" );
 #endif
     Framework::initFramework();
-	Zeit *z = getZeit();
-	Text *pfad = new Text( "../log/editor/" );
-	pfad->append( z->getZeit( "y-m-d h-i-s.log" ) );
-	z->release();
-	DateiPfadErstellen( pfad->getThis() );
-	std::ofstream file;
-	file.open( pfad->getText() );
-	std::streambuf* sbuf = std::cout.rdbuf();
-	std::cout.rdbuf( file.rdbuf() );
-	pfad->release();
+    Zeit *z = getZeit();
+    Text *pfad = new Text( "../log/editor/" );
+    pfad->append( z->getZeit( "y-m-d h-i-s.log" ) );
+    z->release();
+    DateiPfadErstellen( pfad->getText() );
+    std::ofstream file;
+    file.open( pfad->getText() );
+    std::streambuf *sbuf = std::cout.rdbuf();
+    std::cout.rdbuf( file.rdbuf() );
+    pfad->release();
 
-	std::cout << "EdS: Startet...\n";
-	std::cout << "EdS: Lese init Datei ../data/edsInit.ini ...\n";
-	InitDatei *dat = new InitDatei( "../data/edsInit.ini" );
-	if( !dat->laden() )
-	{
-		std::cout << "EdS: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
-		dat->release();
-		exit( 1 );
+    std::cout << "EdS: Startet...\n";
+    std::cout << "EdS: Lese init Datei ../data/edsInit.ini ...\n";
+    InitDatei *dat = new InitDatei( "../data/edsInit.ini" );
+    if( !dat->laden() )
+    {
+        std::cout << "EdS: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
+        dat->release();
+        exit( 1 );
     }
     if( !dat->wertExistiert( "KartenPfad" ) )
     {
@@ -51,17 +51,17 @@ int main()
         }
     }
 
-	EditorServer *iServer = new EditorServer( dat );
+    EditorServer *iServer = new EditorServer( dat );
 
-	std::cout << "EdS: Der Admin Server läuft. Startforgang beendet.\n";
-	iServer->runn();
+    std::cout << "EdS: Der Admin Server läuft. Startforgang beendet.\n";
+    iServer->runn();
 
-	iServer->ende();
-	iServer->release();
-	dat->release();
-	std::cout << "EdS: Der Server ist heruntergefahren.\n";
-	file.close();
-	std::cout.rdbuf( sbuf );
+    iServer->ende();
+    iServer->release();
+    dat->release();
+    std::cout << "EdS: Der Server ist heruntergefahren.\n";
+    file.close();
+    std::cout.rdbuf( sbuf );
     Framework::releaseFramework();
-	return 0;
+    return 0;
 }