瀏覽代碼

Benutzt nun die neue Netzwerk Bibliothek

Kolja Strohm 6 年之前
父節點
當前提交
a5270efb1a
共有 8 個文件被更改,包括 130 次插入473 次删除
  1. 0 43
      patcher/Keys.h
  2. 36 367
      patcher/News.cpp
  3. 3 28
      patcher/News.h
  4. 30 20
      patcher/Patcher.cpp
  5. 3 2
      patcher/Patcher.h
  6. 3 5
      patcher/patcher.vcxproj
  7. 0 6
      patcher/patcher.vcxproj.filters
  8. 55 2
      patcher/start.cpp

+ 0 - 43
patcher/Keys.h

@@ -1,43 +0,0 @@
-#pragma once
-
-class Keys
-{
-    // Konstruktor
-    Keys();
-public:
-    enum Server;
-    enum Key;
-
-    // Gibt den Schlüssel eines Servers zurück
-    //  key: Ein Zeiger auf ein array von bytes. Wird als ausgabe verwendet. Enthält nach aufruf den gewünschten Key
-    //  length: Enthält nach aufruf die Länge des Schlüssels
-    //  sTyp: Der Servertyp, zu dem der Schlüssel ermittelt werden soll
-    //  kTyp: Die art des Schlüssels der ermittelt werden soll
-    static void getServerKey( char **key, int &length, Server sTyp, Key kTyp );
-
-    // Servertypen
-    enum Server
-    {
-        MAIN = 0,
-        ANMELDUNG = 1,
-        CHAT = 2,
-        EDITOR = 3,
-        HISTORIE = 4,
-        INFORMATION = 5,
-        KARTEN = 6,
-        LOGIN = 7,
-        NEWS = 8,
-        REGISTER = 9,
-        SHOP = 10,
-        SPIEL = 11,
-        PATCH = 12,
-        ERHALTUNG = 13
-    };
-
-    // Keytypen
-    enum Key
-    {
-        EMPFANGEN = 0,
-        SENDEN = 0
-    };
-};

+ 36 - 367
patcher/News.cpp

@@ -6,7 +6,6 @@
 #include <Schrift.h>
 #include <Datei.h>
 #include <InitDatei.h>
-#include "Keys.h"
 
 void KSGSRückruf( void *p, RCArray< KSGSVariable > *parameter, KSGSVariable **ret )
 {
@@ -17,8 +16,9 @@ void KSGSR
 
 // Inhalt der News Klasse aus News.h
 // Konstruktor
-News::News( Bildschirm *zB, Schrift *zS )
+News::News( Bildschirm *zB, Schrift *zS, KSGClient::NewsServerClient *client )
 {
+    this->client = client;
 	ref = 1;
 	// Ladeanimation laden
 	Animation2DData *aData = new Animation2DData();
@@ -98,6 +98,11 @@ News::News( Bildschirm *zB, Schrift *zS )
 News::~News()
 {
 	warteAufThread( INFINITE );
+    if( client )
+    {
+        client->trenne( 1 );
+        client->release();
+    }
     if( frame )
     {
         frame->zurücksetzen();
@@ -139,30 +144,35 @@ void News::thread()
 	laden->setSichtbar( 1 );
 	frame->zurücksetzen();
 	// KSGScript Seite Herunterladen
-	NewsKlient *klient = new NewsKlient();
-	if( !klient->verbinde() )
-	{
-		klient->release();
-		fehler->addZeile( "Fehler beim verbinden mit dem News-Server." );
-		fehler->addStyle( TextFeld::Style::Sichtbar );
-		laden->setSichtbar( 0 );
-		screen->setOnTop( 0 );
-		run = 0;
-		return;
-	}
-	if( !klient->downloadSeite( scriptName->getText() ) )
-	{
-		klient->trenne( 1 );
-		klient->release();
-		fehler->addZeile( "Die Seite konnte nicht herruntergeladen werden." );
-		fehler->addStyle( TextFeld::Style::Sichtbar );
-		laden->setSichtbar( 0 );
-		screen->setOnTop( 0 );
-		run = 0;
-		return;
-	}
-	klient->trenne( 1 );
-	klient->release();
+    if( client )
+    {
+        if( !client->verbinde() )
+        {
+            fehler->addZeile( "Fehler beim verbinden mit dem News-Server." );
+            fehler->addStyle( TextFeld::Style::Sichtbar );
+            laden->setSichtbar( 0 );
+            screen->setOnTop( 0 );
+            return;
+        }
+        if( !client->ladeSeite( scriptName->getText() ) )
+        {
+            client->trenne( 0 );
+            fehler->addZeile( "Die Seite konnte nicht herruntergeladen werden." );
+            fehler->addStyle( TextFeld::Style::Sichtbar );
+            laden->setSichtbar( 0 );
+            screen->setOnTop( 0 );
+            return;
+        }
+        client->trenne( 0 );
+    }
+    else
+    {
+        fehler->addZeile( "Es steht kein News Client zur Verfügung." );
+        fehler->addStyle( TextFeld::Style::Sichtbar );
+        laden->setSichtbar( 0 );
+        screen->setOnTop( 0 );
+        return;
+    }
 	// KSGScript Laden
 	Text *pfad = new Text( "data/tmp/news/" );
 	pfad->append( scriptName->getText() );
@@ -190,347 +200,6 @@ News *News::getThis()
 }
 
 News *News::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
-}
-
-
-// Inhalt der NewsKlient Klasse aus News.h
-// Konstruktor
-NewsKlient::NewsKlient()
-{
-	// lade Client id
-	id = 0;
-	Datei *dat = new Datei();
-	dat->setDatei( new Text( "data/tmp/k.id" ) );
-	dat->open( Datei::Style::lesen );
-	dat->lese( (char*)&id, 4 );
-	dat->close();
-	// lade Schlüssel
-	dat->setDatei( new Text( "data/tmp/schlüssel.netw" ) );
-	dat->open( Datei::Style::lesen );
-	schlüsselLän = 0;
-	dat->lese( &schlüsselLän, 1 );
-	schlüssel = new char[ schlüsselLän ];
-	dat->lese( schlüssel, schlüsselLän );
-	dat->close();
-	dat->release();
-	// Initialisierung
-	verbunden = 0;
-	klient = 0;
-	InitializeCriticalSection( &cs );
-	ref = 1;
-}
-
-// Destruktor
-NewsKlient::~NewsKlient()
-{
-	if( verbunden )
-		trenne( 1 );
-	delete[] schlüssel;
-	if( klient )
-		klient->release();
-	DeleteCriticalSection( &cs );
-}
-
-// nicht constant
-void NewsKlient::lock()
-{
-	EnterCriticalSection( &cs );
-}
-
-void NewsKlient::unlock()
-{
-	LeaveCriticalSection( &cs );
-}
-
-bool NewsKlient::verbinde()
-{
-	lock();
-	if( verbunden )
-	{
-		unlock();
-		return 1;
-	}
-	if( !klient )
-	{
-		InitDatei *dat = new InitDatei( "data/optionen.ini" );
-		dat->laden();
-		Text *ipT = dat->getWert( "ServerIP" );
-        Datei d;
-        d.setDatei( "data/tmp/m.port" );
-        d.open( Datei::Style::lesen );
-        int port = 0;
-        d.lese( (char*)&port, 4 );
-        d.close();
-		dat->release();
-		int län = ipT->getLength();
-		char *msIp = new char[ län + 1 ];
-		msIp[ län ] = 0;
-		for( int i = 0; i < län; i++ )
-			msIp[ i ] = ipT->getText()[ i ];
-		ipT->release();
-		klient = new Klient();
-        int l;
-        char *key;
-        Keys::getServerKey( &key, l, Keys::MAIN, Keys::SENDEN );
-		klient->setSendeKey( key, l );
-        delete[] key;
-        Keys::getServerKey( &key, l, Keys::MAIN, Keys::SENDEN );
-		klient->setEmpfangKey( key, l );
-        delete[] key;
-		if( !klient->verbinde( port, msIp ) )
-		{
-			klient = klient->release();
-			delete[]msIp;
-			unlock();
-			return 0;
-		}
-		delete[]msIp;
-		klient->sende( "\0", 1 ); // verschlüsselung aktivieren
-		klient->sendeEncrypted( "\1", 1 );
-		klient->sendeEncrypted( (char*)&id, 4 );
-		char serverReturn = 0;
-		klient->getNachrichtEncrypted( &serverReturn, 1 );
-		if( serverReturn == 3 )
-		{
-			char byte = 0;
-			klient->getNachrichtEncrypted( &byte, 1 );
-			char *fehler = new char[ byte + 1 ];
-			fehler[ byte ] = 0;
-			klient->getNachrichtEncrypted( fehler, byte );
-			delete[] fehler;
-			klient->sendeEncrypted( "\3", 1 );
-			klient->getNachrichtEncrypted( &serverReturn, 1 );
-			klient->trenne();
-			klient = klient->release();
-			unlock();
-			return 0;
-		}
-		klient->setSendeKey( this->schlüssel, schlüsselLän );
-		klient->setEmpfangKey( this->schlüssel, schlüsselLän );
-		klient->sendeEncrypted( "\6\x9", 2 );
-		char byte = 0;
-		klient->getNachrichtEncrypted( &byte, 1 );
-		if( byte == 2 )
-		{
-			unsigned char nsIp[ 4 ];
-			klient->getNachrichtEncrypted( (char *)nsIp, 4 );
-			unsigned short nsPort = 0;
-			klient->getNachrichtEncrypted( (char*)&nsPort, 2 );
-			klient->sendeEncrypted( "\3", 1 );
-			klient->getNachrichtEncrypted( &serverReturn, 1 );
-			klient->trenne();
-			Text *nsIpT = new Text( "" );
-			nsIpT->append( (int)nsIp[ 0 ] );
-			nsIpT->append( "." );
-			nsIpT->append( (int)nsIp[ 1 ] );
-			nsIpT->append( "." );
-			nsIpT->append( (int)nsIp[ 2 ] );
-			nsIpT->append( "." );
-			nsIpT->append( (int)nsIp[ 3 ] );
-            int l;
-            char *key;
-            Keys::getServerKey( &key, l, Keys::NEWS, Keys::SENDEN );
-            klient->setSendeKey( key, l );
-            delete[] key;
-            Keys::getServerKey( &key, l, Keys::NEWS, Keys::SENDEN );
-            klient->setEmpfangKey( key, l );
-            delete[] key;
-			klient->verbinde( nsPort, nsIpT->getText() );
-			nsIpT = nsIpT->release();
-			klient->sendeEncrypted( "\3", 1 );
-			klient->getNachrichtEncrypted( &serverReturn, 1 );
-			klient->trenne();
-		}
-		if( byte == 3 )
-		{
-			klient->getNachrichtEncrypted( &byte, 1 );
-			char *fehler = new char[ byte + 1 ];
-			fehler[ byte ] = 0;
-			klient->getNachrichtEncrypted( fehler, byte );
-			delete[]fehler;
-			klient->sendeEncrypted( "\3", 1 );
-			klient->getNachrichtEncrypted( &serverReturn, 1 );
-			klient->trenne();
-			klient = klient->release();
-			unlock();
-			return 0;
-		}
-	}
-    int l;
-    char *key;
-    Keys::getServerKey( &key, l, Keys::NEWS, Keys::SENDEN );
-    klient->setSendeKey( key, l );
-    delete[] key;
-    Keys::getServerKey( &key, l, Keys::NEWS, Keys::SENDEN );
-    klient->setEmpfangKey( key, l );
-    delete[] key;
-	if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
-	{
-		if( klient->sendeEncrypted( "\1", 1 ) )
-		{
-			klient->sendeEncrypted( (char*)&id, 4 );
-			char serverReturn = 0;
-			klient->getNachrichtEncrypted( &serverReturn, 1 );
-			if( serverReturn == 3 )
-			{
-				char byte = 0;
-				klient->getNachrichtEncrypted( &byte, 1 );
-				char *fehler = new char[ byte + 1 ];
-				fehler[ byte ] = 0;
-				klient->getNachrichtEncrypted( fehler, byte );
-				delete[]fehler;
-				klient->sendeEncrypted( "\3", 1 );
-				klient->getNachrichtEncrypted( &serverReturn, 1 );
-				klient->trenne();
-				unlock();
-				return 0;
-			}
-			klient->setSendeKey( this->schlüssel, schlüsselLän );
-			klient->setEmpfangKey( this->schlüssel, schlüsselLän );
-			verbunden = 1;
-			unlock();
-			return 1;
-		}
-		else
-			klient = klient->release();
-	}
-	else
-		klient = klient->release();
-	unlock();
-	return 0;
-}
-
-bool NewsKlient::downloadSeite( char *name )
-{
-	lock();
-	if( !verbunden )
-		verbinde();
-	if( !verbunden )
-	{
-		unlock();
-		return 0;
-	}
-	klient->sendeEncrypted( "\5", 1 );
-	char ret = 0;
-	klient->getNachrichtEncrypted( &ret, 1 );
-	if( ret == 1 )
-	{
-		char län = (char)textLength( name );
-		klient->sendeEncrypted( &län, 1 );
-		klient->sendeEncrypted( name, län );
-		klient->getNachrichtEncrypted( &ret, 1 );
-		if( ret == 1 )
-		{
-			Text *pfad = new Text( "data/tmp/news/" );
-			pfad->append( name );
-			if( DateiExistiert( pfad->getThis() ) )
-				DateiRemove( pfad->getThis() );
-			pfad->append( "/" );
-			int dAnz = 0;
-			klient->getNachrichtEncrypted( (char*)&dAnz, 4 );
-			for( int i = 0; i < dAnz; i++ )
-			{
-				char nLän = 0;
-				klient->getNachrichtEncrypted( &nLän, 1 );
-				char *dName = new char[ nLän + 1 ];
-				dName[ nLän ] = 0;
-				klient->getNachrichtEncrypted( dName, nLän );
-				Text *pf = new Text( pfad->getText() );
-				pf->append( dName );
-				delete[] dName;
-				Datei *d = new Datei();
-				d->setDatei( pf );
-				d->erstellen();
-				d->open( Datei::Style::schreiben );
-				__int64 dGr = 0;
-				klient->getNachrichtEncrypted( (char*)&dGr, 8 );
-				char buffer[ 2048 ];
-				while( dGr > 0 )
-				{
-					int län = dGr > 2048 ? 2048 : (int)dGr;
-					klient->getNachricht( buffer, län );
-					d->schreibe( buffer, län );
-					dGr -= län;
-				}
-				d->close();
-				d->release();
-			}
-			pfad->release();
-		}
-	}
-	if( ret == 3 )
-	{
-		klient->getNachrichtEncrypted( &ret, 1 );
-		if( ret )
-		{
-			char *tmp = new char[ ret ];
-			klient->getNachrichtEncrypted( tmp, ret );
-			delete[] tmp;
-		}
-		unlock();
-		return 0;
-	}
-	unlock();
-	return 1;
-}
-
-bool NewsKlient::trenne( bool abmelden )
-{
-	lock();
-	if( !verbunden )
-	{
-		unlock();
-		return 1;
-	}
-	if( abmelden )
-	{
-		klient->sendeEncrypted( "\4", 1 );
-		char ret = 0;
-		klient->getNachrichtEncrypted( &ret, 1 );
-		if( ret == 3 )
-		{ // error
-			klient->getNachrichtEncrypted( &ret, 1 );
-			char *msg = new char[ ret + 1 ];
-			msg[ ret ] = 0;
-			if( ret )
-				klient->getNachrichtEncrypted( msg, ret );
-			unlock();
-			delete[] msg;
-		}
-	}
-	klient->sendeEncrypted( "\3", 1 );
-	char ret = 0;
-	klient->getNachrichtEncrypted( &ret, 1 );
-	if( ret == 3 )
-	{ // error
-		klient->getNachrichtEncrypted( &ret, 1 );
-		char *msg = new char[ ret + 1 ];
-		msg[ ret ] = 0;
-		if( ret )
-			klient->getNachrichtEncrypted( msg, ret );
-		unlock();
-		delete[] msg;
-	}
-	klient->trenne();
-	klient = klient->release();
-	verbunden = 0;
-	unlock();
-	return 1;
-}
-
-// Reference Counting
-NewsKlient *NewsKlient::getThis()
-{
-	ref++;
-	return this;
-}
-
-NewsKlient *NewsKlient::release()
 {
 	ref--;
 	if( !ref )

+ 3 - 28
patcher/News.h

@@ -5,6 +5,7 @@
 #include <Animation.h>
 #include <Thread.h>
 #include <Klient.h>
+#include <KSGNetwork.h>
 
 using namespace Framework;
 using namespace KSGScript;
@@ -20,11 +21,12 @@ private:
 	Bildschirm *screen;
 	TextFeld *fehler;
 	Schrift *schrift;
+    KSGClient::NewsServerClient *client;
 	int ref;
 
 public:
 	// Konstruktor
-	News( Bildschirm *zB, Schrift *zS );
+	News( Bildschirm *zB, Schrift *zS, KSGClient::NewsServerClient *client );
 	// Destruktor
 	~News();
 	// nicht constant
@@ -35,31 +37,4 @@ public:
 	News *release();
 };
 
-class NewsKlient
-{
-private:
-	int id;
-	Klient *klient;
-	CRITICAL_SECTION cs;
-	char *schlüssel;
-	char schlüsselLän;
-	bool verbunden;
-	int ref;
-
-public:
-	// Konstruktor
-	NewsKlient();
-	// Destruktor
-	~NewsKlient();
-	// nicht constant
-	void lock();
-	void unlock();
-	bool verbinde();
-	bool downloadSeite( char *name );
-	bool trenne( bool abmelden );
-	// Reference Counting
-	NewsKlient *getThis();
-	NewsKlient *release();
-};
-
 #endif

+ 30 - 20
patcher/Patcher.cpp

@@ -5,32 +5,42 @@
 #include <Text.h>
 #include <GSLDateiV.h>
 
-typedef UpdaterV *( *GetUpdater )( );
+typedef UpdaterV *( *GetUpdater )( KSGClient::PatchServerClient * );
 typedef GSL::GSLDateiV *( *GetGSLDatei )( );
 
 // Inhalt der Patcher Klasse aus Patcher.h
 // Konstruktor
-Patcher::Patcher( FBalken *fortschritt, TextFeld *status, Knopf *play, bool *close )
+Patcher::Patcher( FBalken *fortschritt, TextFeld *status, Knopf *play, bool *close, KSGClient::PatchServerClient *client )
 	: Thread()
 {
-	// Dll Laden
-	updateDll = LoadLibrary( "data/bin/update.dll" );
-	if( !updateDll )
-	{
-		updater = 0;
-		MessageBox( 0, "Die DLL Datei 'data/bin/update.dll' wurde nicht gefunden.", "Fehler", MB_ICONERROR );
-	}
-	else
-	{
-		GetUpdater getUpdater = (GetUpdater)GetProcAddress( updateDll, "getUpdater" );
-		if( !getUpdater )
-		{
-			updater = 0;
-			MessageBox( 0, "Der Einstiegspunkt 'getUpdater' konnte in der DLL Datei 'data/bin/update.dll' nicht gefunden.", "Fehler", MB_ICONERROR );
-		}
-		else
-			updater = getUpdater();
-	}
+    if( !client )
+    {
+        updater = 0;
+        MessageBox( 0, "Es steht kein Patch Client zur Verfügung.", "Fehler", MB_ICONERROR );
+    }
+    else
+    {
+        // Dll Laden
+        updateDll = LoadLibrary( "data/bin/update.dll" );
+        if( !updateDll )
+        {
+            updater = 0;
+            MessageBox( 0, "Die DLL Datei 'data/bin/update.dll' wurde nicht gefunden.", "Fehler", MB_ICONERROR );
+        }
+        else
+        {
+            GetUpdater getUpdater = (GetUpdater)GetProcAddress( updateDll, "getUpdater" );
+            if( !getUpdater )
+            {
+                updater = 0;
+                MessageBox( 0, "Der Einstiegspunkt 'getUpdater' konnte in der DLL Datei 'data/bin/update.dll' nicht gefunden.", "Fehler", MB_ICONERROR );
+            }
+            else
+                updater = getUpdater( client );
+        }
+        if( !updater )
+            client->release();
+    }
 	// Initialisierung
 	this->fortschritt = fortschritt;
 	this->status = status;

+ 3 - 2
patcher/Patcher.h

@@ -6,13 +6,14 @@
 #include <Textfeld.h>
 #include <Knopf.h>
 #include <Thread.h>
+#include <KSGNetwork.h>
 
 using namespace Framework;
 
 class Patcher : private Thread
 {
 private:
-	HMODULE updateDll;
+    HMODULE updateDll;
 	UpdaterV *updater;
 	FBalken *fortschritt;
 	TextFeld *status;
@@ -23,7 +24,7 @@ private:
 
 public:
 	// Konstruktor
-	Patcher( FBalken *fortschritt, TextFeld *status, Knopf *play, bool *close );
+	Patcher( FBalken *fortschritt, TextFeld *status, Knopf *play, bool *close, KSGClient::PatchServerClient *client );
 	// Destruktor
 	~Patcher();
 	// nicht constant

+ 3 - 5
patcher/patcher.vcxproj

@@ -71,18 +71,18 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
-    <IncludePath>..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\KSGNetwork\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;..\..\..\..\OpenSSL\x64\Debug\Include;$(IncludePath)</IncludePath>
     <LibraryPath>..\..\..\..\Allgemein\Framework\x64\Debug;..\..\..\..\Allgemein\Network\x64\Debug;$(LibraryPath)</LibraryPath>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
-    <IncludePath>..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\..\..\OpenSSL\x32\Release\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;..\..\KSGNetwork\Include;$(IncludePath)</IncludePath>
     <LibraryPath>..\..\..\..\Allgemein\Framework\Release;..\..\..\..\Allgemein\Network\Release;..\..\..\..\Allgemein\ksgScript\Release;$(LibraryPath)</LibraryPath>
     <CustomBuildBeforeTargets>Build</CustomBuildBeforeTargets>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
-    <IncludePath>..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\KSGNetwork\Include;..\..\..\..\OpenSSL\x64\Release\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;$(IncludePath)</IncludePath>
     <LibraryPath>..\..\..\..\Allgemein\Framework\x64\Release;..\..\..\..\Allgemein\Network\x64\Release;..\..\..\..\Allgemein\ksgScript\x64\Release;$(LibraryPath)</LibraryPath>
     <CustomBuildBeforeTargets>Build</CustomBuildBeforeTargets>
   </PropertyGroup>
@@ -170,13 +170,11 @@
     </CustomBuildStep>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="Keys.cpp" />
     <ClCompile Include="News.cpp" />
     <ClCompile Include="Patcher.cpp" />
     <ClCompile Include="start.cpp" />
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="Keys.h" />
     <ClInclude Include="News.h" />
     <ClInclude Include="Patcher.h" />
   </ItemGroup>

+ 0 - 6
patcher/patcher.vcxproj.filters

@@ -24,9 +24,6 @@
     <ClCompile Include="News.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="Keys.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Patcher.h">
@@ -35,8 +32,5 @@
     <ClInclude Include="News.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
-    <ClInclude Include="Keys.h">
-      <Filter>Headerdateien</Filter>
-    </ClInclude>
   </ItemGroup>
 </Project>

+ 55 - 2
patcher/start.cpp

@@ -560,7 +560,60 @@ int KSGStart Framework::Start( Startparam p )
 	optionen->setMausEreignis( optionenME );
 	screen->addMember( optionen );
 
-	News *news = new News( screen, sNormal );
+    // Main Server Adresse Laden
+    Datei *dat = new Datei();
+    dat->setDatei( "data/tmp/k.id" );
+    int klientNummer = 0;
+    dat->open( Datei::Style::lesen );
+    dat->lese( (char*)&klientNummer, 4 );
+    dat->close();
+    dat->setDatei( "data/tmp/m.port" );
+    int serverPort = 0;
+    dat->open( Datei::Style::lesen );
+    dat->lese( (char*)&serverPort, 4 );
+    dat->close();
+    dat->setDatei( "data/tmp/m.ip" );
+    dat->open( Datei::Style::lesen );
+    unsigned char len = 0;
+    dat->lese( (char*)&len, 1 );
+    char *ip = new char[ len + 1 ];
+    ip[ len ] = 0;
+    dat->lese( ip, len );
+    dat->close();
+    dat->setDatei( "data/tmp/crypt.key" );
+    dat->open( Datei::Style::lesen );
+    len = 0;
+    dat->lese( (char*)&len, 1 );
+    char *key = new char[ len + 1 ];
+    key[ len ] = 0;
+    dat->lese( key, len );
+    dat->close();
+    dat->release();
+
+    // Laden des Main Clients
+    HINSTANCE networkDLL = LoadLibrary( "data/bin/KSGNetwork.dll" );
+    if( !networkDLL )
+    {
+        WMessageBox( 0, new Text( "Fehler" ), new Text( "Die DLL Datei 'data/bin/KSGNetwork.dll' konnte nicht geladen werden. Fallst diese Datei nicht existiert muss das Spiel neu Installiert werden." ), MB_ICONERROR );
+        exit( 0 );
+    }
+    KSGClient::KSGNetworkCreateRegisterdMain getMainClient = ( KSGClient::KSGNetworkCreateRegisterdMain )GetProcAddress( networkDLL, KSGNETWORK_CREATE_REGISTERD_MAIN );
+    if( !getMainClient )
+    {
+        WMessageBox( 0, new Text( "Fehler" ), new Text( "Der Einstiegspunkt '" KSGNETWORK_CREATE_REGISTERD_MAIN "' wurde in der DLL Datei 'data/bin/KSGNetwork.dll' nicht gefunden. Fallst dieses Problem weiterhin auftritt muss das Spiel neu Installiert werden." ), MB_ICONERROR );
+        exit( 0 );
+    }
+    KSGClient::MainServerClient *mainClient = getMainClient( ip, serverPort, klientNummer, key, len );
+    if( !mainClient )
+    {
+        WMessageBox( 0, new Text( "Fehler" ), new Text( "Die DLL Datei 'data/bin/KSGNetwork.dll' scheint fehlerhaft zu sein. Fallst dieses Problem weiterhin auftritt muss das Spiel neu Installiert werden." ), MB_ICONERROR );
+        exit( 0 );
+    }
+
+    delete[] ip;
+    delete[] key;
+
+	News *news = new News( screen, sNormal, mainClient->createNewsServerClient() );
 
 	_aktion = new TextFeld();
 	_aktion->setStyle( TextFeld::Style::Sichtbar );
@@ -736,7 +789,7 @@ int KSGStart Framework::Start( Startparam p )
 	DWORD threadId;
 	HANDLE handle = CreateThread( NULL, 0, runThread, screen, 0, &threadId );
 
-	_patcher = new Patcher( _fortschritt->getThis(), _aktion->getThis(), _play->getThis(), &_exitB );
+	_patcher = new Patcher( _fortschritt->getThis(), _aktion->getThis(), _play->getThis(), &_exitB, mainClient->createPatchServerClient() );
 	_patcher->startPatch();
 
 	StartNachrichtenSchleife();