瀏覽代碼

fix compiler errors

Kolja Strohm 3 年之前
父節點
當前提交
01d853418c

+ 175 - 190
HistorieServer/Datenbank.cpp

@@ -4,17 +4,17 @@
 // Inhalt der HSDatenbank Klasse aus Datenbank.h
 // Konstruktor
 HSDatenbank::HSDatenbank( InitDatei *zIni )
+    : ReferenceCounter()
 {
-	datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(),
-							   zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
-							   (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) );
+    datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(),
+                               zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
+                               (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) );
     if( !datenbank->istOk() )
     {
         std::cout << "HS: Die Verbindung zur Datenbank konnte nicht hergestellt werden.\nDas Programm wird beendet.";
         exit( 1 );
     }
-	InitializeCriticalSection( &cs );
-	ref = 1;
+    InitializeCriticalSection( &cs );
     Text befehl = "SELECT port, admin_port  FROM server WHERE id = ";
     befehl += zIni->zWert( "ServerId" )->getText();
     lock();
@@ -32,247 +32,232 @@ HSDatenbank::HSDatenbank( InitDatei *zIni )
 // Destruktor
 HSDatenbank::~HSDatenbank()
 {
-	datenbank->release();
-	DeleteCriticalSection( &cs );
+    datenbank->release();
+    DeleteCriticalSection( &cs );
 }
 
 // nicht constant
 void HSDatenbank::lock()
 {
-	EnterCriticalSection( &cs );
+    EnterCriticalSection( &cs );
 }
 
 void HSDatenbank::unlock()
 {
-	LeaveCriticalSection( &cs );
+    LeaveCriticalSection( &cs );
 }
 
 int HSDatenbank::istAdministrator( const char *name, const char *passwort )
 {
-	Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" );
-	Text n( name );
-	n.ersetzen( "'", "''" );
-	befehl->append( (char*)n );
-	befehl->append( "' AND passwort = md5('" );
-	Text p( passwort );
-	p.ersetzen( "'", "''" );
-	befehl->append( (char*)p );
-	befehl->append( "')" );
-	lock();
-	datenbank->befehl( befehl->getText() );
-	Result res = datenbank->getResult();
-	unlock();
-	befehl->release();
-	int ret = 0;
-	if( res.zeilenAnzahl > 0 )
-		ret = TextZuInt( res.values[ 0 ].getText(), 10 );
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" );
+    Text n( name );
+    n.ersetzen( "'", "''" );
+    befehl->append( (char *)n );
+    befehl->append( "' AND passwort = md5('" );
+    Text p( passwort );
+    p.ersetzen( "'", "''" );
+    befehl->append( (char *)p );
+    befehl->append( "')" );
+    lock();
+    datenbank->befehl( befehl->getText() );
+    Result res = datenbank->getResult();
+    unlock();
+    befehl->release();
+    int ret = 0;
+    if( res.zeilenAnzahl > 0 )
+        ret = TextZuInt( res.values[ 0 ].getText(), 10 );
+    res.destroy();
+    return ret;
 }
 
 bool HSDatenbank::adminHatRecht( int id, int recht )
 {
-	Text *befehl = new Text( "SELECT * FROM benutzer_rechte WHERE benutzer_id = " );
-	befehl->append( id );
-	befehl->append( " AND rechte_id = " );
-	befehl->append( recht );
-	lock();
-	datenbank->befehl( befehl->getText() );
-	int ret = datenbank->getZeilenAnzahl();
-	unlock();
-	befehl->release();
-	return ret != 0;
+    Text *befehl = new Text( "SELECT * FROM benutzer_rechte WHERE benutzer_id = " );
+    befehl->append( id );
+    befehl->append( " AND rechte_id = " );
+    befehl->append( recht );
+    lock();
+    datenbank->befehl( befehl->getText() );
+    int ret = datenbank->getZeilenAnzahl();
+    unlock();
+    befehl->release();
+    return ret != 0;
 }
 
 bool HSDatenbank::proveKlient( int num, int sNum )
 {
-	Text *befehl = new Text( "SELECT * FROM server_client WHERE server_id = " );
-	befehl->append( sNum );
-	befehl->append( " AND client_id = " );
-	befehl->append( num );
-	lock();
-	datenbank->befehl( befehl->getText() );
-	Result res = datenbank->getResult();
-	unlock();
-	befehl->release();
-	bool ret = 0;
-	if( res.zeilenAnzahl == 1 )
-		ret = 1;
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT * FROM server_client WHERE server_id = " );
+    befehl->append( sNum );
+    befehl->append( " AND client_id = " );
+    befehl->append( num );
+    lock();
+    datenbank->befehl( befehl->getText() );
+    Result res = datenbank->getResult();
+    unlock();
+    befehl->release();
+    bool ret = 0;
+    if( res.zeilenAnzahl == 1 )
+        ret = 1;
+    res.destroy();
+    return ret;
 }
 
 Text *HSDatenbank::getKlientKey( int cId )
 {
-	lock();
-	if( !datenbank->befehl( Text( "SELECT schluessel FROM client WHERE id = " ) += cId ) )
-	{
-		unlock();
-		return 0;
-	}
-	Result res = datenbank->getResult();
-	unlock();
-	if( !res.zeilenAnzahl )
-	{
-		res.destroy();
-		return 0;
-	}
-	Text *ret = new Text( res.values[ 0 ].getText() );
-	res.destroy();
-	return ret;
+    lock();
+    if( !datenbank->befehl( Text( "SELECT schluessel FROM client WHERE id = " ) += cId ) )
+    {
+        unlock();
+        return 0;
+    }
+    Result res = datenbank->getResult();
+    unlock();
+    if( !res.zeilenAnzahl )
+    {
+        res.destroy();
+        return 0;
+    }
+    Text *ret = new Text( res.values[ 0 ].getText() );
+    res.destroy();
+    return ret;
 }
 
 void HSDatenbank::unregisterKlient( int num, int sNum )
 {
-	Text *befehl = new Text( "DELETE FROM server_client WHERE client_id = " );
-	befehl->append( num );
-	befehl->append( " AND server_id = " );
-	befehl->append( sNum );
-	lock();
-	datenbank->befehl( befehl->getText() );
-	unlock();
-	befehl->release();
+    Text *befehl = new Text( "DELETE FROM server_client WHERE client_id = " );
+    befehl->append( num );
+    befehl->append( " AND server_id = " );
+    befehl->append( sNum );
+    lock();
+    datenbank->befehl( befehl->getText() );
+    unlock();
+    befehl->release();
 }
 
 bool HSDatenbank::setServerStatus( int id, int status )
 {
-	Text *befehl = new Text( "UPDATE server SET server_status_id = " );
-	*befehl += status;
-	*befehl += "WHERE id = ";
-	*befehl += id;
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	bool ret = datenbank->getZeilenAnzahl() != 0;
-	unlock();
-	befehl->release();
-	return ret;
+    Text *befehl = new Text( "UPDATE server SET server_status_id = " );
+    *befehl += status;
+    *befehl += "WHERE id = ";
+    *befehl += id;
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    bool ret = datenbank->getZeilenAnzahl() != 0;
+    unlock();
+    befehl->release();
+    return ret;
 }
 
 bool HSDatenbank::setMaxSpiele( int id, int maxS )
 {
-	Text *befehl = new Text( "UPDATE server SET max_tasks = " );
-	befehl->append( maxS );
-	befehl->append( " WHERE id = " );
-	befehl->append( id );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	bool ret = datenbank->getZeilenAnzahl() > 0;
-	unlock();
-	befehl->release();
-	return ret;
+    Text *befehl = new Text( "UPDATE server SET max_tasks = " );
+    befehl->append( maxS );
+    befehl->append( " WHERE id = " );
+    befehl->append( id );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    bool ret = datenbank->getZeilenAnzahl() > 0;
+    unlock();
+    befehl->release();
+    return ret;
 }
 
 bool HSDatenbank::serverIstNichtPausiert( int id )
 {
-	Text *befehl = new Text( "SELECT server_status_id FROM server WHERE id = " );
-	befehl->append( id );
-	lock();
-	if( !datenbank->befehl( befehl->getText() ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	Result res = datenbank->getResult();
-	unlock();
-	befehl->release();
-	if( !res.zeilenAnzahl )
-	{
-		res.destroy();
-		return 0;
-	}
-	bool ret = (int)res.values[ 0 ] == 3;
-	res.destroy();
-	return ret;
+    Text *befehl = new Text( "SELECT server_status_id FROM server WHERE id = " );
+    befehl->append( id );
+    lock();
+    if( !datenbank->befehl( befehl->getText() ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    Result res = datenbank->getResult();
+    unlock();
+    befehl->release();
+    if( !res.zeilenAnzahl )
+    {
+        res.destroy();
+        return 0;
+    }
+    bool ret = (int)res.values[ 0 ] == 3;
+    res.destroy();
+    return ret;
 }
 
 bool HSDatenbank::getSpielServerPortIp( int id, short *port, Text *ip )
 {
-	lock();
-	if( !datenbank->befehl( Text( "SELECT admin_port, ip FROM server WHERE id = " ) += id ) )
-	{
-		unlock();
-		return 0;
-	}
-	Result res = datenbank->getResult();
-	unlock();
-	if( !res.zeilenAnzahl )
-	{
-		res.destroy();
-		return 0;
-	}
-	*port = (short)(int)res.values[ 0 ];
-	*ip = res.values[ 1 ].getText();
-	res.destroy();
-	return 1;
+    lock();
+    if( !datenbank->befehl( Text( "SELECT admin_port, ip FROM server WHERE id = " ) += id ) )
+    {
+        unlock();
+        return 0;
+    }
+    Result res = datenbank->getResult();
+    unlock();
+    if( !res.zeilenAnzahl )
+    {
+        res.destroy();
+        return 0;
+    }
+    *port = (short)(int)res.values[ 0 ];
+    *ip = res.values[ 1 ].getText();
+    res.destroy();
+    return 1;
 }
 
 bool HSDatenbank::istSpielHistorieFrei( int id )
 {
-	lock();
-	if( !datenbank->befehl( Text( "SELECT * FROM server_historie_spiel WHERE spiel_id = " ) += id ) )
-	{
-		unlock();
-		return 0;
-	}
-	bool ret = datenbank->getZeilenAnzahl() == 0;
-	unlock();
-	return ret;
+    lock();
+    if( !datenbank->befehl( Text( "SELECT * FROM server_historie_spiel WHERE spiel_id = " ) += id ) )
+    {
+        unlock();
+        return 0;
+    }
+    bool ret = datenbank->getZeilenAnzahl() == 0;
+    unlock();
+    return ret;
 }
 
 bool HSDatenbank::addSpielHistorie( int server, int spiel )
 {
-	Text *befehl = new Text( "INSERT INTO server_historie_spiel( spiel_id, server_historie_id ) VALUES( " );
-	*befehl += spiel;
-	*befehl += ", ";
-	*befehl += server;
-	*befehl += " )";
-	lock();
-	if( !datenbank->befehl( *befehl ) )
-	{
-		unlock();
-		befehl->release();
-		return 0;
-	}
-	unlock();
-	befehl->release();
-	lock();
-	if( !datenbank->befehl( Text( "UPDATE server SET tasks = tasks + 1 WHERE id = " ) += server ) )
-	{
-		unlock();
-		return 0;
-	}
-	unlock();
-	return 1;
+    Text *befehl = new Text( "INSERT INTO server_historie_spiel( spiel_id, server_historie_id ) VALUES( " );
+    *befehl += spiel;
+    *befehl += ", ";
+    *befehl += server;
+    *befehl += " )";
+    lock();
+    if( !datenbank->befehl( *befehl ) )
+    {
+        unlock();
+        befehl->release();
+        return 0;
+    }
+    unlock();
+    befehl->release();
+    lock();
+    if( !datenbank->befehl( Text( "UPDATE server SET tasks = tasks + 1 WHERE id = " ) += server ) )
+    {
+        unlock();
+        return 0;
+    }
+    unlock();
+    return 1;
 }
 
 // constant
 Text *HSDatenbank::getLetzterFehler() const
 {
-	return datenbank->getLetzterFehler();
-}
-
-// Reference Counting
-HSDatenbank *HSDatenbank::getThis()
-{
-	ref++;
-	return this;
-}
-
-HSDatenbank *HSDatenbank::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return datenbank->getLetzterFehler();
 }

+ 27 - 31
HistorieServer/Datenbank.h

@@ -10,43 +10,39 @@ using namespace sql;
 
 namespace Admin_Recht
 {
-	const int HSStarten = 41;
-	const int HSBeenden = 42;
-	const int HSPausieren = 43;
-	const int HSMSChange = 44;
+    const int HSStarten = 41;
+    const int HSBeenden = 42;
+    const int HSPausieren = 43;
+    const int HSMSChange = 44;
 }
 
-class HSDatenbank
+class HSDatenbank : public virtual ReferenceCounter
 {
 private:
-	Datenbank *datenbank;
-	CRITICAL_SECTION cs;
-	int ref;
+    Datenbank *datenbank;
+    CRITICAL_SECTION cs;
 
 public:
-	// Konstruktor
-	HSDatenbank( InitDatei *zIni );
-	// Destruktor
-	~HSDatenbank();
-	// 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 setMaxSpiele( int id, int maxS );
-	bool serverIstNichtPausiert( int id );
-	bool getSpielServerPortIp( int id, short *port, Text *ip );
-	bool istSpielHistorieFrei( int id );
-	bool addSpielHistorie( int server, int spiel );
-	// constant
-	Text *getLetzterFehler() const;
-	// Reference Counting
-	HSDatenbank *getThis();
-	HSDatenbank *release();
+    // Konstruktor
+    HSDatenbank( InitDatei *zIni );
+    // Destruktor
+    ~HSDatenbank();
+    // 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 setMaxSpiele( int id, int maxS );
+    bool serverIstNichtPausiert( int id );
+    bool getSpielServerPortIp( int id, short *port, Text *ip );
+    bool istSpielHistorieFrei( int id );
+    bool addSpielHistorie( int server, int spiel );
+    // constant
+    Text *getLetzterFehler() const;
 };
 
 #endif

二進制
HistorieServer/HistorieServer


+ 23 - 23
HistorieServer/HistorieServer.cpp

@@ -16,7 +16,7 @@ HistorieServer::HistorieServer( 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 HistorieServer::runn()
         if( end && klient )
         {
             klient->trenne();
-            klient = klient->release();
+            klient = (SSLSKlient *)klient->release();
             Sleep( 1000 );
             return;
         }
         if( !klient )
             continue;
-        HSAKlient * clHandle = new HSAKlient( klient, (HistorieServer *)getThis() );
+        HSAKlient *clHandle = new HSAKlient( klient, dynamic_cast<HistorieServer *>( getThis() ) );
         clHandle->start();
     }
 }
@@ -85,7 +85,7 @@ void HistorieServer::thread()
         if( !klient )
             continue;
         Framework::getThreadRegister()->cleanUpClosedThreads();
-        HSKlient * clHandle = new HSKlient( klient, (HistorieServer *)getThis() );
+        HSKlient *clHandle = new HSKlient( klient, dynamic_cast<HistorieServer *>( getThis() ) );
         EnterCriticalSection( &cs );
         klients->set( clHandle, klientAnzahl );
         klientAnzahl++;
@@ -101,13 +101,13 @@ void HistorieServer::close()
     EnterCriticalSection( &cs );
     for( int i = 0; i < klientAnzahl; i++ )
         klients->z( i )->absturz();
-    klients = klients->release();
+    klients = ( RCArray<HSKlient> * )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();
@@ -220,7 +220,7 @@ bool HistorieServer::absturzKlient( int klientId )
     return gefunden;
 }
 
-bool HistorieServer::removeKlient( HSKlient * zKlient )
+bool HistorieServer::removeKlient( HSKlient *zKlient )
 {
     bool gefunden = 0;
     EnterCriticalSection( &cs );
@@ -287,7 +287,7 @@ InitDatei *HistorieServer::zIni() const
 
 // Inhalt der HSAKlient Klasse aus HistorieServer.h
 // Konstruktor 
-HSAKlient::HSAKlient( SSLSKlient * klient, HistorieServer * hs )
+HSAKlient::HSAKlient( SSLSKlient *klient, HistorieServer *hs )
     : Thread()
 {
     this->klient = klient;
@@ -326,13 +326,13 @@ void HSAKlient::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 )
@@ -428,7 +428,7 @@ void HSAKlient::thread()
                     }
                     else
                         ok = 1;
-                    if( ok &&hs->hatClients() )
+                    if( ok && hs->hatClients() )
                     {
                         errorZuKlient( "Es sind noch Klients Online. Bitte versuche es später erneut." );
                         break;
@@ -524,7 +524,7 @@ void HSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int maxS = 0;
-                    klient->getNachricht( (char *)& maxS, 4 );
+                    klient->getNachricht( (char *)&maxS, 4 );
                     if( hs->zDB()->adminHatRecht( adminId, Admin_Recht::HSMSChange ) )
                     {
                         if( hs->setMaxSpiele( maxS ) )
@@ -546,8 +546,8 @@ void HSAKlient::thread()
                 {
                     klient->sende( "\1", 1 );
                     int klientId = 0;
-                    klient->getNachricht( (char *)& klientId, 4 );
-                    if( klientId &&hs->absturzKlient( klientId ) )
+                    klient->getNachricht( (char *)&klientId, 4 );
+                    if( klientId && hs->absturzKlient( klientId ) )
                         klient->sende( "\1", 1 );
                     else
                         klient->sende( "\0", 1 );
@@ -579,7 +579,7 @@ void HSAKlient::errorZuKlient( const char *nachricht ) const // sendet eine Fehl
 
 // Inhalt der HSKlient aus HistorieServer.h
 // Konstruktor
-HSKlient::HSKlient( SKlient * klient, HistorieServer * hs )
+HSKlient::HSKlient( SKlient *klient, HistorieServer *hs )
     : Thread()
 {
     this->klient = klient;
@@ -635,7 +635,7 @@ void HSKlient::sendeVerzeichnis( char *pfad, int gpl )
         klient->sendeEncrypted( &len, 1 );
         klient->sendeEncrypted( pfad + gpl, len );
         __int64 gr = d->getSize();
-        klient->sendeEncrypted( (char *)& gr, 8 );
+        klient->sendeEncrypted( (char *)&gr, 8 );
         char *bytes = new char[ 2048 ];
         while( gr > 0 )
         {
@@ -671,7 +671,7 @@ void HSKlient::thread()
             switch( c )
             {
             case 1: // Klient identifikation
-                klient->getNachrichtEncrypted( (char *)& klientNummer, 4 );
+                klient->getNachrichtEncrypted( (char *)&klientNummer, 4 );
                 if( !hs->zDB()->proveKlient( klientNummer, hs->getId() ) )
                 {
                     klientNummer = 0;
@@ -702,8 +702,8 @@ void HSKlient::thread()
                         if( 1 )
                         {
                             int klientId = 0;
-                            klient->getNachrichtEncrypted( (char *)& klientId, 4 );
-                            if( klientId &&hs->absturzKlient( klientId ) )
+                            klient->getNachrichtEncrypted( (char *)&klientId, 4 );
+                            if( klientId && hs->absturzKlient( klientId ) )
                                 klient->sendeEncrypted( "\1", 1 );
                             else
                                 klient->sendeEncrypted( "\0", 1 );
@@ -739,8 +739,8 @@ void HSKlient::thread()
                     klient->sendeEncrypted( "\1", 1 );
                     int spielServerId = 0;
                     int spielId = 0;
-                    klient->getNachrichtEncrypted( (char *)& spielServerId, 4 );
-                    klient->getNachrichtEncrypted( (char *)& spielId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&spielServerId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&spielId, 4 );
                     if( !hs->zDB()->istSpielHistorieFrei( spielId ) )
                     {
                         errorZuKlient( "Die Spiel-Historie dieses Spiels ist bereits eingeordnet." );
@@ -775,10 +775,10 @@ void HSKlient::thread()
                 {
                     klient->sendeEncrypted( "\1", 1 );
                     int spielId = 0;
-                    klient->getNachrichtEncrypted( (char *)& spielId, 4 );
+                    klient->getNachrichtEncrypted( (char *)&spielId, 4 );
                     if( !hs->zIni()->wertExistiert( "SpielHistoriePfad" ) )
                         hs->zIni()->addWert( "SpielHistoriePfad", "../spiel_historie" );
-                    Text * pf = new Text( hs->zIni()->zWert( "SpielHistoriePfad" )->getText() );
+                    Text *pf = new Text( hs->zIni()->zWert( "SpielHistoriePfad" )->getText() );
                     if( pf->getText()[ pf->getLength() - 1 ] != '/' )
                         pf->append( "/" );
                     pf->append( spielId );

+ 6 - 4
HistorieServer/HistorieServer.vcxproj

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

+ 85 - 100
HistorieServer/SpielServerKlient.cpp

@@ -4,133 +4,118 @@
 // Inhalt der SpielServerKlient Klasse aus SpielServerKlient.h
 // Konstruktor
 SpielServerKlient::SpielServerKlient()
+    : ReferenceCounter()
 {
-	k = new SSLKlient();
-	fehler = new Text();
-	verbunden = 0;
-	ref = 1;
+    k = new SSLKlient();
+    fehler = new Text();
+    verbunden = 0;
 }
 
 // Destruktor
 SpielServerKlient::~SpielServerKlient()
 {
-	if( verbunden )
-		trenne();
-	k->release();
-	fehler->release();
+    if( verbunden )
+        trenne();
+    k->release();
+    fehler->release();
 }
 
 // privat
 bool SpielServerKlient::verbinde( short port, char *ip )
 {
-	if( verbunden )
-		trenne();
-	if( k->verbinde( port, ip ) )
-	{
-		verbunden = 1;
-		return 1;
-	}
-	return 0;
+    if( verbunden )
+        trenne();
+    if( k->verbinde( port, ip ) )
+    {
+        verbunden = 1;
+        return 1;
+    }
+    return 0;
 }
 
 bool SpielServerKlient::trenne()
 {
-	k->sende( "\3", 1 );
-	char ret = 0;
-	k->getNachricht( &ret, 1 );
-	k->trenne();
-	verbunden = 0;
-	return 1;
+    k->sende( "\3", 1 );
+    char ret = 0;
+    k->getNachricht( &ret, 1 );
+    k->trenne();
+    verbunden = 0;
+    return 1;
 }
 
 // nicht constant
 bool SpielServerKlient::downloadSpielHistorie( short port, char *ip, int spiel, char *gpf )
 {
-	if( !verbinde( port, ip ) )
-	{
-		fehler->setText( "Fehler beim verbinden mit Spiel Server." );
-		return 0;
-	}
-	k->sende( "\xB", 1 );
-	unsigned char ret = 0;
-	k->getNachricht( (char*)&ret, 1 );
-	if( ret == 1 )
-	{
-		k->sende( (char*)&spiel, 4 );
-		k->getNachricht( (char*)&ret, 1 );
-		if( ret == 1 )
-		{
-			Text *pfad = new Text( gpf );
-			pfad->ersetzen( '\\', '/' );
-			if( pfad->getText()[ pfad->getLength() - 1 ] != '/' )
-				pfad->append( "/" );
-			pfad->append( spiel );
-			pfad->append( "/" );
-			k->getNachricht( (char*)&ret, 1 );
-			while( ret )
-			{
-				char *pf = new char[ ret + 1 ];
-				pf[ (int)ret ] = 0;
-				k->getNachricht( pf, ret );
-				__int64 gr = 0;
-				k->getNachricht( (char*)&gr, 8 );
-				Datei *d = new Datei();
-				d->setDatei( Text( pfad->getText() ) += pf );
-				d->erstellen();
-				d->open( Datei::Style::schreiben );
-				char *bytes = new char[ 2048 ];
-				while( gr )
-				{
-					short len = gr > 2048 ? 2048 : (short)gr;
-					k->getNachricht( bytes, len );
-					d->schreibe( bytes, len );
-					gr -= len;
-				}
-				delete[] bytes;
-				d->close();
-				d->release();
-				delete[] pf;
-				k->getNachricht( (char*)&ret, 1 );
-			}
-			pfad->release();
-		}
-	}
-	if( ret == 3 )
-	{
-		*fehler = "Fehler, Spielserver rückgabe: ";
-		k->getNachricht( (char*)&ret, 1 );
-		char *err = new char[ ret + 1 ];
-		err[ (int)ret ] = 0;
-		k->getNachricht( err, ret );
-		*fehler += err;
-		delete[] err;
-		return 0;
-	}
-	return 1;
+    if( !verbinde( port, ip ) )
+    {
+        fehler->setText( "Fehler beim verbinden mit Spiel Server." );
+        return 0;
+    }
+    k->sende( "\xB", 1 );
+    unsigned char ret = 0;
+    k->getNachricht( (char *)&ret, 1 );
+    if( ret == 1 )
+    {
+        k->sende( (char *)&spiel, 4 );
+        k->getNachricht( (char *)&ret, 1 );
+        if( ret == 1 )
+        {
+            Text *pfad = new Text( gpf );
+            pfad->ersetzen( '\\', '/' );
+            if( pfad->getText()[ pfad->getLength() - 1 ] != '/' )
+                pfad->append( "/" );
+            pfad->append( spiel );
+            pfad->append( "/" );
+            k->getNachricht( (char *)&ret, 1 );
+            while( ret )
+            {
+                char *pf = new char[ ret + 1 ];
+                pf[ (int)ret ] = 0;
+                k->getNachricht( pf, ret );
+                __int64 gr = 0;
+                k->getNachricht( (char *)&gr, 8 );
+                Datei *d = new Datei();
+                d->setDatei( Text( pfad->getText() ) += pf );
+                d->erstellen();
+                d->open( Datei::Style::schreiben );
+                char *bytes = new char[ 2048 ];
+                while( gr )
+                {
+                    short len = gr > 2048 ? 2048 : (short)gr;
+                    k->getNachricht( bytes, len );
+                    d->schreibe( bytes, len );
+                    gr -= len;
+                }
+                delete[] bytes;
+                d->close();
+                d->release();
+                delete[] pf;
+                k->getNachricht( (char *)&ret, 1 );
+            }
+            pfad->release();
+        }
+    }
+    if( ret == 3 )
+    {
+        *fehler = "Fehler, Spielserver rückgabe: ";
+        k->getNachricht( (char *)&ret, 1 );
+        char *err = new char[ ret + 1 ];
+        err[ (int)ret ] = 0;
+        k->getNachricht( err, ret );
+        *fehler += err;
+        delete[] err;
+        return 0;
+    }
+    return 1;
 }
 
 // constant
 Text *SpielServerKlient::getLetzterFehler() const
 {
-	return fehler->getThis();
+    return dynamic_cast<Text *>( fehler->getThis() );
 }
 
 Text *SpielServerKlient::zLetzterFehler() const
 {
-	return fehler;
-}
-
-// Reference Counting
-SpielServerKlient *SpielServerKlient::getThis()
-{
-	ref++;
-	return this;
-}
-
-SpielServerKlient *SpielServerKlient::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    return fehler;
 }

+ 16 - 20
HistorieServer/SpielServerKlient.h

@@ -7,30 +7,26 @@
 using namespace Network;
 using namespace Framework;
 
-class SpielServerKlient
+class SpielServerKlient : public virtual ReferenceCounter
 {
 private:
-	SSLKlient *k;
-	Text *fehler;
-	bool verbunden;
-	int ref;
-	// privat
-	bool verbinde( short port, char *ip );
-	bool trenne();
+    SSLKlient *k;
+    Text *fehler;
+    bool verbunden;
+    // privat
+    bool verbinde( short port, char *ip );
+    bool trenne();
 
 public:
-	// Konstruktor
-	SpielServerKlient();
-	// Destruktor
-	~SpielServerKlient();
-	// nicht constant
-	bool downloadSpielHistorie( short port, char *ip, int spiel, char *gpf );
-	// constant
-	Text *getLetzterFehler() const;
-	Text *zLetzterFehler() const;
-	// Reference Counting
-	SpielServerKlient *getThis();
-	SpielServerKlient *release();
+    // Konstruktor
+    SpielServerKlient();
+    // Destruktor
+    ~SpielServerKlient();
+    // nicht constant
+    bool downloadSpielHistorie( short port, char *ip, int spiel, char *gpf );
+    // constant
+    Text *getLetzterFehler() const;
+    Text *zLetzterFehler() const;
 };
 
 #endif

+ 32 - 32
HistorieServer/main.cpp

@@ -7,31 +7,31 @@
 
 int main()
 {
-	struct rlimit core_limits;
-	core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
-	setrlimit(RLIMIT_CORE, &core_limits);
+    struct rlimit core_limits;
+    core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
+    setrlimit( RLIMIT_CORE, &core_limits );
 
     Framework::initFramework();
-	Zeit *z = getZeit();
-	Text *pfad = new Text( "../log/historie/" );
-	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/historie/" );
+    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 << "HS: Startet...\n";
-	std::cout << "HS: Lese init Datei ../data/hsInit.ini ...\n";
-	InitDatei *dat = new InitDatei( "../data/hsInit.ini" );
-	if( !dat->laden() )
-	{
-		std::cout << "HS: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
-		dat->release();
-		exit( 1 );
-	}
+    std::cout << "HS: Startet...\n";
+    std::cout << "HS: Lese init Datei ../data/hsInit.ini ...\n";
+    InitDatei *dat = new InitDatei( "../data/hsInit.ini" );
+    if( !dat->laden() )
+    {
+        std::cout << "HS: error: Datei konnte nicht gelesen werden. Das Programm wird geschlossen.\n";
+        dat->release();
+        exit( 1 );
+    }
     const char *wichtig[] = { "ServerId", "DBBenutzer", "DBPasswort", "DBName", "DBIP", "DBPort", "Aktiv", "SpielHistoriePfad", "SSLPasswort", "SSLCert", "SSLKey" };
     for( const char *w : wichtig )
     {
@@ -43,17 +43,17 @@ int main()
         }
     }
 
-	HistorieServer *hServer = new HistorieServer( dat );
+    HistorieServer *hServer = new HistorieServer( dat );
 
-	std::cout << "HS: Der Admin Server läuft. Startforgang beendet.\n";
-	hServer->runn();
+    std::cout << "HS: Der Admin Server läuft. Startforgang beendet.\n";
+    hServer->runn();
 
-	hServer->ende();
-	hServer->release();
-	dat->release();
-	std::cout << "HS: Der Server ist heruntergefahren.\n";
-	file.close();
-	std::cout.rdbuf( sbuf );
+    hServer->ende();
+    hServer->release();
+    dat->release();
+    std::cout << "HS: Der Server ist heruntergefahren.\n";
+    file.close();
+    std::cout.rdbuf( sbuf );
     Framework::releaseFramework();
-	return 0;
+    return 0;
 }