Pārlūkot izejas kodu

Auf neue Datenbank ausgerichtet

Kolja Strohm 7 gadi atpakaļ
vecāks
revīzija
16812ce4f5

+ 37 - 134
KartenServer/Datenbank.cpp

@@ -1,25 +1,33 @@
 #include "Datenbank.h"
+#include <iostream>
 #include <Zeit.h>
 
 // Inhalt der LSDatenbank Klasse aus Datenbank.h
 // Konstruktor
 KSDatenbank::KSDatenbank( InitDatei *zIni )
 {
-    if( !zIni->wertExistiert( "DBBenutzer" ) )
-        zIni->addWert( "DBBenutzer", "kartenserveru" );
-    if( !zIni->wertExistiert( "DBPasswort" ) )
-        zIni->addWert( "DBPasswort", "LTKitorServerPW" );
-    if( !zIni->wertExistiert( "DBName" ) )
-        zIni->addWert( "DBName", "koljadb" );
-    if( !zIni->wertExistiert( "DBIP" ) )
-        zIni->addWert( "DBIP", "127.0.0.1" );
-    if( !zIni->wertExistiert( "DBPort" ) )
-        zIni->addWert( "DBPort", "5432" );
     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 << "KS: Die Verbindung zur Datenbank konnte nicht hergestellt werden.\nDas Programm wird beendet.";
+        exit( 1 );
+    }
     InitializeCriticalSection( &cs );
     ref = 1;
+    Text befehl = "SELECT port, admin_port  FROM server WHERE id = ";
+    befehl += zIni->zWert( "ServerId" )->getText();
+    lock();
+    datenbank->befehl( befehl );
+    Result res = datenbank->getResult();
+    unlock();
+    if( res.zeilenAnzahl == 1 )
+    {
+        zIni->addWert( "ServerPort", res.values[ 0 ] );
+        zIni->addWert( "AdminServerPort", res.values[ 1 ] );
+    }
+    res.destroy();
 }
 
 // Destruktor
@@ -43,10 +51,14 @@ void KSDatenbank::unlock()
 int KSDatenbank::istAdministrator( const char *name, const char *passwort )
 {
     Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" );
-    befehl->append( name );
-    befehl->append( "' AND passwort = '" );
-    befehl->append( passwort );
-    befehl->append( "'" );
+    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();
@@ -75,26 +87,22 @@ bool KSDatenbank::adminHatRecht( int id, int recht )
 
 bool KSDatenbank::proveKlient( int num, int sNum )
 {
-    Text *befehl = new Text( "SELECT * FROM server_karten_clients WHERE server_karten_id = " );
+    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();
+    int ret = datenbank->getZeilenAnzahl();
     unlock();
     befehl->release();
-    bool ret = 0;
-    if( res.zeilenAnzahl == 1 )
-        ret = 1;
-    res.destroy();
-    return ret;
+    return ret == 1;
 }
 
 Text *KSDatenbank::getKlientKey( int cId )
 {
     lock();
-    if( !datenbank->befehl( Text( "SELECT schluessel FROM clients WHERE id = " ) += cId ) )
+    if( !datenbank->befehl( Text( "SELECT schluessel FROM client WHERE id = " ) += cId ) )
     {
         unlock();
         return 0;
@@ -113,9 +121,9 @@ Text *KSDatenbank::getKlientKey( int cId )
 
 void KSDatenbank::unregisterKlient( int num, int sNum )
 {
-    Text *befehl = new Text( "DELETE FROM server_karten_clients WHERE client_id = " );
+    Text *befehl = new Text( "DELETE FROM server_client WHERE client_id = " );
     befehl->append( num );
-    befehl->append( " AND server_karten_id = " );
+    befehl->append( " AND server_id = " );
     befehl->append( sNum );
     lock();
     datenbank->befehl( befehl->getText() );
@@ -123,114 +131,9 @@ void KSDatenbank::unregisterKlient( int num, int sNum )
     befehl->release();
 }
 
-bool KSDatenbank::serverAnmelden( InitDatei *zIni )
-{
-    if( !zIni->wertExistiert( "ServerId" ) )
-        zIni->addWert( "ServerId", "0" );
-    if( !zIni->wertExistiert( "ServerName" ) )
-        zIni->addWert( "ServerName", "Name" );
-    if( !zIni->wertExistiert( "ServerPort" ) )
-        zIni->addWert( "ServerPort", "49144" );
-    if( !zIni->wertExistiert( "ServerIP" ) )
-        zIni->addWert( "ServerIP", "127.0.0.1" );
-    if( !zIni->wertExistiert( "AdminServerPort" ) )
-        zIni->addWert( "AdminServerPort", "49143" );
-    if( !zIni->wertExistiert( "Aktiv" ) )
-        zIni->addWert( "Aktiv", "FALSE" );
-    if( !zIni->wertExistiert( "MaxKarten" ) )
-        zIni->addWert( "MaxKarten", "50" );
-    bool insert = 0;
-    int id = *zIni->zWert( "ServerId" );
-    if( id )
-    {
-        lock();
-        if( !datenbank->befehl( Text( "SELECT id FROM server_karten WHERE id = " ) += id ) )
-        {
-            unlock();
-            return 0;
-        }
-        int anz = datenbank->getZeilenAnzahl();
-        unlock();
-        insert = anz == 0;
-        if( !insert )
-        {
-            lock();
-            if( !datenbank->befehl( Text( "SELECT id FROM server_karten WHERE server_status_id = 1 AND id = " ) += id ) )
-            {
-                unlock();
-                return 0;
-            }
-            int anz = datenbank->getZeilenAnzahl();
-            unlock();
-            if( !anz ) // Server läuft bereits
-                return 0;
-        }
-    }
-    if( insert || !id )
-    { // Neuer Eintrag in Tabelle server_karten
-        Text *befehl = new Text( "INSERT INTO server_karten( " );
-        if( id )
-            *befehl += "id, ";
-        *befehl += "name, ip, port, admin_port, server_status_id, max_karten ) VALUES( ";
-        if( id )
-        {
-            *befehl += id;
-            *befehl += ", ";
-        }
-        *befehl += "'";
-        *befehl += zIni->zWert( "ServerName" )->getText();
-        *befehl += "', '";
-        *befehl += zIni->zWert( "ServerIP" )->getText();
-        *befehl += "', ";
-        *befehl += zIni->zWert( "ServerPort" )->getText();
-        *befehl += ", ";
-        *befehl += zIni->zWert( "AdminServerPort" )->getText();
-        *befehl += ", 1, ";
-        *befehl += zIni->zWert( "MaxKarten" )->getText();
-        *befehl += " ) RETURNING id";
-        lock();
-        if( !datenbank->befehl( *befehl ) )
-        {
-            unlock();
-            befehl->release();
-            return 0;
-        }
-        Result res = datenbank->getResult();
-        unlock();
-        befehl->release();
-        if( !res.zeilenAnzahl )
-        {
-            res.destroy();
-            return 0;
-        }
-        zIni->setWert( "ServerId", res.values[ 0 ] );
-        return 1;
-    }
-    else
-    { // Alten Eintrag aus Tabelle server_karten ändern
-        Text *befehl = new Text( "UPDATE server_karten SET name = '" );
-        *befehl += zIni->zWert( "ServerName" )->getText();
-        *befehl += "', port = ";
-        *befehl += zIni->zWert( "ServerPort" )->getText();
-        *befehl += ", ip = '";
-        *befehl += zIni->zWert( "ServerIP" )->getText();
-        *befehl += "', max_karten = ";
-        *befehl += zIni->zWert( "MaxKarten" )->getText();
-        *befehl += ", admin_port = ";
-        *befehl += zIni->zWert( "AdminServerPort" )->getText();
-        *befehl += " WHERE id = ";
-        *befehl += id;
-        lock();
-        bool ret = datenbank->befehl( *befehl );
-        unlock();
-        befehl->release();
-        return ret;
-    }
-}
-
 bool KSDatenbank::setServerStatus( int id, int status )
 {
-    Text *befehl = new Text( "UPDATE server_karten SET server_status_id = " );
+    Text *befehl = new Text( "UPDATE server SET server_status_id = " );
     *befehl += status;
     *befehl += "WHERE id = ";
     *befehl += id;
@@ -249,7 +152,7 @@ bool KSDatenbank::setServerStatus( int id, int status )
 
 bool KSDatenbank::setMaxKarten( int id, int maxK )
 {
-    Text *befehl = new Text( "UPDATE server_karten SET max_karten = " );
+    Text *befehl = new Text( "UPDATE server SET max_tasks = " );
     befehl->append( maxK );
     befehl->append( " WHERE id = " );
     befehl->append( id );
@@ -268,7 +171,7 @@ bool KSDatenbank::setMaxKarten( int id, int maxK )
 
 int KSDatenbank::getAdminPort( int id )
 {
-    Text *befehl = new Text( "SELECT admin_port FROM server_karten WHERE id = " );
+    Text *befehl = new Text( "SELECT admin_port FROM server WHERE id = " );
     befehl->append( id );
     lock();
     if( !datenbank->befehl( befehl->getText() ) )
@@ -292,7 +195,7 @@ int KSDatenbank::getAdminPort( int id )
 
 bool KSDatenbank::serverIstNichtPausiert( int id )
 {
-    Text *befehl = new Text( "SELECT server_status_id FROM server_karten WHERE id = " );
+    Text *befehl = new Text( "SELECT server_status_id FROM server WHERE id = " );
     befehl->append( id );
     lock();
     if( !datenbank->befehl( befehl->getText() ) )
@@ -401,7 +304,7 @@ bool KSDatenbank::getEditorServerPortIp( int karteId, int *port, Text *ip )
 {
     if( !port || !ip )
         return 0;
-    Text befehl = "SELECT a.port, a.ip FROM server_editor a, karte b WHERE a.id = b.server_editor_id AND b.id = ";
+    Text befehl = "SELECT a.port, a.ip FROM server a, karte b WHERE a.server_typ_name = 'editor' AND a.id = b.server_editor_id AND b.id = ";
     befehl += karteId;
     lock();
     if( !datenbank->befehl( befehl ) )

+ 4 - 5
KartenServer/Datenbank.h

@@ -11,10 +11,10 @@ using namespace sql;
 
 namespace Admin_Recht
 {
-	const int KSStarten = 0x00000036;
-	const int KSBeenden = 0x00000037;
-	const int KSPausieren = 0x00000038;
-	const int KSMKChange = 0x00000039;
+	const int KSStarten = 53;
+	const int KSBeenden = 54;
+	const int KSPausieren = 55;
+	const int KSMKChange = 56;
 }
 
 struct AHDaten;
@@ -39,7 +39,6 @@ public:
 	bool proveKlient( int num, int sNum );
 	Text *getKlientKey( int cId );
 	void unregisterKlient( int num, int sNum );
-	bool serverAnmelden( InitDatei *zIni );
 	bool setServerStatus( int id, int status );
 	bool setMaxKarten( int id, int maxK );
 	int getAdminPort( int id );

+ 0 - 8
KartenServer/KartenServer.cpp

@@ -17,14 +17,6 @@ KartenServer::KartenServer( InitDatei *zIni )
     gesendet = 0;
     fehler = new Text();
     ini = zIni->getThis();
-    if( !db->serverAnmelden( zIni ) )
-    {
-        std::cout << "KS: Der Server konnte nicht in die Datenbank eingetragen werden:\n";
-        Text *txt = db->getLetzterFehler();
-        std::cout << txt->getText() << "\nDas Programm wird beendet.";
-        txt->release();
-        exit( 1 );
-    }
     id = *zIni->zWert( "ServerId" );
     server = new Server();
     aServer = new Server();

+ 16 - 20
KartenServer/main.cpp

@@ -1,20 +1,12 @@
-#ifdef WIN32
-#include <main.h>
-#endif
 #include "KartenServer.h"
 #include <Zeit.h>
 #include <iostream>
 #include <fstream>
 #include <Globals.h>
 
-#ifdef WIN32
-int KSGStart Framework::Start( Startparam p )
-{
-#else
 int main()
 {
     Framework::initFramework();
-#endif
 	Zeit *z = getZeit();
 	Text *pfad = new Text( "../log/karten/" );
 	pfad->append( z->getZeit( "y-m-d h-i-s.log" ) );
@@ -35,15 +27,22 @@ int main()
 		dat->release();
 		exit( 1 );
 	}
-
-	if( dat->wertExistiert( "KartenPfad" ) )
-		dat->addWert( "KartenPfad", "karten" );
-	if( !DateiExistiert( dat->zWert( "KartenPfad" )->getText() ) )
-	{
-		Text pf = dat->zWert("KartenPfad")->getText();
-		pf += "/";
-		DateiPfadErstellen( pf );
-	}
+    const char *wichtig[] = { "ServerId", "DBBenutzer", "DBPasswort", "DBName", "DBIP", "DBPort", "Aktiv", "KartenPfad" };
+    for( const char *w : wichtig )
+    {
+        if( !dat->wertExistiert( w ) )
+        {
+            std::cout << "KS: error: Der Wert '" << w << "' wurde nicht gefunden. Das Programm wird geschlossen.\n";
+            dat->release();
+            exit( 1 );
+        }
+    }
+    if( !DateiExistiert( dat->zWert( "KartenPfad" )->getText() ) )
+    {
+        Text pf = dat->zWert( "KartenPfad" )->getText();
+        pf += "/";
+        DateiPfadErstellen( pf );
+    }
 
 	KartenServer *kServer = new KartenServer( dat );
 
@@ -52,13 +51,10 @@ int main()
 
 	kServer->ende();
 	kServer->release();
-	dat->speichern();
 	dat->release();
 	std::cout << "KS: Der Server ist heruntergefahren.\n";
 	file.close();
 	std::cout.rdbuf( sbuf );
-#ifndef WIN32
     Framework::releaseFramework();
-#endif
 	return 0;
 }