Browse Source

Verkauf Statistik hinzugefügt und namen der polygone in m2d dateien angepasst

Kolja Strohm 7 years ago
parent
commit
b9f0e7953a

+ 12 - 0
EditorServer/DateienEditor.cpp

@@ -791,6 +791,10 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
         for( int i = 0; i < anz; i++ )
         {
             Polygon2D pol = mdl->polygons->get( i );
+            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 );
             for( int j = 0; j < anz2; j++ )
@@ -941,6 +945,14 @@ bool DateienEditor::prozessMessage( SKlient *zKlient )
             Polygon2D pol;
             pol.vertex = new Array< Vertex >();
             pol.tKordinaten = new Array< Punkt >();
+            char nLen = 0;
+            zKlient->getNachrichtEncrypted( &nLen, 1 );
+            char *txt = new char[ nLen + 1 ];
+            if( nLen )
+                zKlient->getNachrichtEncrypted( txt, nLen );
+            txt[ (int)nLen ] = 0;
+            pol.name = new Text( txt );
+            delete[] txt;
             int anz2 = 0;
             zKlient->getNachrichtEncrypted( (char*)&anz2, 4 );
             for( int j = 0; j < anz2; j++ )

+ 63 - 0
EditorServer/Datenbank.cpp

@@ -529,6 +529,69 @@ int EdSDatenbank::getSpielArtId( int karte )
     return ret;
 }
 
+bool EdSDatenbank::getLast30DaysIncomeStatistik( int karte, Array< int > *einkommen, Array< int > *verkauft )
+{
+    Text befehl = "SELECT a._kupfer, a._verkauft FROM get_karte_einkommen_statistik_since( (now() - '30 days'::INTERVAL)::DATE, ";
+    befehl += karte;
+    befehl += " ) a";
+    lock();
+    if( !datenbank->befehl( befehl ) )
+    {
+        unlock();
+        return 0;
+    }
+    Result r = datenbank->getResult();
+    unlock();
+    for( int i = 0; i < r.zeilenAnzahl; i++ )
+    {
+        einkommen->add( r.values[ i * 2 ] );
+        verkauft->add( r.values[ i * 2 + 1 ] );
+    }
+    r.destroy();
+    return 1;
+}
+
+bool EdSDatenbank::getLast30DaysSpielStatistik( int karte, Array< int > *spiele )
+{
+    Text befehl = "SELECT get_karte_spiel_statistik_since( (now() - '30 days'::INTERVAL)::DATE, ";
+    befehl += karte;
+    befehl += " )";
+    lock();
+    if( !datenbank->befehl( befehl ) )
+    {
+        unlock();
+        return 0;
+    }
+    Result r = datenbank->getResult();
+    unlock();
+    for( int i = 0; i < r.zeilenAnzahl; i++ )
+        spiele->add( r.values[ i ] );
+    r.destroy();
+    return 1;
+}
+
+int EdSDatenbank::getKaufAnz( int karte )
+{
+    Text befehl = "SELECT verkauft FROM karte WHERE id = ";
+    befehl += karte;
+    lock();
+    if( !datenbank->befehl( befehl ) )
+    {
+        unlock();
+        return 0;
+    }
+    Result r = datenbank->getResult();
+    unlock();
+    if( !r.zeilenAnzahl )
+    {
+        r.destroy();
+        return 0;
+    }
+    int anz = r.values[ 0 ];
+    r.destroy();
+    return anz;
+}
+
 // constant
 Text *EdSDatenbank::getLetzterFehler() const
 {

+ 3 - 0
EditorServer/Datenbank.h

@@ -52,6 +52,9 @@ public:
     bool setMaxSpieler( int karte, int spieler );
     bool karteErstellen( const char *name, int spielArt, int klient );
     int getSpielArtId( int karte );
+    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

+ 3 - 0
EditorServer/EditorServer.vcxproj

@@ -78,6 +78,9 @@
       <AdditionalLibraryDirectories>$(RemoteRootDir)/sql/debug/bin/x64/debug;$(RemoteRootDir)/Network/debug/bin/x64/debug;$(RemoteRootDir)/Framework/debug/bin/x64/debug;/usr/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalOptions>-Wl,-rpath,../lib %(AdditionalOptions)</AdditionalOptions>
     </Link>
+    <ClCompile>
+      <PreprocessorDefinitions>DEBUG</PreprocessorDefinitions>
+    </ClCompile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <Link>

+ 29 - 8
EditorServer/KarteEditor.cpp

@@ -576,13 +576,13 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
                 editor = editor->release();
             FreeLibrary( editorDll );
         }
-        if( !ini->wertExistiert( "spielePfad" ) )
+        if( !ini->wertExistiert( "SpielePfad" ) )
         {
             fehler = "Diese Option ist noch nicht verfügbar. Error Code: " __FILE__ ":";
             fehler += __LINE__;
             return 0;
         }
-        Text pf = ini->zWert( "spielePfad" )->getText();
+        Text pf = ini->zWert( "SpielePfad" )->getText();
         pf += "/";
         int said = db->getSpielArtId( id );
         if( !said )
@@ -593,19 +593,14 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
         }
         pf += said;
         pf += "/bin/game";
-#ifdef WIN32
-        pf += ".dll";
-#else
         pf += ".so";
-#endif
-        editorDll = LoadLibrary( pfad->getText() );
+        editorDll = LoadLibrary( pf.getText() );
         if( !editorDll )
         {
             fehler = "Diese Option ist noch nicht verfügbar. Error Code: " __FILE__ ":";
             fehler += __LINE__;
             return 0;
         }
-        pfad->release();
         DllStart getEditorKlasse = (DllStart)GetProcAddress( editorDll, "getEditorKlasse" );
         if( !getEditorKlasse )
         {
@@ -647,6 +642,32 @@ bool KarteEditor::prozessMessage( SKlient *zKlient )
             return 1;
         return 0;
     }
+    case 0x10:
+    { // Get Verkauf Statistik
+        Array< int > einkommen;
+        Array< int > verkauft;
+        Array< int > spiele;
+        if( db->getLast30DaysIncomeStatistik( id, &einkommen, &verkauft ) && db->getLast30DaysSpielStatistik( id, &spiele ) )
+        {
+            zKlient->sendeEncrypted( "\1", 1 );
+            int kaufAnz = db->getKaufAnz( id );
+            zKlient->sendeEncrypted( (char*)&kaufAnz, 4 );
+            char anz = (char)einkommen.getEintragAnzahl();
+            zKlient->sendeEncrypted( &anz, 1 );
+            for( int i = 0; i < anz; i++ )
+            {
+                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 );
+            }
+            return 1;
+        }
+        fehler = "Die Statistik konnte nicht erstellt werden.";
+        return 0;
+    }
     default:
         fehler = "Unbekannte Nachricht. Eventuell ist der Client nicht auf dem neusten Stand.";
     }

+ 1 - 2
EditorServer/main.cpp

@@ -7,7 +7,7 @@
 int main()
 {
 #ifdef DEBUG
-    cd( "/test/editor" );
+    chdir( "/test/editor" );
 #endif
     Framework::initFramework();
 	Zeit *z = getZeit();
@@ -54,7 +54,6 @@ int main()
 
 	iServer->ende();
 	iServer->release();
-	dat->speichern();
 	dat->release();
 	std::cout << "EdS: Der Server ist heruntergefahren.\n";
 	file.close();