Ver Fonte

Benutzt nun die neue Netzwerk Bibliothek

Kolja Strohm há 6 anos atrás
pai
commit
489853f282
78 ficheiros alterados com 3220 adições e 15724 exclusões
  1. 733 480
      KSGClient/Aktionen/AktionsThread.cpp
  2. 9 5
      KSGClient/Global/Render.cpp
  3. 63 37
      KSGClient/Global/Variablen.cpp
  4. 17 13
      KSGClient/Global/Variablen.h
  5. 7 22
      KSGClient/KSGClient.vcxproj
  6. 10 55
      KSGClient/KSGClient.vcxproj.filters
  7. 39 31
      KSGClient/Leser/KartenLeser.cpp
  8. 1 1
      KSGClient/NachLogin/Account/AccountAnsehen.cpp
  9. 22 29
      KSGClient/NachLogin/Account/Aktivität/AccountAktivität.cpp
  10. 25 22
      KSGClient/NachLogin/Account/Historie/AccountHistorie.cpp
  11. 0 140
      KSGClient/NachLogin/Account/Historie/AccountHistorieDaten.cpp
  12. 0 82
      KSGClient/NachLogin/Account/Historie/AccountHistorieDaten.h
  13. 12 12
      KSGClient/NachLogin/Account/SpielPartner/AccountSpielPartner.cpp
  14. 10 10
      KSGClient/NachLogin/Account/Spiele_Karten/AccountSpieleUndKarten.cpp
  15. 2 2
      KSGClient/NachLogin/Account/Statistik/AccountStatistik.cpp
  16. 12 22
      KSGClient/NachLogin/Account/Suchen/AccountSuchen.cpp
  17. 13 13
      KSGClient/NachLogin/Chat/ChatLeiste.cpp
  18. 33 17
      KSGClient/NachLogin/Chat/FreundesListe.cpp
  19. 56 31
      KSGClient/NachLogin/Chat/NachrichtenListe.cpp
  20. 20 14
      KSGClient/NachLogin/Editor/Auswahl/Auswahl.cpp
  21. 2 2
      KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBVorschau.cpp
  22. 17 17
      KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBeschreibung.cpp
  23. 69 55
      KSGClient/NachLogin/Editor/Karte/Dateien/KEDateien.cpp
  24. 15 14
      KSGClient/NachLogin/Editor/Karte/KarteRelease/KERelease.cpp
  25. 8 8
      KSGClient/NachLogin/Editor/Karte/KartenEditor.cpp
  26. 3 3
      KSGClient/NachLogin/Editor/Karte/KaufHistorie/KaufHistorie.cpp
  27. 35 35
      KSGClient/NachLogin/Editor/Karte/ShopSeite/KEShopSeite.cpp
  28. 16 16
      KSGClient/NachLogin/Editor/Karte/Teams/KETeams.cpp
  29. 10 5
      KSGClient/NachLogin/ImSpiel/ImSpiel.cpp
  30. 3 3
      KSGClient/NachLogin/ImSpiel/Laden/SpielLaden.cpp
  31. 6 3
      KSGClient/NachLogin/MiniGames/Minigames.cpp
  32. 16 14
      KSGClient/NachLogin/Neuigkeiten/Neuigkeiten.cpp
  33. 893 829
      KSGClient/NachLogin/Shop/Karten/KartenKaufen.cpp
  34. 130 65
      KSGClient/NachLogin/Shop/Spiele/SpieleKaufen.cpp
  35. 32 33
      KSGClient/NachLogin/Spiele/Angemeldet/Angemeldet.cpp
  36. 282 112
      KSGClient/NachLogin/Spiele/Gruppe/Gruppe.cpp
  37. 26 8
      KSGClient/NachLogin/Spiele/Karte Auswahl/KarteAuswahl.cpp
  38. 8 8
      KSGClient/NachLogin/Spiele/Spiel Auswahl/SpielAuswahl.cpp
  39. 3 3
      KSGClient/NachLogin/Spiele/Spiele.cpp
  40. 4 4
      KSGClient/NachLogin/Spiele/Statistik/SpielStatistik.cpp
  41. 18 18
      KSGClient/NachLogin/Spiele/Team Auswahl/TeamAuswahl.cpp
  42. 4 4
      KSGClient/NachLogin/Titel/TitelLeiste.cpp
  43. 1 1
      KSGClient/NachLogin/UpdateGUI/UpdateGUI.cpp
  44. 308 0
      KSGClient/Netzwerk/ChatMessageProcessor.cpp
  45. 16 0
      KSGClient/Netzwerk/ChatMessageProcessor.h
  46. 0 562
      KSGClient/Netzwerk/KSGKlient.h
  47. 11 12
      KSGClient/Netzwerk/KSGServer.cpp
  48. 18 20
      KSGClient/Netzwerk/KeepAlive.cpp
  49. 0 44
      KSGClient/Netzwerk/Keys.h
  50. 0 851
      KSGClient/Netzwerk/Klients/AnmeldungK.cpp
  51. 0 1203
      KSGClient/Netzwerk/Klients/ChatK.cpp
  52. 0 2909
      KSGClient/Netzwerk/Klients/EditorK.cpp
  53. 0 210
      KSGClient/Netzwerk/Klients/HistorieK.cpp
  54. 0 2097
      KSGClient/Netzwerk/Klients/InformationK.cpp
  55. 0 472
      KSGClient/Netzwerk/Klients/KartenK.cpp
  56. 0 504
      KSGClient/Netzwerk/Klients/LoginK.cpp
  57. 0 640
      KSGClient/Netzwerk/Klients/MinigameK.cpp
  58. 0 399
      KSGClient/Netzwerk/Klients/NewsK.cpp
  59. 0 973
      KSGClient/Netzwerk/Klients/RegisterK.cpp
  60. 0 1164
      KSGClient/Netzwerk/Klients/ShopK.cpp
  61. 0 637
      KSGClient/Netzwerk/Klients/SpielK.cpp
  62. 128 0
      KSGClient/Netzwerk/SpielMessageProcessor.cpp
  63. 16 0
      KSGClient/Netzwerk/SpielMessageProcessor.h
  64. 2 2
      KSGClient/Strukturen/Strukturen.cpp
  65. 5 11
      KSGClient/Strukturen/Strukturen.h
  66. 0 414
      KSGClient/VorLogin/Account verwalten/Bestätigung.cpp
  67. 0 63
      KSGClient/VorLogin/Account verwalten/Bestätigung.h
  68. 4 6
      KSGClient/VorLogin/Account verwalten/EMail.cpp
  69. 4 6
      KSGClient/VorLogin/Account verwalten/Geheimnis.cpp
  70. 2 3
      KSGClient/VorLogin/Account verwalten/Name.cpp
  71. 4 6
      KSGClient/VorLogin/Account verwalten/Passwort.cpp
  72. 2 4
      KSGClient/VorLogin/Account verwalten/Registrierung.cpp
  73. 11 134
      KSGClient/VorLogin/Account verwalten/Unregistrierung.cpp
  74. 0 12
      KSGClient/VorLogin/Account verwalten/Unregistrierung.h
  75. 4 5
      KSGClient/VorLogin/Login/Login.cpp
  76. 0 58
      KSGClient/VorLogin/VorLogin.cpp
  77. 0 5
      KSGClient/VorLogin/VorLogin.h
  78. BIN
      Klient - Verknüpfung.lnk

+ 733 - 480
KSGClient/Aktionen/AktionsThread.cpp

@@ -1,487 +1,740 @@
 #include "AktionsThread.h"
 #include "..\Global\Variablen.h"
+#include <Zeit.h>
 
 // Inhalt der AktionsThread Klasse aus AktionsThread.h
 // Konstruktor
 AktionsThread::AktionsThread( int aktion, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5 )
-	: Thread()
+    : Thread()
 {
-	this->aktion = aktion;
-	this->arg1 = arg1;
-	this->arg2 = arg2;
-	this->arg3 = arg3;
-	this->arg4 = arg4;
-	this->arg5 = arg5;
-	ref = 1;
-	start();
+    this->aktion = aktion;
+    this->arg1 = arg1;
+    this->arg2 = arg2;
+    this->arg3 = arg3;
+    this->arg4 = arg4;
+    this->arg5 = arg5;
+    ref = 1;
+    start();
 }
 
 // nicht constant
 void AktionsThread::thread()
 {
-	switch( aktion )
-	{
-	case 1: // Login
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			int ret = loginKlient->login( (const char*)arg1, (const char*)arg2 );
-			do
-			{
-				if( ret != 1 )
-					continue;
-				if( !infoKlient->verbinde() )
-				{
-					ret = 0;
-					loginKlient->setLetzterFehler( infoKlient->getLetzterFehler() );
-					loginKlient->logout();
-					continue;
-				}
-				if( !chatKlient->verbinde() )
-				{
-					ret = 0;
-					loginKlient->setLetzterFehler( chatKlient->getLetzterFehler() );
-					loginKlient->logout();
-					infoKlient->trenne();
-					continue;
-				}
-				loginKlient->trenne();
-			}
-			while( 0 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zLogin()->setLoginReturn( ret );
-		}
-		break;
-	case 2: // Login Erfolgreich
-		hauptScreen->setdeckFarbe( 0x00000000 );
-		hauptScreen->setOnTop( 1 );
-		ladeAnimation->setSichtbar( 1 );
-		for( unsigned char deckAlpha = 0; deckAlpha < 255; )
-		{
-			hauptScreen->setdeckFarbe( deckAlpha << 24 );
-			Sleep( 40 );
-			deckAlpha += 15;
-		}
-		hauptScreen->setdeckFarbe( 255 << 24 );
-		hauptScreen->setRenderZeichnungen( 0 );
-		vorLogin->setSichtbar( 0 );
-		nachLogin->setAnzeige( NLANormal );
-		hauptScreen->setRenderZeichnungen( 1 );
-		ladeAnimation->setSichtbar( 0 );
-		for( unsigned char deckAlpha = 255; deckAlpha > 0; )
-		{
-			hauptScreen->setdeckFarbe( deckAlpha << 24 );
-			Sleep( 40 );
-			deckAlpha -= 15;
-		}
-		hauptScreen->setdeckFarbe( 0 << 24 );
-		hauptScreen->setOnTop( 0 );
-		break;
-	case 3: // Kick
-		// arg1 = char* -- Account Geheimnis
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			int ret = (int)loginKlient->kick( (const char*)arg1 );
-			do
-			{
-				if( !ret )
-					continue;
-				if( !infoKlient->verbinde() )
-				{
-					ret = 2;
-					loginKlient->setLetzterFehler( infoKlient->getLetzterFehler() );
-					loginKlient->logout();
-					continue;
-				}
-				if( !chatKlient->verbinde() )
-				{
-					ret = 2;
-					loginKlient->setLetzterFehler( chatKlient->getLetzterFehler() );
-					loginKlient->logout();
-					infoKlient->trenne();
-					continue;
-				}
-				loginKlient->trenne();
-			}
-			while( 0 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zLogin()->setKickReturn( ret );
-		}
-		break;
-	case 4: // Logout
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = loginKlient->logout();
-			if( ret )
-			{
-				hauptScreen->lock();
-				nachLogin->zChatLeiste()->removeAll();
-				nachLogin->zFreundesListe()->removeAll();
-				nachLogin->zNachrichtenListe()->removeAll();
-				hauptScreen->unlock();
-				infoKlient->trenne();
-				spielKlient->trenne();
-				chatKlient->trenne();
-				loginKlient->trenne();
-			}
-			else
-			{
-				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Das Ausloggen konnte nicht erfolgreich abgeschlossen werden." ),
-																  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-				ladeAnimation->setSichtbar( 0 );
-				hauptScreen->setOnTop( 0 );
-				break;
-			}
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-		}
-	case 5: // Logout Erfolgreich
-		hauptScreen->setdeckFarbe( 0x00000000 );
-		hauptScreen->setOnTop( 1 );
-		ladeAnimation->setSichtbar( 1 );
-		for( unsigned char deckAlpha = 0; deckAlpha < 255; )
-		{
-			hauptScreen->setdeckFarbe( deckAlpha << 24 );
-			Sleep( 40 );
-			deckAlpha += 15;
-		}
-		hauptScreen->setdeckFarbe( 255 << 24 );
-		_render = 0;
-		hauptScreen->lock();
-		nachLogin->setAnzeige( NLALogin );
-		vorLogin->setSichtbar( 1 );
-		hauptScreen->unlock();
-		_render = 1;
-		ladeAnimation->setSichtbar( 0 );
-		for( unsigned char deckAlpha = 255; deckAlpha > 0; )
-		{
-			hauptScreen->setdeckFarbe( deckAlpha << 24 );
-			Sleep( 40 );
-			deckAlpha -= 15;
-		}
-		hauptScreen->setdeckFarbe( 0 << 24 );
-		hauptScreen->setOnTop( 0 );
-		break;
-	case 6: // Account Bestätigung
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			int ret = registerKlient->accountBestätigen( (const char*)arg1, (const char*)arg2 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zBestätigung()->setWeiterResult( ret );
-		}
-		break;
-	case 7: // Account Bestätigung Fertig
-		// arg1 = char* -- Schlüssel
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->bestätigen( (const char*)arg1 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zBestätigung()->setFertigResult( ret );
-		}
-		break;
-	case 8: // Account E-Mail ändern
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		// arg3 = char* -- Account Geheimnis
-		// arg4 = char* -- Neue E-Mail
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->eMailÄndern( (const char*)arg1, (const char*)arg2, (const char*)arg3, (const char*)arg4 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zEMailÄndern()->setReturn( ret );
-		}
-		break;
-	case 9: // Account E-Mail Vergessen
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		// arg3 = char* -- Account Geheimnis
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			char *eMail = 0;
-			char **pEMail = &eMail;
-			bool ret = registerKlient->eMailVergessen( (const char*)arg1, (const char*)arg2, (const char*)arg3, pEMail );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zEMailVergessen()->setReturn( ret, *pEMail );
-		}
-		break;
-	case 10: // Account Geheimnis Ändern
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		// arg3 = char* -- Account Geheimnis
-		// arg4 = char* -- Neues Geheimnis
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->geheimnisÄndern( (const char*)arg1, (const char*)arg2, (const char*)arg3, (const char*)arg4 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zGeheimnisÄndern()->setResult( ret );
-		}
-		break;
-	case 11: // Account Geheimnis Vergessen
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->geheimnisVergessen( (const char*)arg1, (const char*)arg2 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zGeheimnisVergessen()->setResult( ret );
-		}
-		break;
-	case 12: // Account Name Vergessen
-		// arg1 = char* -- Account Passwort
-		// arg2 = char* -- Account Geheimnis
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->nameVergessen( (const char*)arg1, (const char*)arg2 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zNameVergessen()->setResult( ret );
-		}
-		break;
-	case 13: // Account Passwort Ändern
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		// arg3 = char* -- Account Geheimnis
-		// arg4 = char* -- Neues Passwort
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->passwortÄndern( (const char*)arg1, (const char*)arg2, (const char*)arg3, (const char*)arg4 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zPasswortÄndern()->setResult( ret );
-		}
-		break;
-	case 14: // Account Passwort Vergessen
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Geheimnis
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->passwortVergessen( (const char*)arg1, (const char*)arg2 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zPasswortVergessen()->setResult( ret );
-		}
-		break;
-	case 15: // Account Erstellen
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		// arg3 = char* -- Account Geheimnis
-		// arg4 = char* -- Account E-Mail
-		// arg5 = Datum* -- Geburtsdatum
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->accountErstellen( (const char*)arg1,
-														 (const char*)arg2,
-														 (const char*)arg3,
-														 (const char*)arg4,
-														 (unsigned short)( (Datum*)arg5 )->getJahr(),
-														 (char)( (Datum*)arg5 )->getMonat(),
-														 (char)( (Datum*)arg5 )->getTag() );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zRegistrierung()->setWeiterReturn( ret );
-			( (Datum*)arg5 )->release();
-		}
-		break;
-	case 17: // account Löschen Fertig
-		// arg1 = char* -- Account Name
-		// arg2 = char* -- Account Passwort
-		// arg3 = char* -- Account Geheimnis
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->accountLöschen( (const char*)arg1, (const char*)arg2, (const char*)arg3 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zUnregistrierung()->setWeiterReturn( ret );
-		}
-		break;
-	case 18: // account Löschen Fertig
-		// arg1 = char* -- Schlüssel
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			bool ret = registerKlient->bestätigen( (const char*)arg1 );
-			ladeAnimation->setSichtbar( 0 );
-			hauptScreen->setOnTop( 0 );
-			vorLogin->zUnregistrierung()->setFertigReturn( ret );
-		}
-		break;
-	case 19: // Spiel Laden
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			for( unsigned char deckAlpha = 0; deckAlpha < 255; )
-			{
-				hauptScreen->setdeckFarbe( deckAlpha << 24 );
-				Sleep( 40 );
-				deckAlpha += 15;
-			}
-			hauptScreen->setdeckFarbe( 255 << 24 );
-			_render = 0;
-			hauptScreen->lock();
-			int karteId = nachLogin->zSpielenFenster()->getKarteId();
-			SpielerTeamStruktur *sts = nachLogin->zSpielenFenster()->getSTS();
-			nachLogin->setAnzeige( NLAImSpiel );
-			hauptScreen->unlock();
-			_render = 1;
-			nachLogin->zImSpiel()->beginnLaden( karteId, sts );
-			ladeAnimation->setSichtbar( 0 );
-			for( unsigned char deckAlpha = 255; deckAlpha > 0; )
-			{
-				hauptScreen->setdeckFarbe( deckAlpha << 24 );
-				Sleep( 40 );
-				deckAlpha -= 15;
-			}
-			hauptScreen->setdeckFarbe( 0 << 24 );
-			hauptScreen->setOnTop( 0 );
-		}
-		break;
-	case 20: // Spiel Statistik laden
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			for( unsigned char deckAlpha = 0; deckAlpha < 255; )
-			{
-				hauptScreen->setdeckFarbe( deckAlpha << 24 );
-				Sleep( 40 );
-				deckAlpha += 15;
-			}
-			hauptScreen->setdeckFarbe( 255 << 24 );
-			_render = 0;
-			hauptScreen->lock();
-			int karteId = nachLogin->zImSpiel()->getKarteId();
-			nachLogin->setAnzeige( NLANormal );
-			hauptScreen->unlock();
-			_render = 1;
-			if( spielKlient->istVerbunden() )
-				nachLogin->zSpielenFenster()->ladeSpielStatistik( karteId );
-			ladeAnimation->setSichtbar( 0 );
-			for( unsigned char deckAlpha = 255; deckAlpha > 0; )
-			{
-				hauptScreen->setdeckFarbe( deckAlpha << 24 );
-				Sleep( 40 );
-				deckAlpha -= 15;
-			}
-			hauptScreen->setdeckFarbe( 0 << 24 );
-			hauptScreen->setOnTop( 0 );
-		}
-		break;
-	case 21: // Spiel Aufzeichnung betreten
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			for( unsigned char deckAlpha = 0; deckAlpha < 255; )
-			{
-				hauptScreen->setdeckFarbe( deckAlpha << 24 );
-				Sleep( 40 );
-				deckAlpha += 15;
-			}
-			hauptScreen->setdeckFarbe( 255 << 24 );
-			_render = 0;
-			hauptScreen->lock();
-			nachLogin->setAnzeige( NLASpielVideo );
-			hauptScreen->unlock();
-			_render = 1;
-			ladeAnimation->setSichtbar( 0 );
-			for( unsigned char deckAlpha = 255; deckAlpha > 0; )
-			{
-				hauptScreen->setdeckFarbe( deckAlpha << 24 );
-				Sleep( 40 );
-				deckAlpha -= 15;
-			}
-			hauptScreen->setdeckFarbe( 0 << 24 );
-			hauptScreen->setOnTop( 0 );
-		}
-		break;
-	case 22: // Spiel Aufzeichnung / Editor verlassen
-		if( 1 )
-		{
-			hauptScreen->setdeckFarbe( 0x00000000 );
-			hauptScreen->setOnTop( 1 );
-			ladeAnimation->setSichtbar( 1 );
-			for( unsigned char deckAlpha = 0; deckAlpha < 255; )
-			{
-				hauptScreen->setdeckFarbe( deckAlpha << 24 );
-				Sleep( 40 );
-				deckAlpha += 15;
-			}
-			hauptScreen->setdeckFarbe( 255 << 24 );
-			_render = 0;
-			hauptScreen->lock();
-			nachLogin->setAnzeige( NLANormal );
-			hauptScreen->unlock();
-			_render = 1;
-			ladeAnimation->setSichtbar( 0 );
-			for( unsigned char deckAlpha = 255; deckAlpha > 0; )
-			{
-				hauptScreen->setdeckFarbe( deckAlpha << 24 );
-				Sleep( 40 );
-				deckAlpha -= 15;
-			}
-			hauptScreen->setdeckFarbe( 0 << 24 );
-			hauptScreen->setOnTop( 0 );
-		}
-		break;
+    switch( aktion )
+    {
+    case 1: // Login
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !loginClient )
+                loginClient = mainClient->createLoginServerClient();
+            do
+            {
+                if( !loginClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !loginClient->verbinde() )
+                {
+                    lastError = loginClient->getLetzterFehler();
+                    continue;
+                }
+                ret = loginClient->login( (const char*)arg1, (const char*)arg2 );
+                if( ret != 1 )
+                {
+                    lastError = loginClient->getLetzterFehler();
+                    continue;
+                }
+                if( !infoClient )
+                    infoClient = mainClient->createInformationServerClient();
+                if( !infoClient )
+                {
+                    ret = 0;
+                    lastError = mainClient->getLetzterFehler();
+                    loginClient->logout();
+                    continue;
+                }
+                if( !infoClient->verbinde() )
+                {
+                    ret = 0;
+                    lastError = mainClient->getLetzterFehler();
+                    lastError = infoClient->getLetzterFehler();
+                    loginClient->logout();
+                    continue;
+                }
+                if( !chatClient )
+                    chatClient = mainClient->createChatServerClient();
+                if( !chatClient )
+                {
+                    ret = 0;
+                    lastError = mainClient->getLetzterFehler();
+                    loginClient->logout();
+                    continue;
+                }
+                if( !chatClient->verbinde() )
+                {
+                    ret = 0;
+                    loginClient->logout();
+                    infoClient->trenne( 0 );
+                    lastError = chatClient->getLetzterFehler();
+                    continue;
+                }
+                if( cmProcessor )
+                    cmProcessor = cmProcessor->release();
+                cmProcessor = new ChatMessageProcessor();
+                loginClient->trenne( 0 );
+            } while( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zLogin()->setLoginReturn( ret );
+        }
+        break;
+    case 2: // Login Erfolgreich
+        hauptScreen->setdeckFarbe( 0x00000000 );
+        hauptScreen->setOnTop( 1 );
+        ladeAnimation->setSichtbar( 1 );
+        for( unsigned char deckAlpha = 0; deckAlpha < 255; )
+        {
+            hauptScreen->setdeckFarbe( deckAlpha << 24 );
+            Sleep( 40 );
+            deckAlpha += 15;
+        }
+        hauptScreen->setdeckFarbe( 255 << 24 );
+        hauptScreen->setRenderZeichnungen( 0 );
+        vorLogin->setSichtbar( 0 );
+        nachLogin->setAnzeige( NLANormal );
+        hauptScreen->setRenderZeichnungen( 1 );
+        ladeAnimation->setSichtbar( 0 );
+        for( unsigned char deckAlpha = 255; deckAlpha > 0; )
+        {
+            hauptScreen->setdeckFarbe( deckAlpha << 24 );
+            Sleep( 40 );
+            deckAlpha -= 15;
+        }
+        hauptScreen->setdeckFarbe( 0 << 24 );
+        hauptScreen->setOnTop( 0 );
+        break;
+    case 3: // Kick
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        // arg3 = char* -- Account Geheimnis
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !loginClient )
+                loginClient = mainClient->createLoginServerClient();
+            do
+            {
+                if( !loginClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !loginClient->verbinde() )
+                {
+                    lastError = loginClient->getLetzterFehler();
+                    continue;
+                }
+                ret = (int)loginClient->kick( (const char*)arg1, (const char*)arg2, (const char*)arg3 );
+                if( !ret )
+                {
+                    lastError = loginClient->getLetzterFehler();
+                    continue;
+                }
+                if( !infoClient )
+                    infoClient = mainClient->createInformationServerClient();
+                if( !infoClient )
+                {
+                    ret = 2;
+                    lastError = mainClient->getLetzterFehler();
+                    loginClient->logout();
+                    continue;
+                }
+                if( !infoClient->verbinde() )
+                {
+                    ret = 2;
+                    lastError = infoClient->getLetzterFehler();
+                    loginClient->logout();
+                    continue;
+                }
+                if( !chatClient )
+                    chatClient = mainClient->createChatServerClient();
+                if( !chatClient )
+                {
+                    ret = 2;
+                    lastError = mainClient->getLetzterFehler();
+                    loginClient->logout();
+                    continue;
+                }
+                if( !chatClient->verbinde() )
+                {
+                    ret = 2;
+                    loginClient->logout();
+                    infoClient->trenne( 0 );
+                    lastError = chatClient->getLetzterFehler();
+                    continue;
+                }
+                if( cmProcessor )
+                    cmProcessor = cmProcessor->release();
+                cmProcessor = new ChatMessageProcessor();
+                loginClient->trenne( 0 );
+            } while( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zLogin()->setKickReturn( ret );
+        }
+        break;
+    case 4: // Logout
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            if( loginClient )
+            {
+                if( !loginClient->verbinde() )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Das Ausloggen konnte nicht erfolgreich abgeschlossen werden." ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                    ladeAnimation->setSichtbar( 0 );
+                    hauptScreen->setOnTop( 0 );
+                    break;
+                }
+                bool ret = loginClient->logout();
+                if( ret )
+                {
+                    hauptScreen->lock();
+                    nachLogin->zChatLeiste()->removeAll();
+                    nachLogin->zFreundesListe()->removeAll();
+                    nachLogin->zNachrichtenListe()->removeAll();
+                    hauptScreen->unlock();
+                    if( infoClient )
+                        infoClient->trenne( 0 );
+                    if( spielClient )
+                        spielClient->trenne();
+                    if( smProcessor )
+                        smProcessor = smProcessor->release();
+                    if( chatClient )
+                        chatClient->trenne( 0 );
+                    if( loginClient )
+                        loginClient->trenne( 0 );
+                    if( cmProcessor )
+                        cmProcessor = cmProcessor->release();
+                }
+                else
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Das Ausloggen konnte nicht erfolgreich abgeschlossen werden." ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                    ladeAnimation->setSichtbar( 0 );
+                    hauptScreen->setOnTop( 0 );
+                    break;
+                }
+            }
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+        }
+    case 5: // Logout Erfolgreich
+        hauptScreen->setdeckFarbe( 0x00000000 );
+        hauptScreen->setOnTop( 1 );
+        ladeAnimation->setSichtbar( 1 );
+        for( unsigned char deckAlpha = 0; deckAlpha < 255; )
+        {
+            hauptScreen->setdeckFarbe( deckAlpha << 24 );
+            Sleep( 40 );
+            deckAlpha += 15;
+        }
+        hauptScreen->setdeckFarbe( 255 << 24 );
+        _render = 0;
+        hauptScreen->lock();
+        nachLogin->setAnzeige( NLALogin );
+        vorLogin->setSichtbar( 1 );
+        hauptScreen->unlock();
+        _render = 1;
+        ladeAnimation->setSichtbar( 0 );
+        for( unsigned char deckAlpha = 255; deckAlpha > 0; )
+        {
+            hauptScreen->setdeckFarbe( deckAlpha << 24 );
+            Sleep( 40 );
+            deckAlpha -= 15;
+        }
+        hauptScreen->setdeckFarbe( 0 << 24 );
+        hauptScreen->setOnTop( 0 );
+        break;
+    case 8: // Account E-Mail ändern
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        // arg3 = char* -- Account Geheimnis
+        // arg4 = char* -- Neue E-Mail
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->eMailÄndern( (const char*)arg1, (const char*)arg2, (const char*)arg3, (const char*)arg4 );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zEMailÄndern()->setReturn( ret );
+        }
+        break;
+    case 9: // Account E-Mail Vergessen
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        // arg3 = char* -- Account Geheimnis
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            char *eMail = 0;
+            char **pEMail = &eMail;
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->eMailVergessen( (const char*)arg1, (const char*)arg2, (const char*)arg3, pEMail );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zEMailVergessen()->setReturn( ret, *pEMail );
+        }
+        break;
+    case 10: // Account Geheimnis Ändern
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        // arg3 = char* -- Account Geheimnis
+        // arg4 = char* -- Neues Geheimnis
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->geheimnisÄndern( (const char*)arg1, (const char*)arg2, (const char*)arg3, (const char*)arg4 );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zGeheimnisÄndern()->setResult( ret );
+        }
+        break;
+    case 11: // Account Geheimnis Vergessen
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->geheimnisVergessen( (const char*)arg1, (const char*)arg2 );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zGeheimnisVergessen()->setResult( ret );
+        }
+        break;
+    case 12: // Account Name Vergessen
+        // arg1 = char* -- Account Passwort
+        // arg2 = char* -- Account Geheimnis
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->nameVergessen( (const char*)arg1, (const char*)arg2 );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zNameVergessen()->setResult( ret );
+        }
+        break;
+    case 13: // Account Passwort Ändern
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        // arg3 = char* -- Account Geheimnis
+        // arg4 = char* -- Neues Passwort
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->passwortÄndern( (const char*)arg1, (const char*)arg2, (const char*)arg3, (const char*)arg4 );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zPasswortÄndern()->setResult( ret );
+        }
+        break;
+    case 14: // Account Passwort Vergessen
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Geheimnis
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->passwortVergessen( (const char*)arg1, (const char*)arg2 );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zPasswortVergessen()->setResult( ret );
+        }
+        break;
+    case 15: // Account Erstellen
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        // arg3 = char* -- Account Geheimnis
+        // arg4 = char* -- Account E-Mail
+        // arg5 = Datum* -- Geburtsdatum
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->accountErstellen( (const char*)arg1,
+                    (const char*)arg2,
+                                                        (const char*)arg3,
+                                                        (const char*)arg4,
+                                                        (unsigned short)( (Datum*)arg5 )->getJahr(),
+                                                        (char)( (Datum*)arg5 )->getMonat(),
+                                                        (char)( (Datum*)arg5 )->getTag() );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zRegistrierung()->setWeiterReturn( ret );
+            ( (Datum*)arg5 )->release();
+        }
+        break;
+    case 17: // account Löschen Fertig
+        // arg1 = char* -- Account Name
+        // arg2 = char* -- Account Passwort
+        // arg3 = char* -- Account Geheimnis
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            int ret = 0;
+            if( !registerClient )
+                registerClient = mainClient->createRegisterServerClient();
+            do
+            {
+                if( !registerClient )
+                {
+                    lastError = mainClient->getLetzterFehler();
+                    continue;
+                }
+                if( !registerClient->verbinde() )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+                ret = registerClient->accountLöschen( (const char*)arg1, (const char*)arg2, (const char*)arg3 );
+                if( !ret )
+                {
+                    lastError = registerClient->getLetzterFehler();
+                    continue;
+                }
+            } while( 0 );
+            registerClient->trenne( 0 );
+            ladeAnimation->setSichtbar( 0 );
+            hauptScreen->setOnTop( 0 );
+            vorLogin->zUnregistrierung()->setWeiterReturn( ret );
+        }
+        break;
+    case 19: // Spiel Laden
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            for( unsigned char deckAlpha = 0; deckAlpha < 255; )
+            {
+                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                Sleep( 40 );
+                deckAlpha += 15;
+            }
+            hauptScreen->setdeckFarbe( 255 << 24 );
+            _render = 0;
+            hauptScreen->lock();
+            int karteId = nachLogin->zSpielenFenster()->getKarteId();
+            SpielerTeamStruktur *sts = nachLogin->zSpielenFenster()->getSTS();
+            nachLogin->setAnzeige( NLAImSpiel );
+            hauptScreen->unlock();
+            _render = 1;
+            nachLogin->zImSpiel()->beginnLaden( karteId, sts );
+            ladeAnimation->setSichtbar( 0 );
+            for( unsigned char deckAlpha = 255; deckAlpha > 0; )
+            {
+                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                Sleep( 40 );
+                deckAlpha -= 15;
+            }
+            hauptScreen->setdeckFarbe( 0 << 24 );
+            hauptScreen->setOnTop( 0 );
+        }
+        break;
+    case 20: // Spiel Statistik laden
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            for( unsigned char deckAlpha = 0; deckAlpha < 255; )
+            {
+                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                Sleep( 40 );
+                deckAlpha += 15;
+            }
+            hauptScreen->setdeckFarbe( 255 << 24 );
+            _render = 0;
+            hauptScreen->lock();
+            int karteId = nachLogin->zImSpiel()->getKarteId();
+            nachLogin->setAnzeige( NLANormal );
+            hauptScreen->unlock();
+            _render = 1;
+            if( spielClient && spielClient->istVerbunden() )
+                nachLogin->zSpielenFenster()->ladeSpielStatistik( karteId );
+            ladeAnimation->setSichtbar( 0 );
+            for( unsigned char deckAlpha = 255; deckAlpha > 0; )
+            {
+                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                Sleep( 40 );
+                deckAlpha -= 15;
+            }
+            hauptScreen->setdeckFarbe( 0 << 24 );
+            hauptScreen->setOnTop( 0 );
+        }
+        break;
+    case 21: // Spiel Aufzeichnung betreten
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            for( unsigned char deckAlpha = 0; deckAlpha < 255; )
+            {
+                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                Sleep( 40 );
+                deckAlpha += 15;
+            }
+            hauptScreen->setdeckFarbe( 255 << 24 );
+            _render = 0;
+            hauptScreen->lock();
+            nachLogin->setAnzeige( NLASpielVideo );
+            hauptScreen->unlock();
+            _render = 1;
+            ladeAnimation->setSichtbar( 0 );
+            for( unsigned char deckAlpha = 255; deckAlpha > 0; )
+            {
+                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                Sleep( 40 );
+                deckAlpha -= 15;
+            }
+            hauptScreen->setdeckFarbe( 0 << 24 );
+            hauptScreen->setOnTop( 0 );
+        }
+        break;
+    case 22: // Spiel Aufzeichnung / Editor verlassen
+        if( 1 )
+        {
+            hauptScreen->setdeckFarbe( 0x00000000 );
+            hauptScreen->setOnTop( 1 );
+            ladeAnimation->setSichtbar( 1 );
+            for( unsigned char deckAlpha = 0; deckAlpha < 255; )
+            {
+                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                Sleep( 40 );
+                deckAlpha += 15;
+            }
+            hauptScreen->setdeckFarbe( 255 << 24 );
+            _render = 0;
+            hauptScreen->lock();
+            nachLogin->setAnzeige( NLANormal );
+            hauptScreen->unlock();
+            _render = 1;
+            ladeAnimation->setSichtbar( 0 );
+            for( unsigned char deckAlpha = 255; deckAlpha > 0; )
+            {
+                hauptScreen->setdeckFarbe( deckAlpha << 24 );
+                Sleep( 40 );
+                deckAlpha -= 15;
+            }
+            hauptScreen->setdeckFarbe( 0 << 24 );
+            hauptScreen->setOnTop( 0 );
+        }
+        break;
     case 23: // Editor betreten
         if( 1 )
         {
@@ -511,8 +764,8 @@ void AktionsThread::thread()
             hauptScreen->setOnTop( 0 );
         }
         break;
-	}
-	release();
+    }
+    release();
 }
 
 // constant
@@ -520,14 +773,14 @@ void AktionsThread::thread()
 // Reference Counting
 AktionsThread *AktionsThread::getThis()
 {
-	ref++;
-	return this;
+    ref++;
+    return this;
 }
 
 AktionsThread *AktionsThread::release()
 {
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    ref--;
+    if( !ref )
+        delete this;
+    return 0;
 }

+ 9 - 5
KSGClient/Global/Render.cpp

@@ -84,11 +84,15 @@ void Render::thread() // Render Schleife
 		case 1: // Chat Client neu verbinden
 			if( 1 )
 			{
-				bool verbunden = chatKlient->istVerbunden();
-				chatKlient = chatKlient->release();
-				chatKlient = new ChatKlient();
-				if( verbunden )
-					chatKlient->verbinde();
+				bool verbunden = chatClient && chatClient->istVerbunden();
+                if( verbunden )
+                {
+                    chatClient->trenne( 0 );
+                    if( cmProcessor )
+                        cmProcessor = cmProcessor->release();
+                    chatClient->verbinde();
+                    cmProcessor = new ChatMessageProcessor();
+                }
 				aktion = 0;
 			}
 			break;

+ 63 - 37
KSGClient/Global/Variablen.cpp

@@ -2,21 +2,21 @@
 #include "Variablen.h"
 #include <Punkt.h>
 #include <DateiSystem.h>
+#include "../Netzwerk/KSGServer.h"
 
 void initVariables( Schrift *zSchrift, Bildschirm *zBildschirm )
 {
-	loginKlient = new LoginKlient();
-	registerKlient = new RegisterKlient();
-	infoKlient = new InformationKlient();
-	chatKlient = new ChatKlient();
-	anmeldungKlient = new AnmeldungKlient();
-	spielKlient = new SpielKlient();
-	shopKlient = new ShopKlient();
-	historieKlient = new HistorieKlient();
-	newsKlient = new NewsKlient();
-	editorKlient = new EditorKlient();
-    kartenKlient = new KartenKlient();
-    minigameClient = new MinigameClient();
+	loginClient = 0;
+	registerClient = 0;
+	infoClient = 0;
+	chatClient = 0;
+	anmeldungClient = 0;
+	spielClient = 0;
+	shopClient = 0;
+	newsClient = 0;
+	editorClient = 0;
+    minigameClient = 0;
+    cmProcessor = 0;
 	vorLogin = new VorLogin( zSchrift, zBildschirm );
 	nachLogin = new NachLogin( zSchrift, zBildschirm );
 	Animation2DData *lad = new Animation2DData();
@@ -34,13 +34,37 @@ void initVariables( Schrift *zSchrift, Bildschirm *zBildschirm )
 	ladeAnimation->setRahmenBreite( 1 );
 	ladeAnimation->setRahmenFarbe( 0xFFFFFFFF );
 	zBildschirm->setOnTopZeichnung( ladeAnimation );
-	aktion = 2;
 	hauptScreen = zBildschirm->getThis();
 	bilder = new Bilder();
 	updateH = new UpdateHandler();
 	dllDateien = new DLLDateien();
 	keepAliveTh = new KeepAliveTh();
-	_render = 1;
+    // Laden des Main Clients
+    HINSTANCE networkDLL = dllDateien->ladeDLL( "KSGNetwork.dll", "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 );
+    }
+    char *ip = getMainServerIp();
+    char *key;
+    unsigned char keyLen = getSchlüssel( &key );
+    mainClient = getMainClient( ip, getMainServerPort(), getKlientId(), key, keyLen );
+    delete[] key;
+    delete[] ip;
+    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 );
+    }
+    aktion = 2;
+    _render = 1;
 }
 
 void releaseVariables()
@@ -56,34 +80,36 @@ void releaseVariables()
 		vorLogin = vorLogin->release();
 	if( nachLogin )
 		nachLogin = nachLogin->release();
-	if( loginKlient )
-		loginKlient = loginKlient->release();
-	if( registerKlient )
-		registerKlient = registerKlient->release();
-	if( infoKlient )
-		infoKlient = (InformationKlient*)infoKlient->release();
-	if( chatKlient )
-		chatKlient = chatKlient->release();
-	if( anmeldungKlient )
-		anmeldungKlient = anmeldungKlient->release();
-	if( spielKlient )
-		spielKlient = (SpielKlient*)spielKlient->release();
-	if( shopKlient )
-		shopKlient = shopKlient->release();
-	if( historieKlient )
-		historieKlient = historieKlient->release();
-	if( newsKlient )
-		newsKlient = newsKlient->release();
-	if( editorKlient )
-		editorKlient = (EditorKlient*)editorKlient->release();
-    if( kartenKlient )
-        kartenKlient = kartenKlient->release();
+	if( loginClient )
+		loginClient = loginClient->release();
+	if( registerClient )
+		registerClient = registerClient->release();
+	if( infoClient )
+		infoClient = infoClient->release();
+	if( chatClient )
+		chatClient = chatClient->release();
+	if( anmeldungClient )
+		anmeldungClient = anmeldungClient->release();
+	if( spielClient )
+		spielClient = spielClient->release();
+	if( shopClient )
+		shopClient = shopClient->release();
+	if( newsClient )
+		newsClient = newsClient->release();
+	if( editorClient )
+		editorClient = editorClient->release();
     if( minigameClient )
-        minigameClient = (MinigameClient*)minigameClient->release();
+        minigameClient = minigameClient->release();
 	if( ladeAnimation )
 		ladeAnimation = ladeAnimation->release();
 	if( hauptScreen )
 		hauptScreen = hauptScreen->release();
+    if( mainClient )
+        mainClient = mainClient->release();
+    if( cmProcessor )
+        cmProcessor = cmProcessor->release();
+    if( smProcessor )
+        smProcessor = smProcessor->release();
 	if( bilder )
 	{
 		bilder->release();

+ 17 - 13
KSGClient/Global/Variablen.h

@@ -5,7 +5,7 @@
 #define variable extern
 #endif
 
-#include "..\Netzwerk\KSGKlient.h"
+#include <KSGNetwork.h>
 #include "../Netzwerk/KeepAlive.h"
 #include "..\VorLogin\Login\Login.h"
 #include "..\VorLogin\VorLogin.h"
@@ -14,19 +14,23 @@
 #include "Bilder.h"
 #include "DLLDateien.h"
 #include <Animation.h>
+#include "../Netzwerk/ChatMessageProcessor.h"
+#include "../Netzwerk/SpielMessageProcessor.h"
 
-variable LoginKlient *loginKlient;
-variable RegisterKlient *registerKlient;
-variable InformationKlient *infoKlient;
-variable ChatKlient *chatKlient;
-variable AnmeldungKlient *anmeldungKlient;
-variable SpielKlient *spielKlient;
-variable ShopKlient *shopKlient;
-variable HistorieKlient *historieKlient;
-variable NewsKlient *newsKlient;
-variable EditorKlient *editorKlient;
-variable KartenKlient *kartenKlient;
-variable MinigameClient *minigameClient;
+variable KSGClient::MainServerClient *mainClient;
+variable KSGClient::LoginServerClient *loginClient;
+variable KSGClient::RegisterServerClient *registerClient;
+variable KSGClient::InformationServerClient *infoClient;
+variable KSGClient::ChatServerClient *chatClient;
+variable KSGClient::AnmeldungServerClient *anmeldungClient;
+variable KSGClient::SpielServerClient *spielClient;
+variable KSGClient::ShopServerClient *shopClient;
+variable KSGClient::NewsServerClient *newsClient;
+variable KSGClient::EditorServerClient *editorClient;
+variable KSGClient::MinigameServerClient *minigameClient;
+variable ChatMessageProcessor *cmProcessor;
+variable SpielMessageProcessor *smProcessor;
+variable Text lastError;
 variable VorLogin *vorLogin;
 variable NachLogin *nachLogin;
 variable int aktion;

+ 7 - 22
KSGClient/KSGClient.vcxproj

@@ -73,18 +73,18 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
-    <IncludePath>..\..\..\..\OpenSSL\x64\Debug\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\..\..\OpenSSL\x64\Debug\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;..\..\KSGNetwork\Include;$(IncludePath)</IncludePath>
     <LibraryPath>..\..\..\..\Allgemein\Framework\x64\Debug;..\..\..\..\Allgemein\Network\x64\Debug;$(LibraryPath)</LibraryPath>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
     <LibraryPath>..\..\..\..\Allgemein\Framework\Release;..\..\..\..\Allgemein\Network\Release;$(LibraryPath)</LibraryPath>
-    <IncludePath>..\..\..\..\OpenSSL\x32\Release\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\KSGNetwork\Include;..\..\..\..\OpenSSL\x32\Release\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;$(IncludePath)</IncludePath>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
     <LibraryPath>..\..\..\..\Allgemein\Framework\x64\Release;..\..\..\..\Allgemein\Network\x64\Release;$(LibraryPath)</LibraryPath>
-    <IncludePath>..\..\..\..\OpenSSL\x64\Release\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;$(IncludePath)</IncludePath>
+    <IncludePath>..\..\KSGNetwork\Include;..\..\..\..\OpenSSL\x64\Release\Include;..\..\..\..\Allgemein\Framework;..\..\..\..\Allgemein\Network\Network;..\..\Include;..\..\..\..\Allgemein\GSL\GSL\Include;..\..\..\..\Allgemein\ksgScript\ksgScript\Include;$(IncludePath)</IncludePath>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
@@ -193,7 +193,6 @@ copy "..\x64\Debug\KSGClient.exe" "..\..\Fertig\Debug\x64\data\client\bin\game c
     <ClCompile Include="NachLogin\Account\AccountAnsehen.cpp" />
     <ClCompile Include="NachLogin\Account\Aktivität\AccountAktivität.cpp" />
     <ClCompile Include="NachLogin\Account\Historie\AccountHistorie.cpp" />
-    <ClCompile Include="NachLogin\Account\Historie\AccountHistorieDaten.cpp" />
     <ClCompile Include="NachLogin\Account\Spiele_Karten\AccountSpieleUndKarten.cpp" />
     <ClCompile Include="NachLogin\Account\SpielPartner\AccountSpielPartner.cpp" />
     <ClCompile Include="NachLogin\Account\Statistik\AccountStatistik.cpp" />
@@ -236,25 +235,13 @@ copy "..\x64\Debug\KSGClient.exe" "..\..\Fertig\Debug\x64\data\client\bin\game c
     <ClCompile Include="NachLogin\Spiele\Team Auswahl\TeamAuswahl.cpp" />
     <ClCompile Include="NachLogin\Titel\TitelLeiste.cpp" />
     <ClCompile Include="NachLogin\UpdateGUI\UpdateGUI.cpp" />
+    <ClCompile Include="Netzwerk\ChatMessageProcessor.cpp" />
     <ClCompile Include="Netzwerk\KeepAlive.cpp" />
-    <ClCompile Include="Netzwerk\Keys.cpp" />
-    <ClCompile Include="Netzwerk\Klients\AnmeldungK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\ChatK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\EditorK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\HistorieK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\InformationK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\KartenK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\LoginK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\MinigameK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\NewsK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\RegisterK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\ShopK.cpp" />
-    <ClCompile Include="Netzwerk\Klients\SpielK.cpp" />
     <ClCompile Include="Netzwerk\KSGServer.cpp" />
     <ClCompile Include="Netzwerk\Patcher.cpp" />
+    <ClCompile Include="Netzwerk\SpielMessageProcessor.cpp" />
     <ClCompile Include="Start\Start.cpp" />
     <ClCompile Include="Strukturen\Strukturen.cpp" />
-    <ClCompile Include="VorLogin\Account verwalten\Bestätigung.cpp" />
     <ClCompile Include="VorLogin\Account verwalten\EMail.cpp" />
     <ClCompile Include="VorLogin\Account verwalten\Geheimnis.cpp" />
     <ClCompile Include="VorLogin\Account verwalten\Name.cpp" />
@@ -276,7 +263,6 @@ copy "..\x64\Debug\KSGClient.exe" "..\..\Fertig\Debug\x64\data\client\bin\game c
     <ClInclude Include="NachLogin\Account\AccountAnsehen.h" />
     <ClInclude Include="NachLogin\Account\Aktivität\AccountAktivität.h" />
     <ClInclude Include="NachLogin\Account\Historie\AccountHistorie.h" />
-    <ClInclude Include="NachLogin\Account\Historie\AccountHistorieDaten.h" />
     <ClInclude Include="NachLogin\Account\Spiele_Karten\AccountSpieleUndKarten.h" />
     <ClInclude Include="NachLogin\Account\SpielPartner\AccountSpielPartner.h" />
     <ClInclude Include="NachLogin\Account\Statistik\AccountStatistik.h" />
@@ -319,13 +305,12 @@ copy "..\x64\Debug\KSGClient.exe" "..\..\Fertig\Debug\x64\data\client\bin\game c
     <ClInclude Include="NachLogin\Spiele\Team Auswahl\TeamAuswahl.h" />
     <ClInclude Include="NachLogin\Titel\TitelLeiste.h" />
     <ClInclude Include="NachLogin\UpdateGUI\UpdateGUI.h" />
+    <ClInclude Include="Netzwerk\ChatMessageProcessor.h" />
     <ClInclude Include="Netzwerk\KeepAlive.h" />
-    <ClInclude Include="Netzwerk\Keys.h" />
-    <ClInclude Include="Netzwerk\KSGKlient.h" />
     <ClInclude Include="Netzwerk\KSGServer.h" />
     <ClInclude Include="Netzwerk\Patcher.h" />
+    <ClInclude Include="Netzwerk\SpielMessageProcessor.h" />
     <ClInclude Include="Strukturen\Strukturen.h" />
-    <ClInclude Include="VorLogin\Account verwalten\Bestätigung.h" />
     <ClInclude Include="VorLogin\Account verwalten\EMail.h" />
     <ClInclude Include="VorLogin\Account verwalten\Geheimnis.h" />
     <ClInclude Include="VorLogin\Account verwalten\Name.h" />

+ 10 - 55
KSGClient/KSGClient.vcxproj.filters

@@ -21,39 +21,6 @@
     <ClCompile Include="Global\Variablen.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\AnmeldungK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\ChatK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\EditorK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\HistorieK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\InformationK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\KartenK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\LoginK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\NewsK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\RegisterK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\ShopK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\SpielK.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
     <ClCompile Include="Netzwerk\KeepAlive.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
@@ -72,9 +39,6 @@
     <ClCompile Include="Strukturen\Strukturen.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="VorLogin\Account verwalten\Bestätigung.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
     <ClCompile Include="VorLogin\Account verwalten\EMail.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
@@ -117,9 +81,6 @@
     <ClCompile Include="NachLogin\Account\Historie\AccountHistorie.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="NachLogin\Account\Historie\AccountHistorieDaten.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
     <ClCompile Include="NachLogin\Account\Spiele_Karten\AccountSpieleUndKarten.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
@@ -246,16 +207,16 @@
     <ClCompile Include="Leser\KartenLeser.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="Netzwerk\Keys.cpp">
+    <ClCompile Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="Netzwerk\Klients\MinigameK.cpp">
+    <ClCompile Include="NachLogin\Editor\Karte\KarteRelease\KERelease.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.cpp">
+    <ClCompile Include="Netzwerk\ChatMessageProcessor.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="NachLogin\Editor\Karte\KarteRelease\KERelease.cpp">
+    <ClCompile Include="Netzwerk\SpielMessageProcessor.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
   </ItemGroup>
@@ -266,9 +227,6 @@
     <ClInclude Include="Netzwerk\KeepAlive.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
-    <ClInclude Include="Netzwerk\KSGKlient.h">
-      <Filter>Headerdateien</Filter>
-    </ClInclude>
     <ClInclude Include="Netzwerk\KSGServer.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
@@ -284,9 +242,6 @@
     <ClInclude Include="Strukturen\Strukturen.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
-    <ClInclude Include="VorLogin\Account verwalten\Bestätigung.h">
-      <Filter>Headerdateien</Filter>
-    </ClInclude>
     <ClInclude Include="VorLogin\Account verwalten\EMail.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
@@ -329,9 +284,6 @@
     <ClInclude Include="NachLogin\Account\Historie\AccountHistorie.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
-    <ClInclude Include="NachLogin\Account\Historie\AccountHistorieDaten.h">
-      <Filter>Headerdateien</Filter>
-    </ClInclude>
     <ClInclude Include="NachLogin\Account\Spiele_Karten\AccountSpieleUndKarten.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
@@ -458,14 +410,17 @@
     <ClInclude Include="Leser\KartenLeser.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
-    <ClInclude Include="Netzwerk\Keys.h">
-      <Filter>Headerdateien</Filter>
-    </ClInclude>
     <ClInclude Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
     <ClInclude Include="NachLogin\Editor\Karte\KarteRelease\KERelease.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
+    <ClInclude Include="Netzwerk\ChatMessageProcessor.h">
+      <Filter>Headerdateien</Filter>
+    </ClInclude>
+    <ClInclude Include="Netzwerk\SpielMessageProcessor.h">
+      <Filter>Headerdateien</Filter>
+    </ClInclude>
   </ItemGroup>
 </Project>

+ 39 - 31
KSGClient/Leser/KartenLeser.cpp

@@ -33,17 +33,19 @@ Bild *KartenLeser::getKartenTitelBild( Schrift *zSchrift ) const
     bool ok = 1;
     int port = 0;
     Text ip;
-    infoKlient->getKartenServer( karteId, &port, &ip );
-    if( !kartenKlient->verbinde( port, ip ) )
+    KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
+    if( !kartenClient->verbinde() )
     {
-        letzterFehler->setText( kartenKlient->getLetzterFehler() );
+        letzterFehler->setText( kartenClient->getLetzterFehler() );
         ok = 0;
     }
-    if( !kartenKlient->downloadKarteTitel( karteId ) )
+    if( !kartenClient->downloadKarteTitel( karteId ) )
     {
-        letzterFehler->setText( kartenKlient->getLetzterFehler() );
+        letzterFehler->setText( kartenClient->getLetzterFehler() );
         ok = 0;
     }
+    kartenClient->trenne( 1 );
+    kartenClient->release();
     Bild *ret = 0;
     if( ok )
     {
@@ -74,17 +76,19 @@ Bild *KartenLeser::getKartenVorschauBild() const
 {
     int port = 0;
     Text ip;
-    infoKlient->getKartenServer( karteId, &port, &ip );
-    if( !kartenKlient->verbinde( port, ip ) )
+    KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
+    if( !kartenClient->verbinde() )
     {
-        letzterFehler->setText( kartenKlient->getLetzterFehler() );
+        letzterFehler->setText( kartenClient->getLetzterFehler() );
         return 0;
     }
-    if( !kartenKlient->downloadKarteMinimap( karteId ) )
+    if( !kartenClient->downloadKarteMinimap( karteId ) )
     {
-        letzterFehler->setText( kartenKlient->getLetzterFehler() );
+        letzterFehler->setText( kartenClient->getLetzterFehler() );
         return 0;
     }
+    kartenClient->trenne( 1 );
+    kartenClient->release();
     Text *pfad = getKartePfad();
     pfad->append( "minimap.ltdb" );
     Bild *ret = 0;
@@ -102,17 +106,19 @@ Bild *KartenLeser::getLadeBild() const
 {
     int port = 0;
     Text ip;
-    infoKlient->getKartenServer( karteId, &port, &ip );
-    if( !kartenKlient->verbinde( port, ip ) )
+    KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
+    if( !kartenClient->verbinde() )
     {
-        letzterFehler->setText( kartenKlient->getLetzterFehler() );
+        letzterFehler->setText( kartenClient->getLetzterFehler() );
         return 0;
     }
-    if( !kartenKlient->downloadKarteLadebild( karteId ) )
+    if( !kartenClient->downloadKarteLadebild( karteId ) )
     {
-        letzterFehler->setText( kartenKlient->getLetzterFehler() );
+        letzterFehler->setText( kartenClient->getLetzterFehler() );
         return 0;
     }
+    kartenClient->trenne( 1 );
+    kartenClient->release();
     Text *pfad = getKartePfad();
     pfad->append( "ladebild.ltdb" );
     Bild *ret = 0;
@@ -130,17 +136,19 @@ bool KartenLeser::getKartenBeschreibung() const
 {
     int port = 0;
     Text ip;
-    infoKlient->getKartenServer( karteId, &port, &ip );
-    if( !kartenKlient->verbinde( port, ip ) )
+    KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
+    if( !kartenClient->verbinde() )
     {
-        letzterFehler->setText( kartenKlient->getLetzterFehler() );
+        letzterFehler->setText( kartenClient->getLetzterFehler() );
         return 0;
     }
-    if( !kartenKlient->downloadKarteBeschreibung( karteId ) )
+    if( !kartenClient->downloadKarteBeschreibung( karteId ) )
     {
-        letzterFehler->setText( kartenKlient->getLetzterFehler() );
+        letzterFehler->setText( kartenClient->getLetzterFehler() );
         return 0;
     }
+    kartenClient->trenne( 1 );
+    kartenClient->release();
     return 1;
 }
 
@@ -151,11 +159,11 @@ int KartenLeser::getSpielId() const
         letzterFehler->setText( "Karte Id ist nicht gesetzt." );
         return 0;
     }
-    if( infoKlient )
+    if( infoClient )
     {
-        int id = infoKlient->getSpielId( karteId );
+        int id = infoClient->getSpielId( karteId );
         if( !id )
-            letzterFehler->setText( infoKlient->getLetzterFehler() );
+            letzterFehler->setText( infoClient->getLetzterFehler() );
         return id;
     }
     else
@@ -170,14 +178,14 @@ int KartenLeser::getKarteId() const
 
 Text *KartenLeser::getSpielName() const
 {
-    if( infoKlient )
+    if( infoClient )
     {
         int id = getSpielId();
         if( !id )
             return 0;
-        Text *name = infoKlient->getSpielName( id );
+        Text *name = infoClient->getSpielName( id );
         if( !name )
-            letzterFehler->setText( infoKlient->getLetzterFehler() );
+            letzterFehler->setText( infoClient->getLetzterFehler() );
         return name;
     }
     else
@@ -188,8 +196,8 @@ Text *KartenLeser::getSpielName() const
 Text *KartenLeser::getSpielPfad() const
 {
     int sId = getSpielId();
-    int dg = infoKlient->getDateiGruppeIdVonSpiel( sId );
-    Text *pfad = infoKlient->getDateiGruppePfad( dg );
+    int dg = infoClient->getDateiGruppeIdVonSpiel( sId );
+    Text *pfad = infoClient->getDateiGruppePfad( dg );
     if( !pfad )
     {
         letzterFehler->setText( "Der Pfad des Spieles konnte nicht ermittelt werden." );
@@ -206,11 +214,11 @@ Text *KartenLeser::getKarteName() const
         letzterFehler->setText( "Karte Id ist nicht gesetzt." );
         return 0;
     }
-    if( infoKlient )
+    if( infoClient )
     {
-        Text *name = infoKlient->getKarteName( karteId );
+        Text *name = infoClient->getKarteName( karteId );
         if( !name )
-            letzterFehler->setText( infoKlient->getLetzterFehler() );
+            letzterFehler->setText( infoClient->getLetzterFehler() );
         return name;
     }
     else

+ 1 - 1
KSGClient/NachLogin/Account/AccountAnsehen.cpp

@@ -133,7 +133,7 @@ bool AccountAnsehen::tick( double tickVal )
 				{
 					prozent1 = 100;
 					if( !jetzt && !nachher )
-						setSpielerDetails( loginKlient->getAccountId(), 2 );
+						setSpielerDetails( loginClient->getAccountId(), 2 );
 				}
 				pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 );
 				gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 );

+ 22 - 29
KSGClient/NachLogin/Account/Aktivität/AccountAktivität.cpp

@@ -99,33 +99,30 @@ void AccountAktivit
 
 void AccountAktivität::thread()
 {
-	Text *name = infoKlient->getSpielerName( accId );
+	Text *name = infoClient->getSpielerName( accId );
 	if( name )
 	{
 		name->insert( 0, "Aktivität von " );
 		aktivitätF->setTitel( *name );
 		name->release();
 	}
-	RCArray< Text > *datum = new RCArray< Text >();
-	Array< double > *stOnline = new Array< double >();
-	Array< double > *stGespielt = new Array< double >();
-	Array< int > *anzSpiele = new Array< int >();
-	Array< int > *anzGewonnen = new Array< int >();
-	if( infoKlient->getSpielerAktivität( accId, datum, stOnline, stGespielt, anzSpiele, anzGewonnen ) )
+    Array< KSGClient::AccountActivityInfo > activity;
+	if( infoClient->getSpielerAktivität( accId, &activity ) )
 	{
-		int anz = datum->getEintragAnzahl();
+		int anz = activity.getEintragAnzahl();
 		double maxO = 0;
 		int maxS = 0;
 		for( int i = 0; i < anz; i++ )
 		{
-			if( stOnline->hat( i ) && stOnline->get( i ) > maxO )
-				maxO = stOnline->get( i );
-			if( stGespielt->hat( i ) && stGespielt->get( i ) > maxO )
-				maxO = stGespielt->get( i );
-			if( anzSpiele->hat( i ) && anzSpiele->get( i ) > maxS )
-				maxS = anzSpiele->get( i );
-			if( anzGewonnen->hat( i ) && anzGewonnen->get( i ) > maxS )
-				maxS = anzGewonnen->get( i );
+            KSGClient::AccountActivityInfo info = activity.get( i );
+			if( info.stOnline > maxO )
+				maxO = info.stOnline;
+			if( info.stGespielt > maxO )
+				maxO = info.stGespielt;
+			if( info.anzSpiele > maxS )
+				maxS = info.anzSpiele;
+			if( info.anzGewonnen > maxS )
+				maxS = info.anzGewonnen;
 		}
 		maxO += ( maxO / 100 ) * 10;
 		maxS++;
@@ -133,10 +130,10 @@ void AccountAktivit
 		online->addVIntervallText( (int)maxO + 1, Text() += (int)( maxO + 1 ) );
 		spiele->addVIntervallText( 0, "0" );
 		spiele->addVIntervallText( (int)maxS + 1, Text() += (int)( maxS + 1 ) );
-		online->addHIntervallText( 0, datum->z( 0 )->getText() );
-		online->addHIntervallText( anz - 1, datum->z( anz - 1 )->getText() );
-		spiele->addHIntervallText( 0, datum->z( 0 )->getText() );
-		spiele->addHIntervallText( anz - 1, datum->z( anz - 1 )->getText() );
+		online->addHIntervallText( 0, activity.get( 0 ).datum );
+		online->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum );
+		spiele->addHIntervallText( 0, activity.get( 0 ).datum );
+		spiele->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum );
 		DiagWert *w = new DiagWert();
 		w->farbe = 0xFF00FFFF;
 		w->hintergrund = 0xFF205050;
@@ -163,19 +160,15 @@ void AccountAktivit
 		spiele->addWert( w );
 		for( int i = 0; i < anz; i++ )
 		{
-			online->addPunkt( 0, i, stOnline->get( i ) );
-			online->addPunkt( 1, i, stGespielt->get( i ) );
-			spiele->addPunkt( 0, i, anzSpiele->get( i ) );
-			spiele->addPunkt( 1, i, anzGewonnen->get( i ) );
+            KSGClient::AccountActivityInfo info = activity.get( i );
+			online->addPunkt( 0, i, info.stOnline );
+			online->addPunkt( 1, i, info.stGespielt );
+			spiele->addPunkt( 0, i, info.anzSpiele );
+			spiele->addPunkt( 1, i, info.anzGewonnen );
 		}
 	}
 	else
 		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Aktivität des Spielers konnte nicht ermittelt werden." ), new Text( "Ok" ) );
-	datum->release();
-	stOnline->release();
-	stGespielt->release();
-	anzSpiele->release();
-	anzGewonnen->release();
 	animation &= ~0x4;
 	status = 2;
 	run = 0;

+ 25 - 22
KSGClient/NachLogin/Account/Historie/AccountHistorie.cpp

@@ -1,5 +1,4 @@
 #include "AccountHistorie.h"
-#include "AccountHistorieDaten.h"
 #include "../../../Global/Initialisierung.h"
 #include "../../../Leser/KartenLeser.h"
 #include "../../../Global/Variablen.h"
@@ -132,9 +131,11 @@ bool AHSpielStatistik::ladeDaten( int spielId, int karteId )
 void AHSpielStatistik::thread()
 {
 	laden->setSichtbar( 1 );
-	if( !historieKlient->downloadSpielHistorie( spielId ) )
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( historieKlient->getLetzterFehler() ), new Text( "Ok" ) );
-	statistik->ladeDaten( spielId );
+    KSGClient::HistorieServerClient *historieClient = infoClient->createHistorieServerClient( spielId );
+	if( !historieClient->downloadSpielHistorie() )
+		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( historieClient->getLetzterFehler() ), new Text( "Ok" ) );
+    historieClient->release();
+    statistik->ladeDaten( spielId );
 	laden->setSichtbar( 0 );
 	if( sichtbar )
 		statistik->setSichtbar( 1 );
@@ -371,9 +372,11 @@ bool AHSpielVideo::ladeDaten( int spielId, int karteId )
 void AHSpielVideo::thread()
 {
 	laden->setSichtbar( 1 );
-	if( !historieKlient->downloadSpielHistorie( spielId ) )
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( historieKlient->getLetzterFehler() ), new Text( "Ok" ) );
-	video->ladeSpiel( spielId );
+    KSGClient::HistorieServerClient *historieClient = infoClient->createHistorieServerClient( spielId );
+    if( !historieClient->downloadSpielHistorie() )
+		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( historieClient->getLetzterFehler() ), new Text( "Ok" ) );
+    historieClient->release();
+    video->ladeSpiel( spielId );
 	laden->setSichtbar( 0 );
 	if( sichtbar )
 	{
@@ -1241,33 +1244,33 @@ void AccountHistorie::ladeStatistik( int accId )
 
 void AccountHistorie::thread()
 {
-	Text *name = infoKlient->getSpielerName( accId );
+	Text *name = infoClient->getSpielerName( accId );
 	if( name )
 	{
 		name->insert( 0, "Historie von " );
 		historieF->setTitel( *name );
 		name->release();
 	}
-	AHDaten *daten = infoKlient->getSpielHistorieDaten( accId );
-	int anz = daten->spiele->getEintragAnzahl();
+	Array< KSGClient::SpielHistorieDaten > *daten = infoClient->getSpielHistorieDaten( accId );
+	int anz = daten->getEintragAnzahl();
 	for( int i = 0; i < anz; i++ )
 	{
-		AHSpielDaten *spiel = daten->spiele->z( i );
-		AHSpielListeEintrag *spielE = new AHSpielListeEintrag( spiel->id, spiel->karteId, schrift, *spiel->spiel, *spiel->karte,
-															   *spiel->datum, *spiel->status, *spiel->dauer,
-															   *spiel->spielStatus, *spiel->gewinner, spiel->sAnzahl );
-		int tAnz = spiel->teams->getEintragAnzahl();
+		KSGClient::SpielHistorieDaten spiel = daten->get( i );
+		AHSpielListeEintrag *spielE = new AHSpielListeEintrag( spiel.id, spiel.karteId, schrift, spiel.spiel, spiel.karte,
+															   spiel.datum, spiel.status, spiel.dauer,
+															   spiel.spielStatus, spiel.gewinner, spiel.sAnzahl );
+		int tAnz = spiel.teams.getEintragAnzahl();
 		for( int j = 0; j < tAnz; j++ )
 		{
-			AHSpielTeamDaten *team = spiel->teams->z( j );
-			AHSLETeamListeTeam *teamE = new AHSLETeamListeTeam( schrift, *team->name, team->sAnzahl, *team->status,
-																team->farbe, spielE->getListeBreite() );
-			int sAnz = team->spieler->getEintragAnzahl();
+			KSGClient::SpielHistorieTeamDaten team = spiel.teams.get( j );
+			AHSLETeamListeTeam *teamE = new AHSLETeamListeTeam( schrift, team.name, team.sAnzahl, team.status,
+																team.farbe, spielE->getListeBreite() );
+			int sAnz = team.spieler.getEintragAnzahl();
 			for( int k = 0; k < sAnz; k++ )
 			{
-				AHSpielSpielerDaten *spieler = team->spieler->z( k );
-				AHSLETeamListeSpieler *spielerE = new AHSLETeamListeSpieler( schrift, *spieler->name, spieler->punkte, *spieler->status,
-																			 spieler->farbe, spielE->getListeBreite() - 4 );
+				KSGClient::SpielHistorieSpielerDaten spieler = team.spieler.get( k );
+				AHSLETeamListeSpieler *spielerE = new AHSLETeamListeSpieler( schrift, spieler.name, spieler.punkte, spieler.status,
+																			 spieler.farbe, spielE->getListeBreite() - 4 );
 				teamE->addSpieler( spielerE );
 			}
 			spielE->addTeam( teamE );

+ 0 - 140
KSGClient/NachLogin/Account/Historie/AccountHistorieDaten.cpp

@@ -1,140 +0,0 @@
-#include "AccountHistorieDaten.h"
-
-// Inhalt der AHSpielSpielerDaten Struktur aus AccountHistorieDaten.h
-// Konstruktor
-AHSpielSpielerDaten::AHSpielSpielerDaten()
-: name( new Text() ),
-  status( new Text() ),
-  ref( 1 )
-{
-}
-
-// Destruktor
-AHSpielSpielerDaten::~AHSpielSpielerDaten()
-{
-	name->release();
-	status->release();
-}
-
-// Reference Counting
-AHSpielSpielerDaten *AHSpielSpielerDaten::getThis()
-{
-	ref++;
-	return this;
-}
-
-AHSpielSpielerDaten *AHSpielSpielerDaten::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
-}
-
-
-// Inhalt der AHSpielTeamDaten Struktur aus AccountHistorieDaten.h
-// Konstruktor
-AHSpielTeamDaten::AHSpielTeamDaten()
-: name( new Text() ),
-  status( new Text() ),
-  spieler( new RCArray< AHSpielSpielerDaten >() ),
-  ref( 1 )
-{
-}
-
-// Destruktor
-AHSpielTeamDaten::~AHSpielTeamDaten()
-{
-	name->release();
-	status->release();
-	spieler->release();
-}
-
-// Reference Counting
-AHSpielTeamDaten *AHSpielTeamDaten::getThis()
-{
-	ref++;
-	return this;
-}
-
-AHSpielTeamDaten *AHSpielTeamDaten::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
-}
-
-
-// Inhalt der AHSpielDaten Struktur aus AccountHistorieDaten.h
-// Konstruktor
-AHSpielDaten::AHSpielDaten()
-: spiel( new Text() ),
-  karte( new Text() ),
-  datum( new Text() ),
-  status( new Text() ),
-  dauer( new Text() ),
-  spielStatus( new Text() ),
-  gewinner( new Text() ),
-  teams( new RCArray< AHSpielTeamDaten >() ),
-  ref( 1 )
-{
-}
-
-// Destruktor
-AHSpielDaten::~AHSpielDaten()
-{
-	spiel->release();
-	karte->release();
-	datum->release();
-	status->release();
-	dauer->release();
-	spielStatus->release();
-	gewinner->release();
-	teams->release();
-}
-
-// Reference Counting
-AHSpielDaten *AHSpielDaten::getThis()
-{
-	ref++;
-	return this;
-}
-
-AHSpielDaten *AHSpielDaten::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
-}
-
-
-// Inhalt der AHDaten Struktur aus AccountHistorieDaten.h
-// Konstruktor
-AHDaten::AHDaten()
-: spiele( new RCArray< AHSpielDaten >() ),
-  ref( 1 )
-{
-}
-
-// Destruktor
-AHDaten::~AHDaten()
-{
-	spiele->release();
-}
-
-// Reference Counting
-AHDaten *AHDaten::getThis()
-{
-	ref++;
-	return this;
-}
-
-AHDaten *AHDaten::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
-}

+ 0 - 82
KSGClient/NachLogin/Account/Historie/AccountHistorieDaten.h

@@ -1,82 +0,0 @@
-#ifndef AccountHistorieDaten_H
-#define AccountHistorieDaten_H
-
-#include <Array.h>
-#include <Text.h>
-
-using namespace Framework;
-
-struct AHSpielSpielerDaten
-{
-	Text *name;
-	int punkte;
-	Text *status;
-	int farbe;
-	int ref;
-
-	// Konstruktor
-	AHSpielSpielerDaten();
-	// Destruktor
-	~AHSpielSpielerDaten();
-	// Reference Counting
-	AHSpielSpielerDaten *getThis();
-	AHSpielSpielerDaten *release();
-};
-
-struct AHSpielTeamDaten
-{
-	Text *name;
-	int sAnzahl;
-	Text *status;
-	int farbe;
-	RCArray< AHSpielSpielerDaten > *spieler;
-	int ref;
-
-	// Konstruktor
-	AHSpielTeamDaten();
-	// Destruktor
-	~AHSpielTeamDaten();
-	// Reference Counting
-	AHSpielTeamDaten *getThis();
-	AHSpielTeamDaten *release();
-};
-
-struct AHSpielDaten
-{
-	int id;
-	int karteId;
-	Text *spiel;
-	Text *karte;
-	Text *datum;
-	Text *status;
-	Text *dauer;
-	Text *spielStatus;
-	Text *gewinner;
-	int sAnzahl;
-	RCArray< AHSpielTeamDaten > *teams;
-	int ref;
-
-	// Konstruktor
-	AHSpielDaten();
-	// Destruktor
-	~AHSpielDaten();
-	// Reference Counting
-	AHSpielDaten *getThis();
-	AHSpielDaten *release();
-};
-
-struct AHDaten
-{
-	RCArray< AHSpielDaten > *spiele;
-	int ref;
-
-	// Konstruktor
-	AHDaten();
-	// Destruktor
-	~AHDaten();
-	// Reference Counting
-	AHDaten *getThis();
-	AHDaten *release();
-};
-
-#endif

+ 12 - 12
KSGClient/NachLogin/Account/SpielPartner/AccountSpielPartner.cpp

@@ -414,7 +414,7 @@ void AccountSPListe::ladeDaten( int accId )
 	Array< int > *spieler = new Array< int >();
 	Array< int > *karten = new Array< int >();
 	Array< int > *anzahl = new Array< int >();
-	if( infoKlient->getSpielPartnerListe( accId, spieler, karten, anzahl ) )
+	if( infoClient->getSpielPartnerListe( accId, spieler, karten, anzahl ) )
 	{
 		int anz = spieler->getEintragAnzahl();
 		int spielerAnzahl = 0;
@@ -433,7 +433,7 @@ void AccountSPListe::ladeDaten( int accId )
 			if( !spielArt->hat( i ) )
 			{
 				spielArtAnzahl++;
-				int id = infoKlient->getSpielId( karten->get( i ) );
+				int id = infoClient->getSpielId( karten->get( i ) );
 				for( int j = i; j < anz; j++ )
 				{
 					if( karten->get( j ) == karten->get( i ) )
@@ -460,7 +460,7 @@ void AccountSPListe::ladeDaten( int accId )
 				break;
 			AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
 			tmp->id = id;
-			tmp->name = infoKlient->getSpielName( tmp->id );
+			tmp->name = infoClient->getSpielName( tmp->id );
 			tmp->style = ASPLEDStyle::SpielArt | ASPLEDStyle::Ausklappbar;
 			tmp->anzahl = 0;
 			for( int j = 0; j < anz; j++ )
@@ -491,7 +491,7 @@ void AccountSPListe::ladeDaten( int accId )
 					break;
 				AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
 				tmpk->id = id;
-				tmpk->name = infoKlient->getKarteName( tmpk->id );
+				tmpk->name = infoClient->getKarteName( tmpk->id );
 				tmpk->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::Karte;
 				tmpk->anzahl = 0;
 				for( int k = 0; k < anz; k++ )
@@ -524,7 +524,7 @@ void AccountSPListe::ladeDaten( int accId )
 						break;
 					AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
 					tmps->id = id;
-					tmps->name = infoKlient->getSpielerName( tmps->id );
+					tmps->name = infoClient->getSpielerName( tmps->id );
 					tmps->style = ASPLEDStyle::Spieler;
 					tmps->anzahl = gAnz;
 					tmps->prozent = tmps->anzahl * 100 / tmpk->anzahl;
@@ -552,7 +552,7 @@ void AccountSPListe::ladeDaten( int accId )
 				break;
 			AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
 			tmp->id = id;
-			tmp->name = infoKlient->getSpielName( tmp->id );
+			tmp->name = infoClient->getSpielName( tmp->id );
 			tmp->style = ASPLEDStyle::SpielArt | ASPLEDStyle::Ausklappbar;
 			tmp->anzahl = 0;
 			for( int j = 0; j < anz; j++ )
@@ -583,7 +583,7 @@ void AccountSPListe::ladeDaten( int accId )
 					break;
 				AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
 				tmps->id = id;
-				tmps->name = infoKlient->getSpielerName( tmps->id );
+				tmps->name = infoClient->getSpielerName( tmps->id );
 				tmps->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::Spieler;
 				tmps->anzahl = 0;
 				for( int k = 0; k < anz; k++ )
@@ -616,7 +616,7 @@ void AccountSPListe::ladeDaten( int accId )
 						break;
 					AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
 					tmpk->id = id;
-					tmpk->name = infoKlient->getKarteName( tmpk->id );
+					tmpk->name = infoClient->getKarteName( tmpk->id );
 					tmpk->style = ASPLEDStyle::Karte;
 					tmpk->anzahl = gAnz;
 					tmpk->prozent = tmpk->anzahl * 100 / tmps->anzahl;
@@ -645,7 +645,7 @@ void AccountSPListe::ladeDaten( int accId )
 				break;
 			AccountSPListeEintragDaten *tmp = new AccountSPListeEintragDaten();
 			tmp->id = id;
-			tmp->name = infoKlient->getSpielerName( tmp->id );
+			tmp->name = infoClient->getSpielerName( tmp->id );
 			tmp->style = ASPLEDStyle::Spieler | ASPLEDStyle::Ausklappbar;
 			tmp->anzahl = 0;
 			for( int j = 0; j < anz; j++ )
@@ -676,7 +676,7 @@ void AccountSPListe::ladeDaten( int accId )
 					break;
 				AccountSPListeEintragDaten *tmps = new AccountSPListeEintragDaten();
 				tmps->id = id;
-				tmps->name = infoKlient->getSpielName( tmps->id );
+				tmps->name = infoClient->getSpielName( tmps->id );
 				tmps->style = ASPLEDStyle::Ausklappbar | ASPLEDStyle::SpielArt;
 				tmps->anzahl = 0;
 				for( int k = 0; k < anz; k++ )
@@ -709,7 +709,7 @@ void AccountSPListe::ladeDaten( int accId )
 						break;
 					AccountSPListeEintragDaten *tmpk = new AccountSPListeEintragDaten();
 					tmpk->id = id;
-					tmpk->name = infoKlient->getKarteName( tmpk->id );
+					tmpk->name = infoClient->getKarteName( tmpk->id );
 					tmpk->style = ASPLEDStyle::Karte;
 					tmpk->anzahl = gAnz;
 					tmpk->prozent = tmpk->anzahl * 100 / tmps->anzahl;
@@ -962,7 +962,7 @@ void AccountSpielPartner::ladeStatistik( int accId )
 
 void AccountSpielPartner::thread()
 {
-	Text *name = infoKlient->getSpielerName( accId );
+	Text *name = infoClient->getSpielerName( accId );
 	if( name )
 	{
 		name->insert( 0, "Spielpartner von " );

+ 10 - 10
KSGClient/NachLogin/Account/Spiele_Karten/AccountSpieleUndKarten.cpp

@@ -19,14 +19,14 @@ AccountSUKListeKarte::AccountSUKListeKarte( Schrift *zSchrift, int id, int accou
   rend( 0 ),
   ref( 1 )
 {
-	na = infoKlient->getKarteName( id );
+	na = infoClient->getKarteName( id );
 	if( na )
 		name->zText()->append( na->getText() );
-	sp = infoKlient->getAccountKarteSpiele( account, id );
+	sp = infoClient->getAccountKarteSpiele( account, id );
 	spiele->zText()->append( sp );
-	gw = infoKlient->getAccountKarteSpieleGewonnen( account, id );
+	gw = infoClient->getAccountKarteSpieleGewonnen( account, id );
 	gewonnen->zText()->append( gw );
-	if( infoKlient->hatAccountKarte( account, id ) )
+	if( infoClient->hatAccountKarte( account, id ) )
 		st->setText( "Im Besitz" );
 	else
 		st->setText( "Nicht im Besitz" );
@@ -145,11 +145,11 @@ AccountSUKListeSpiel::AccountSUKListeSpiel( Schrift *zSchrift, int id, int accou
 	details->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
 	details->setHintergrundBildZ( ausklappen->getThis() );
 	initToolTip( details, "Karten anzeigen.", zSchrift->getThis(), hauptScreen );
-	name = infoKlient->getSpielName( id );
+	name = infoClient->getSpielName( id );
 	if( name )
 		nameTF->zText()->append( name->getText() );
 	Array< int > *stat = new Array< int >();
-	if( infoKlient->getSpielStatistik( account, id, stat ) )
+	if( infoClient->getSpielStatistik( account, id, stat ) )
 	{
 		spiele = stat->get( 0 );
 		gewonnen = stat->get( 1 );
@@ -159,12 +159,12 @@ AccountSUKListeSpiel::AccountSUKListeSpiel( Schrift *zSchrift, int id, int accou
 	spieleTF->zText()->append( spiele );
 	gewonnenTF->zText()->append( gewonnen );
 	punkteTF->zText()->append( punkte );
-	if( infoKlient->hatAccountSpiel( account, id ) )
+	if( infoClient->hatAccountSpiel( account, id ) )
 		status->setText( "Im Besitz" );
 	else
 		status->setText( "Nicht im Besitz" );
 	statusTF->zText()->append( status->getText() );
-	Array< int > *maps = infoKlient->getAccountKarteGespieltListe( account, id );
+	Array< int > *maps = infoClient->getAccountKarteGespieltListe( account, id );
 	if( maps )
 	{
 		int anz = maps->getEintragAnzahl();
@@ -734,14 +734,14 @@ void AccountSpieleUndKarten::ladeStatistik( int accId )
 
 void AccountSpieleUndKarten::thread()
 {
-	Text *name = infoKlient->getSpielerName( accId );
+	Text *name = infoClient->getSpielerName( accId );
 	if( name )
 	{
 		name->insert( 0, "Spiele und Karten von " );
 		spieleUndKartenF->setTitel( *name );
 		name->release();
 	}
-	Array< int > *spiele = infoKlient->getAccountSpielGespieltListe( accId );
+	Array< int > *spiele = infoClient->getAccountSpielGespieltListe( accId );
 	if( spiele )
 	{
 		int anz = spiele->getEintragAnzahl();

+ 2 - 2
KSGClient/NachLogin/Account/Statistik/AccountStatistik.cpp

@@ -129,7 +129,7 @@ void AccountStatistik::thread()
 {
 	laden->setSichtbar( 1 );
 	reset();
-	Text *name = infoKlient->getSpielerName( accId );
+	Text *name = infoClient->getSpielerName( accId );
 	if( name )
 	{
 		name->insert( 0, "Statistik von " );
@@ -138,7 +138,7 @@ void AccountStatistik::thread()
 	}
 	RCArray< Array< int > > *values = new RCArray< Array< int > >();
 	RCArray< Text > *namen = new RCArray< Text >();
-	if( infoKlient->getStatistikListe( accId, &seite, &maxSeite, sortSpalte->getAuswahl(), sortRichtung->getAuswahl(), values, namen ) )
+	if( infoClient->getStatistikListe( accId, &seite, &maxSeite, sortSpalte->getAuswahl(), sortRichtung->getAuswahl(), values, namen ) )
 	{
 		statistikF->lockZeichnung();
 		seiteTF->setText( "Seite " );

+ 12 - 22
KSGClient/NachLogin/Account/Suchen/AccountSuchen.cpp

@@ -126,14 +126,9 @@ void AccountSuchen::thread()
 {
 	laden->setSichtbar( 1 );
 	tabelleLehren( 0 );
-	Array< int > *accounts = new Array< int >();
-	RCArray< Text > *namen = new RCArray< Text >();
-	RCArray< Text > *zuletztOnline = new RCArray< Text >();
-	RCArray< Text > *letztesSpiel = new RCArray< Text >();
-	RCArray< Text > *letzteKarte = new RCArray< Text >();
-	RCArray< Text > *punkte = new RCArray< Text >();
-	int anz = infoKlient->getSpielerListe( accountName->zText()->getText(), &jetztSeite, &maxSeite, sortSpalte->getAuswahl(),
-										   sortRichtung->getAuswahl(), accounts, namen, zuletztOnline, letztesSpiel, letzteKarte, punkte );
+	Array< KSGClient::AccountInfo > info;
+	int anz = infoClient->getSpielerListe( accountName->zText()->getText(), &jetztSeite, &maxSeite, sortSpalte->getAuswahl(),
+										   sortRichtung->getAuswahl(), &info );
 	zurück->setStyle( Knopf::Style::Erlaubt, jetztSeite > 1 );
 	vor->setStyle( Knopf::Style::Erlaubt, jetztSeite < maxSeite );
 	lock();
@@ -144,15 +139,16 @@ void AccountSuchen::thread()
 	unlock();
 	for( int i = 0; i < anz; i++ )
 	{
-		liste->addZeile( i + 1, Text() += accounts->get( i ) );
+        KSGClient::AccountInfo inf = info.get( i );
+		liste->addZeile( i + 1, Text() += inf.id );
 		liste->setZeilenHeight( i + 1, 20 );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Name" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, namen->z( i )->getText() ) );
-		if( zuletztOnline->z( i )->hat( '.' ) )
-			zuletztOnline->z( i )->setText( zuletztOnline->z( i )->getTeilText( 0, zuletztOnline->z( i )->positionVon( '.' ) ) );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Zuletzt Online" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, zuletztOnline->z( i )->getText() ) );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Letztes Spiel" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, letztesSpiel->z( i )->getText() ) );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Letzte Karte" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, letzteKarte->z( i )->getText() ) );
-		liste->setZeichnungZ( liste->getSpaltenNummer( "Spielart Punkte" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, punkte->z( i )->getText() ) );
+		liste->setZeichnungZ( liste->getSpaltenNummer( "Name" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.name ) );
+		if( inf.zuletztOnline.hat( '.' ) )
+			inf.zuletztOnline.setText( inf.zuletztOnline.getTeilText( 0, inf.zuletztOnline.positionVon( '.' ) ) );
+		liste->setZeichnungZ( liste->getSpaltenNummer( "Zuletzt Online" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.zuletztOnline ) );
+		liste->setZeichnungZ( liste->getSpaltenNummer( "Letztes Spiel" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.letztesSpiel ) );
+		liste->setZeichnungZ( liste->getSpaltenNummer( "Letzte Karte" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.letzteKarte ) );
+		liste->setZeichnungZ( liste->getSpaltenNummer( "Spielart Punkte" ), i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text | TextFeld::Style::VCenter, inf.punkte ) );
 		Knopf *details = initKnopf( 0, 0, 20, 20, 0, 0, "" );
 		details->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer | Knopf::Style::Erlaubt );
 		details->setMausEreignisParameter( this );
@@ -160,12 +156,6 @@ void AccountSuchen::thread()
 		details->setHintergrundBildZ( vor->getHintergrundBild() );
 		liste->setZeichnungZ( liste->getSpaltenNummer( "Weiter" ), i + 1, details );
 	}
-	accounts->release();
-	namen->release();
-	zuletztOnline->release();
-	letztesSpiel->release();
-	letzteKarte->release();
-	punkte->release();
 	laden->setSichtbar( 0 );
 	run = 0;
 }

+ 13 - 13
KSGClient/NachLogin/Chat/ChatLeiste.cpp

@@ -218,7 +218,7 @@ ChatFenster::ChatFenster( Schrift *zSchrift, int accountId )
 	: Chat( zSchrift )
 {
 	this->accountId = accountId;
-	name->setTextZ( infoKlient->getSpielerName( accountId ) );
+	name->setTextZ( infoClient->getSpielerName( accountId ) );
 }
 
 // Destruktor
@@ -374,7 +374,7 @@ void ChatFenster::doTastaturEreignis( TastaturEreignis &te )
 			if( !nachricht->zText()->getLength() )
 				break;
 			nachricht->zText()->remove( "\n" );
-			if( chatKlient->chatNachricht( accountId, nachricht->zText()->getText() ) )
+			if( chatClient->chatNachricht( accountId, nachricht->zText()->getText() ) )
 			{
 				Text *n = new Text( nachricht->zText()->getText() );
 				n->insert( 0, "\r0xFF00FF00" );
@@ -472,7 +472,7 @@ ChatroomFenster::ChatroomFenster( Schrift *zSchrift, int chatroomId )
 	spieler->setSpaltenBreite( 1, 20 );
 	spieler->setSpaltenBreite( 2, 0 );
 	schrift = zSchrift->getThis();
-	name->setTextZ( infoKlient->getChatroomName( chatroomId ) );
+	name->setTextZ( infoClient->getChatroomName( chatroomId ) );
 	close->setPosition( close->getX() + 150, close->getY() );
 	minimieren->setPosition( minimieren->getX() + 150, minimieren->getY() );
 	neueSpieler = new Array< int >();
@@ -484,7 +484,7 @@ ChatroomFenster::ChatroomFenster( Schrift *zSchrift, int chatroomId )
 // Destruktor
 ChatroomFenster::~ChatroomFenster()
 {
-	chatKlient->chatroomVerlassen( chatroomId );
+	chatClient->chatroomVerlassen( chatroomId );
 	schrift = schrift->release();
 	neueSpieler = neueSpieler->release();
 	alteSpieler = alteSpieler->release();
@@ -534,7 +534,7 @@ void ChatroomFenster::addSpieler( int accountId )
 	}
 	spieler->addZeile( zeile->getText() );
 	spieler->setZeilenHeight( zeile->getText(), 0 );
-	Text *name = infoKlient->getSpielerName( accountId );
+	Text *name = infoClient->getSpielerName( accountId );
 	TextFeld *sName = initTextFeld( 0, 0, 110, 20, schrift, TextFeld::Style::Sichtbar | TextFeld::Style::Text | TextFeld::Style::Center, name->getText() );
 	name = name->release();
 	spieler->setZeichnungZ( "Name", zeile->getText(), sName );
@@ -769,10 +769,10 @@ void ChatroomFenster::doMausEreignis( MausEreignis &me )
 			break;
 		if( spielerName->zText()->getLength() )
 		{
-			int accountId = infoKlient->getAccountId( spielerName->zText()->getText() );
+			int accountId = infoClient->getAccountId( spielerName->zText()->getText() );
 			if( accountId )
 			{
-				if( chatKlient->chatroomEinladung( accountId, chatroomId ) )
+				if( chatClient->chatroomEinladung( accountId, chatroomId ) )
 				{
 					nachLogin->zNachrichtenListe()->addNachricht( new Text( "Chatroom Einladung" ), new Text( "Es wurde eine Chatroom Einladung an den Spieler gesendet." ),
 																  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
@@ -815,7 +815,7 @@ void ChatroomFenster::doTastaturEreignis( TastaturEreignis &te )
 		if( te.id == TE_Release && te.taste == T_Enter )
 		{
 			nachricht->zText()->remove( "\n" );
-			chatKlient->chatroomNachricht( chatroomId, nachricht->zText()->getText() );
+			chatClient->chatroomNachricht( chatroomId, nachricht->zText()->getText() );
 			nachricht->setText( "" );
 			nachricht->setAuswahl( 0, 0 );
 			rend = 1;
@@ -826,10 +826,10 @@ void ChatroomFenster::doTastaturEreignis( TastaturEreignis &te )
 		{
 			if( !spielerName->zText()->getLength() )
 				break;
-			int accountId = infoKlient->getAccountId( spielerName->zText()->getText() );
+			int accountId = infoClient->getAccountId( spielerName->zText()->getText() );
 			if( accountId )
 			{
-				if( chatKlient->chatroomEinladung( accountId, chatroomId ) )
+				if( chatClient->chatroomEinladung( accountId, chatroomId ) )
 				{
 					nachLogin->zNachrichtenListe()->addNachricht( new Text( "Chatroom Einladung" ), new Text( "Es wurde eine Chatroom Einladung an den Spieler gesendet." ),
 																  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
@@ -882,7 +882,7 @@ bool ChatroomFenster::druckFreund( void *obj, MausEreignis &me )
 		if( p.y >= 0 )
 		{
 			int accountId = TextZuInt( spieler->zZeilenName( p.y )->getText(), 10 );
-			if( chatKlient->freundesAnfrage( accountId ) )
+			if( chatClient->freundesAnfrage( accountId ) )
 			{
 				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Freundes Einladung" ), new Text( "Es wurde eine Freundesanfrage an den Spieler gesendet." ),
 															  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
@@ -901,7 +901,7 @@ bool ChatroomFenster::druckEntfernen( void *obj, MausEreignis &me )
 		if( p.y >= 0 )
 		{
 			int accountId = TextZuInt( spieler->zZeilenName( p.y )->getText(), 10 );
-			if( chatKlient->chatroomKick( chatroomId, accountId ) )
+			if( chatClient->chatroomKick( chatroomId, accountId ) )
 			{
 				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Kick" ), new Text( "Der Spieler musste das Chatroom verlassen." ),
 															  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
@@ -1265,7 +1265,7 @@ ChatLeiste::ChatLeiste( Schrift *zSchrift, Fenster *zNachLoginFenster )
 	animation = 1;
 	ref = 1;
 	rend = 0;
-	chatKlient->chatNachrichtAnfrage();
+	chatClient->chatNachrichtAnfrage();
 }
 
 // Destruktor

+ 33 - 17
KSGClient/NachLogin/Chat/FreundesListe.cpp

@@ -121,9 +121,9 @@ FreundData::~FreundData()
 // nicht constant
 void FreundData::thread()
 {
-	if( infoKlient )
+	if( infoClient )
 	{
-		Text *n = infoKlient->getSpielerName( accountId );
+		Text *n = infoClient->getSpielerName( accountId );
 		name->setTextZ( n );
 	}
 	run = 0;
@@ -244,11 +244,27 @@ void FreundData::doMausEreignis( MausEreignis &me )
 		case 4: // In Gruppe einladen
 			if( me.id == ME_RLinks )
 			{
-				if( !anmeldungKlient->gruppeSpielerEinladen( accountId, nachLogin->zSpielenFenster()->getGruppeId() ) )
-				{
-					nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-																  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-				}
+                if( !anmeldungClient )
+                    anmeldungClient = mainClient->createAnmeldungServerClient();
+                if( !anmeldungClient )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                }
+                if( anmeldungClient && anmeldungClient->verbinde() )
+                {
+                    if( !anmeldungClient->gruppeSpielerEinladen( accountId, nachLogin->zSpielenFenster()->getGruppeId() ) )
+                    {
+                        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                                      new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                    }
+                    anmeldungClient->trenne( 0 );
+                }
+                else
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                }
 			}
 		default:
 			// nichts
@@ -860,9 +876,9 @@ void FreundesListe::setAnimation( int animation )
 void FreundesListe::thread()
 {
 	bool err = 1;
-	if( infoKlient && loginKlient )
+	if( infoClient && loginClient )
 	{
-		Text *name = infoKlient->getSpielerName( loginKlient->getAccountId() );
+		Text *name = infoClient->getSpielerName( loginClient->getAccountId() );
 		if( name )
 		{
 			accountName->setText( name->getText() );
@@ -880,7 +896,7 @@ void FreundesListe::thread()
 													   0 );
 	}
 	err = 0;
-	if( ( !chatKlient || !chatKlient->freundesListeAnfragen() ) && nachLogin->zNachrichtenListe() )
+	if( ( !chatClient || !chatClient->freundesListeAnfragen() ) && nachLogin->zNachrichtenListe() )
 	{
 		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
 													   new Text( "Deine Freunde konnten nicht geladen werden." ),
@@ -1043,7 +1059,7 @@ bool FreundesListe::druckMinMax( MausEreignis &me )
 bool FreundesListe::druckName( TastaturEreignis &te )
 {
 	if( te.id == TE_Release && te.taste == T_Enter )
-		chatKlient->accountNameÄndern( accountName->zText()->getText() );
+		chatClient->accountNameÄndern( accountName->zText()->getText() );
 	return 1;
 }
 
@@ -1087,10 +1103,10 @@ bool FreundesListe::druckNeuerFreundFertig( MausEreignis &me )
 	{
 		if( neuerFreundSpielerName->zText()->getLength() )
 		{
-			int accountId = infoKlient->getAccountId( neuerFreundSpielerName->zText()->getText() );
+			int accountId = infoClient->getAccountId( neuerFreundSpielerName->zText()->getText() );
 			if( accountId )
 			{
-				if( chatKlient->freundesAnfrage( accountId ) )
+				if( chatClient->freundesAnfrage( accountId ) )
 				{
 					nachLogin->zNachrichtenListe()->addNachricht( new Text( "Freundesanfrage" ), new Text( "Es wurde eine Anfrage an den Spieler gesendet." ),
 																  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
@@ -1125,7 +1141,7 @@ bool FreundesListe::druckNeuerChatFertig( MausEreignis &me )
 	{
 		if( neuerChatName->zText()->getLength() )
 		{
-			int accountId = infoKlient->getAccountId( neuerChatName->zText()->getText() );
+			int accountId = infoClient->getAccountId( neuerChatName->zText()->getText() );
 			if( accountId )
 			{
 				nachLogin->zChatLeiste()->addChat( accountId, 0 );
@@ -1159,10 +1175,10 @@ bool FreundesListe::druckNeuesChatroomFertig( MausEreignis &me )
 	{
 		if( neuesChatroomName->zText()->getLength() )
 		{
-			int chatroomId = infoKlient->getChatroomId( neuesChatroomName->zText()->getText() );
+			int chatroomId = infoClient->getChatroomId( neuesChatroomName->zText()->getText() );
 			if( chatroomId )
 			{
-				if( chatKlient->chatroomBetreten( chatroomId ) )
+				if( chatClient->chatroomBetreten( chatroomId ) )
 				{
 					nachLogin->zChatLeiste()->addChat( 0, chatroomId );
 					neuerChatSichtbar = 0;
@@ -1170,7 +1186,7 @@ bool FreundesListe::druckNeuesChatroomFertig( MausEreignis &me )
 			}
 			else
 			{
-				chatroomId = chatKlient->chatroomErstellen( neuesChatroomName->zText()->getText() );
+				chatroomId = chatClient->chatroomErstellen( neuesChatroomName->zText()->getText() );
 				if( chatroomId )
 				{
 					nachLogin->zChatLeiste()->addChat( 0, chatroomId );

+ 56 - 31
KSGClient/NachLogin/Chat/NachrichtenListe.cpp

@@ -191,20 +191,20 @@ void Nachricht::doMausEreignis( MausEreignis &me )
 			switch( typ )
 			{
 			case 1: // freund entfernen
-				chatKlient->freundschaftBeenden( *( (int*)param ) );
+				chatClient->freundschaftBeenden( *( (int*)param ) );
 				break;
 			case 2: // freund einladung
-				chatKlient->freundesAnfrageBeantworten( *( (int*)param ), 1 );
+				chatClient->freundesAnfrageBeantworten( *( (int*)param ), 1 );
 				break;
 			case 3: // spiel einladung
 				if( 1 )
 				{
-					int karteId = infoKlient->getGruppenKarteId( ( (SpielEinladungParam*)param )->gruppeId );
-					int spielArt = infoKlient->getSpielId( karteId );
+					int karteId = infoClient->getGruppenKarteId( ( (SpielEinladungParam*)param )->gruppeId );
+					int spielArt = infoClient->getSpielId( karteId );
 					KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
 					dgt->laden();
 					bool sak = 0;
-					int dgSId = infoKlient->getDateiGruppeIdVonSpiel( spielArt );
+					int dgSId = infoClient->getDateiGruppeIdVonSpiel( spielArt );
 					bool sgf = 0;
 					for( int i = 0; i < dgt->getZeilenAnzahl(); i++ )
 					{
@@ -212,7 +212,7 @@ void Nachricht::doMausEreignis( MausEreignis &me )
 						{
 							sgf = 1;
 							int lv = dgt->zFeld( i, 2 ) ? TextZuInt( dgt->zFeld( i, 2 )->getText(), 10 ) : 0;
-							int ov = infoKlient->getSpielVersion( spielArt );
+							int ov = infoClient->getSpielVersion( spielArt );
                             if( lv == ov )
                             {
                                 sak = 1;
@@ -223,11 +223,17 @@ void Nachricht::doMausEreignis( MausEreignis &me )
 					dgt->release();
 					if( !sak )
 					{
-						anmeldungKlient->gruppeEinladungAblehnen( ( (SpielEinladungParam*)param )->gruppeId );
-						nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Deine Spiel Version ist nicht aktuell. Sie wird beim nächsten Spielstart aktualisiert." ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                        if( !anmeldungClient )
+                            anmeldungClient = mainClient->createAnmeldungServerClient();
+                        if( anmeldungClient && anmeldungClient->verbinde() )
+                        {
+                            anmeldungClient->gruppeEinladungAblehnen( ( (SpielEinladungParam*)param )->gruppeId );
+                            anmeldungClient->trenne( 0 );
+                        }
+                        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Deine Spiel Version ist nicht aktuell. Sie wird beim nächsten Spielstart aktualisiert." ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
 						if( !sgf )
 						{
-							Text *pfad = infoKlient->getDateiGruppePfad( dgSId );
+							Text *pfad = infoClient->getDateiGruppePfad( dgSId );
 							Text *idT = new Text();
 							idT->append( dgSId );
 							if( pfad )
@@ -249,34 +255,47 @@ void Nachricht::doMausEreignis( MausEreignis &me )
 						}
 					}
                     else
-					{
-						MausEreignis me;
-						me.verarbeitet = 0;
-						me.id = ME_RLinks;
-						nachLogin->zTitelLeiste()->druckSpielen( me );
-						Array< int > *spieler = new Array< int >();
-						int anzahl = 0;
-						if( anmeldungKlient->gruppeBetreten( ( (SpielEinladungParam*)param )->gruppeId, spieler, &anzahl ) )
-						{
-							nachLogin->zSpielenFenster()->gruppeBetreten( ( (SpielEinladungParam*)param )->gruppeId );
-							for( int i = 0; i < anzahl; i++ )
-								nachLogin->zSpielenFenster()->spielerBetrittGruppe( ( (SpielEinladungParam*)param )->gruppeId, spieler->hat( i ) ? spieler->get( i ) : 0 );
-						}
-						else
-							nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-					}
+                    {
+                        MausEreignis me;
+                        me.verarbeitet = 0;
+                        me.id = ME_RLinks;
+                        nachLogin->zTitelLeiste()->druckSpielen( me );
+                        Array< int > *spieler = new Array< int >();
+                        int anzahl = 0;
+                        if( !anmeldungClient )
+                            anmeldungClient = mainClient->createAnmeldungServerClient();
+                        if( !anmeldungClient )
+                            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                        if( anmeldungClient && anmeldungClient->verbinde() )
+                        {
+                            if( anmeldungClient->gruppeBetreten( ( (SpielEinladungParam*)param )->gruppeId, spieler, &anzahl ) )
+                            {
+                                nachLogin->zSpielenFenster()->gruppeBetreten( ( (SpielEinladungParam*)param )->gruppeId );
+                                for( int i = 0; i < anzahl; i++ )
+                                    nachLogin->zSpielenFenster()->spielerBetrittGruppe( ( (SpielEinladungParam*)param )->gruppeId, spieler->hat( i ) ? spieler->get( i ) : 0 );
+                            }
+                            else
+                                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                            anmeldungClient->trenne( 0 );
+                        } else if( anmeldungClient )
+                            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                    }
 				}
 				break;
 			case 4: // chatroom einladung
 				nachLogin->zChatLeiste()->addChat( 0, ( (ChatroomEinladungParam*)param )->chatroomId );
-				chatKlient->chatroomBetreten( ( (ChatroomEinladungParam*)param )->chatroomId );
+				chatClient->chatroomBetreten( ( (ChatroomEinladungParam*)param )->chatroomId );
 				break;
 			case 5: // logout
 				::aktion = 3;
 				break;
 			case 6: // close
 				nachLogin->zChatLeiste()->removeAll();
-				loginKlient->logout();
+                if( loginClient && loginClient->verbinde() )
+                {
+                    loginClient->logout();
+                    loginClient->trenne( 1 );
+                }
 				PostQuitMessage( 0 );
 				break;
 			}
@@ -288,13 +307,19 @@ void Nachricht::doMausEreignis( MausEreignis &me )
 			switch( typ )
 			{
 			case 2:
-				chatKlient->freundesAnfrageBeantworten( *( (int*)param ), 0 );
+				chatClient->freundesAnfrageBeantworten( *( (int*)param ), 0 );
 				break;
 			case 3: // spiel einladung
-				anmeldungKlient->gruppeEinladungAblehnen( ( (SpielEinladungParam*)param )->gruppeId );
-				break;
+                if( !anmeldungClient )
+                    anmeldungClient = mainClient->createAnmeldungServerClient();
+                if( anmeldungClient && anmeldungClient->verbinde() )
+                {
+                    anmeldungClient->gruppeEinladungAblehnen( ( (SpielEinladungParam*)param )->gruppeId );
+                    anmeldungClient->trenne( 0 );
+                }
+                break;
 			case 4:
-				chatKlient->chatroomEinladungAblehnen( ( (ChatroomEinladungParam*)param )->vonAccount, ( (ChatroomEinladungParam*)param )->chatroomId );
+				chatClient->chatroomEinladungAblehnen( ( (ChatroomEinladungParam*)param )->vonAccount, ( (ChatroomEinladungParam*)param )->chatroomId );
 				break;
 			}
 			break;

+ 20 - 14
KSGClient/NachLogin/Editor/Auswahl/Auswahl.cpp

@@ -92,55 +92,61 @@ void Auswahl::thread()
     {
         int port = 0;
         Text ip = "";
-        if( !infoKlient->getEditorServer( 0, &port, &ip ) )
+        KSGClient::EditorServerClient *editorClient = infoClient->createEditorServerClient( 0 );
+        if( !editorClient )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoClient->getLetzterFehler() ), new Text( "Ok" ) );
             aktion = 0;
             laden->setSichtbar( 0 );
             run = 0;
             return;
         }
         bool ok = 0;
-        if( editorKlient->verbinde( port, ip ) )
+        if( editorClient->verbinde() )
         {
-            if( editorKlient->karteErstellen( neuKarteName->zText(), infoKlient->getSpielId( neuKarteSpielArt->zEintrag( neuKarteSpielArt->getAuswahl() )->zText()->getText() ) ) )
+            if( editorClient->karteErstellen( neuKarteName->zText()->getText(), infoClient->getSpielId( neuKarteSpielArt->zEintrag( neuKarteSpielArt->getAuswahl() )->zText()->getText() ) ) )
                 ok = 1;
-            editorKlient->trenne();
+            editorClient->trenne( 1 );
         }
         if( !ok )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             aktion = 0;
             laden->setSichtbar( 0 );
             run = 0;
+            editorClient->release();
             return;
         }
         aktion = 0;
         laden->setSichtbar( 0 );
         run = 0;
+        editorClient->release();
         return;
     }
 	if( aktion )
 	{
         int port = 0;
         Text ip = "";
-        if( !infoKlient->getEditorServer( aktion, &port, &ip ) )
+        if( editorClient )
+            editorClient = editorClient->release();
+        editorClient = infoClient->createEditorServerClient( aktion );
+        if( !editorClient )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoClient->getLetzterFehler() ), new Text( "Ok" ) );
             aktion = 0;
             laden->setSichtbar( 0 );
             run = 0;
             return;
         }
         bool ok = 0;
-        if( editorKlient->verbinde( port, ip ) )
+        if( editorClient->verbinde() )
         {
-            if( editorKlient->ladeKarte( aktion ) )
+            if( editorClient->ladeKarte( aktion ) )
                 ok = 1;
         }
         if( !ok )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             aktion = 0;
             laden->setSichtbar( 0 );
             run = 0;
@@ -155,7 +161,7 @@ void Auswahl::thread()
 		run = 0;
 		return;
 	}
-	Array< int > *saList = infoKlient->getAccountSpielArtListe();
+	Array< int > *saList = infoClient->getAccountSpielArtListe();
 	if( saList )
 	{
 		RCArray< Text > *saNamen = new RCArray< Text >();
@@ -164,7 +170,7 @@ void Auswahl::thread()
 		{
 			if( !saList->hat( i ) )
 				continue;
-			Text *name = infoKlient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
+			Text *name = infoClient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
 			if( name )
 				saNamen->add( name );
 		}
@@ -212,7 +218,7 @@ void Auswahl::thread()
 	Array< int > *kupfer = new Array< int >();
 	Array< int > *verkauft = new Array< int >();
 	Array< int > *maxSpieler = new Array< int >();
-	int kAnz = infoKlient->getKartenListe( suchFilter->zText()->getText(), (char)sortSpalte->getAuswahl(), (char)sortRichtung->getAuswahl(),
+	int kAnz = infoClient->getKartenListe( suchFilter->zText()->getText(), (char)sortSpalte->getAuswahl(), (char)sortRichtung->getAuswahl(),
 										   kId, kName, saName, kupfer, verkauft, maxSpieler );
 	for( int i = 0; i < kAnz; i++ )
 	{

+ 2 - 2
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBVorschau.cpp

@@ -233,10 +233,10 @@ int KEBVorschau::getAktion()
 
 bool KEBVorschau::ladeKarte()
 {
-    Text *scr = editorKlient->beschreibungLaden();
+    Text *scr = editorClient->beschreibungLaden();
     if( !scr )
     {
-        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         return 0;
     }
     else

+ 17 - 17
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBeschreibung.cpp

@@ -15,7 +15,7 @@ KEBeschreibung::KEBeschreibung( int karte, Schrift *zSchrift )
     : Thread()
 {
     schrift = zSchrift->getThis();
-    Text *kName = infoKlient->getKarteName( karte );
+    Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Beschreibung";
     if( kName )
@@ -96,11 +96,11 @@ void KEBeschreibung::thread()
     {
         if( jetzt == 1 )
         { // beschreibung laden
-            Text *t = editorKlient->beschreibungLaden();
+            Text *t = editorClient->beschreibungLaden();
             t->ersetzen( "\r\n", "\n" );
             hauptScreen->lock();
             if( !t )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             else
                 editor->setText( t );
             hauptScreen->unlock();
@@ -108,10 +108,10 @@ void KEBeschreibung::thread()
         }
         if( jetzt == 2 )
         { // Titelbild laden
-            Bild *b = editorKlient->titelbildLaden();
+            Bild *b = editorClient->titelbildLaden();
             hauptScreen->lock();
             if( !b )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             else
                 editor->setBild( b );
             hauptScreen->unlock();
@@ -119,10 +119,10 @@ void KEBeschreibung::thread()
         }
         if( jetzt == 3 )
         { // Minimap Bild laden
-            Bild *b = editorKlient->minimapLaden();
+            Bild *b = editorClient->minimapLaden();
             hauptScreen->lock();
             if( !b )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             else
                 editor->setBild( b );
             hauptScreen->unlock();
@@ -130,10 +130,10 @@ void KEBeschreibung::thread()
         }
         if( jetzt == 4 )
         { // Ladebild laden
-            Bild *b = editorKlient->ladebildLaden();
+            Bild *b = editorClient->ladebildLaden();
             hauptScreen->lock();
             if( !b )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             else
                 editor->setBild( b );
             hauptScreen->unlock();
@@ -145,8 +145,8 @@ void KEBeschreibung::thread()
     {
         if( jetzt == 1 )
         { // Beschreibung speichern
-            if( !editorKlient->beschreibungSpeichern( editor->zBeschreibung() ) )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            if( !editorClient->beschreibungSpeichern( editor->zBeschreibung() ) )
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         }
         if( jetzt == 2 )
         { // Titelbild hochladen
@@ -161,8 +161,8 @@ void KEBeschreibung::thread()
             else
             {
                 err->release();
-                if( !editorKlient->titelbildSpeichern( b ) )
-                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                if( !editorClient->titelbildSpeichern( b ) )
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 hauptScreen->lock();
                 editor->setBild( b );
                 hauptScreen->unlock();
@@ -182,8 +182,8 @@ void KEBeschreibung::thread()
             else
             {
                 err->release();
-                if( !editorKlient->minimapSpeichern( b ) )
-                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                if( !editorClient->minimapSpeichern( b ) )
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 hauptScreen->lock();
                 editor->setBild( b );
                 hauptScreen->unlock();
@@ -203,8 +203,8 @@ void KEBeschreibung::thread()
             else
             {
                 err->release();
-                if( !editorKlient->ladebildSpeichern( b ) )
-                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                if( !editorClient->ladebildSpeichern( b ) )
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 hauptScreen->lock();
                 editor->setBild( b );
                 hauptScreen->unlock();

+ 69 - 55
KSGClient/NachLogin/Editor/Karte/Dateien/KEDateien.cpp

@@ -6,13 +6,14 @@
 #include "KEDModel2DEditor.h"
 #include "WAVDatei.h"
 
+typedef GSL::GSLDateiV *( *GetGSLDatei )( );
 
 // Inahlt der KEDateien Klasse aus KEDateien.h
 // Konstruktor
 KEDateien::KEDateien( int karte, Schrift *zSchrift )
 {
     schrift = zSchrift->getThis();
-    Text *kName = infoKlient->getKarteName( karte );
+    Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Dateien";
     if( kName )
@@ -88,10 +89,10 @@ void KEDateien::thread()
     case 0: // Init
     {
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetDateiListe( list );
+        int anz = editorClient->deGetDateiListe( list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -100,16 +101,16 @@ void KEDateien::thread()
     }
     case 1: // Neue Datei
     {
-        if( !editorKlient->deNeueDatei( (char)editor->getNeuDateiTyp(), editor->zNeuDateiName() ) )
+        if( !editorClient->deNeueDatei( (char)editor->getNeuDateiTyp(), editor->zNeuDateiName() ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetDateiListe( list );
+        int anz = editorClient->deGetDateiListe( list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -122,10 +123,10 @@ void KEDateien::thread()
         if( zName->hat( ".ltdb" ) )
         {
             RCArray< Text > *list = new RCArray< Text >();
-            int anz = editorKlient->deGetBildListe( zName, list );
+            int anz = editorClient->deGetBildListe( zName, list );
             if( anz < 0 )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 list->release();
                 break;
             }
@@ -134,10 +135,10 @@ void KEDateien::thread()
         else if( zName->hat( ".gsl" ) )
         {
             RCArray< Text > *list = new RCArray< Text >();
-            int anz = editorKlient->deGetSoundListe( zName, list );
+            int anz = editorClient->deGetSoundListe( zName, list );
             if( anz < 0 )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 list->release();
                 break;
             }
@@ -146,10 +147,10 @@ void KEDateien::thread()
         else if( zName->hat( ".m2" ) )
         {
             RCArray< Text > *list = new RCArray< Text >();
-            int anz = editorKlient->deGetModelListe( zName, list );
+            int anz = editorClient->deGetModelListe( zName, list );
             if( anz < 0 )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 list->release();
                 break;
             }
@@ -157,16 +158,16 @@ void KEDateien::thread()
         }
         else
         {
-            if( !editorKlient->deOrdnerÖffnen( zName ) )
+            if( !editorClient->deOrdnerÖffnen( zName ) )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 break;
             }
             RCArray< Text > *list = new RCArray< Text >();
-            int anz = editorKlient->deGetDateiListe( list );
+            int anz = editorClient->deGetDateiListe( list );
             if( anz < 0 )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 list->release();
                 break;
             }
@@ -177,16 +178,16 @@ void KEDateien::thread()
     case 3: // Datei Löschen
     {
         Text p( "." );
-        if( ( editor->zDateiAuswahl() && !editorKlient->deDateiLöschen( editor->zDateiAuswahl() ) ) || ( !editor->zDateiAuswahl() && !editorKlient->deDateiLöschen( &p ) ) )
+        if( ( editor->zDateiAuswahl() && !editorClient->deDateiLöschen( editor->zDateiAuswahl() ) ) || ( !editor->zDateiAuswahl() && !editorClient->deDateiLöschen( &p ) ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetDateiListe( list );
+        int anz = editorClient->deGetDateiListe( list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -195,10 +196,10 @@ void KEDateien::thread()
     }
     case 4: // Bild Auswählen
     {
-        Bild *b = editorKlient->deBildLaden( editor->zDateiAuswahl(), editor->zBildAuswahl(), fort );
+        Bild *b = editorClient->deBildLaden( editor->zDateiAuswahl(), editor->zBildAuswahl(), fort );
         if( !b )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         editor->setBild( b );
@@ -206,16 +207,16 @@ void KEDateien::thread()
     }
     case 5: // Bild Löschen
     {
-        if( !editorKlient->deBildLöschen( editor->zDateiAuswahl(), editor->zBildAuswahl() ) )
+        if( !editorClient->deBildLöschen( editor->zDateiAuswahl(), editor->zBildAuswahl() ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetBildListe( editor->zDateiAuswahl(), list );
+        int anz = editorClient->deGetBildListe( editor->zDateiAuswahl(), list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -237,18 +238,18 @@ void KEDateien::thread()
             break;
         }
         err->release();
-        if( !editorKlient->deBildSpeichern( editor->zDateiAuswahl(), &name, b, fort ) )
+        if( !editorClient->deBildSpeichern( editor->zDateiAuswahl(), &name, b, fort ) )
         {
             b->release();
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         b->release();
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetBildListe( editor->zDateiAuswahl(), list );
+        int anz = editorClient->deGetBildListe( editor->zDateiAuswahl(), list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -257,10 +258,10 @@ void KEDateien::thread()
     }
     case 7: // Model Auswählen
     {
-        Model2DData *d = editorKlient->deModelLaden( editor->zDateiAuswahl(), editor->zModel2dAuswahl(), fort );
+        Model2DData *d = editorClient->deModelLaden( editor->zDateiAuswahl(), editor->zModel2dAuswahl(), fort );
         if( !d )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         editor->setModel2d( d );
@@ -268,16 +269,16 @@ void KEDateien::thread()
     }
     case 8: // Model Löschen
     {
-        if( !editorKlient->deModelLöschen( editor->zDateiAuswahl(), editor->zModel2dAuswahl() ) )
+        if( !editorClient->deModelLöschen( editor->zDateiAuswahl(), editor->zModel2dAuswahl() ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetModelListe( editor->zDateiAuswahl(), list );
+        int anz = editorClient->deGetModelListe( editor->zDateiAuswahl(), list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -287,9 +288,9 @@ void KEDateien::thread()
     case 9: // Model speichern
     {
         Model2DData *m = editor->getModelData();
-        if( !editorKlient->deModelSpeichern( editor->zDateiAuswahl(), editor->zModel2dAuswahl(), m, fort ) )
+        if( !editorClient->deModelSpeichern( editor->zDateiAuswahl(), editor->zModel2dAuswahl(), m, fort ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             m->release();
             break;
         }
@@ -300,17 +301,17 @@ void KEDateien::thread()
     {
         Model2DData *m = new Model2DData();
         m->erstelleModell( new Array< Polygon2D >() );
-        if( !editorKlient->deModelSpeichern( editor->zDateiAuswahl(), editor->zNeuModelName(), m, fort ) )
+        if( !editorClient->deModelSpeichern( editor->zDateiAuswahl(), editor->zNeuModelName(), m, fort ) )
         {
             m->release();
             break;
         }
         m->release();
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetModelListe( editor->zDateiAuswahl(), list );
+        int anz = editorClient->deGetModelListe( editor->zDateiAuswahl(), list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -319,27 +320,40 @@ void KEDateien::thread()
     }
     case 11: // Sound Abspielen
     {
-        GSL::GSLSoundV *s = editorKlient->deSoundLaden( editor->zDateiAuswahl(), editor->zSoundAuswahl(), fort );
-        if( !s )
+        HMODULE dll = dllDateien->ladeDLL( "GSL.dll", "data/bin/GSL.dll" );
+        if( dll )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
-            break;
+            GetGSLDatei getGSLDatei = (GetGSLDatei)GetProcAddress( dll, "getGSLDatei" );
+            if( getGSLDatei )
+            {
+                GSL::GSLDateiV *gsld = getGSLDatei();
+                GSL::GSLSoundV *s = editorClient->deSoundLaden( gsld, editor->zDateiAuswahl(), editor->zSoundAuswahl(), fort );
+                if( !s )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
+                    break;
+                }
+                editor->setSound( s );
+            }
+            else
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Der Einstiegspunkt 'getGSLDatei' in der DLL Datei 'data/bin/GSL.dll' konnte nicht gefunden werden." ), new Text( "Ok" ) );
         }
-        editor->setSound( s );
+        else
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die DLL Datei 'data/bin/GSL.dll' konnte nicht gefunden werden." ), new Text( "Ok" ) );
         break;
     }
     case 12: // Sound Löschen
     {
-        if( !editorKlient->deSoundLöschen( editor->zDateiAuswahl(), editor->zSoundAuswahl() ) )
+        if( !editorClient->deSoundLöschen( editor->zDateiAuswahl(), editor->zSoundAuswahl() ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetSoundListe( editor->zDateiAuswahl(), list );
+        int anz = editorClient->deGetSoundListe( editor->zDateiAuswahl(), list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -361,18 +375,18 @@ void KEDateien::thread()
             s->release();
             break;
         }
-        if( !editorKlient->deSoundSpeichern( editor->zDateiAuswahl(), &name, s, fort ) )
+        if( !editorClient->deSoundSpeichern( editor->zDateiAuswahl(), &name, s, fort ) )
         {
             s->release();
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         s->release();
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->deGetSoundListe( editor->zDateiAuswahl(), list );
+        int anz = editorClient->deGetSoundListe( editor->zDateiAuswahl(), list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }

+ 15 - 14
KSGClient/NachLogin/Editor/Karte/KarteRelease/KERelease.cpp

@@ -2,6 +2,7 @@
 #include "../../../../Global/Initialisierung.h"
 #include "../../../../Global/Variablen.h"
 #include <Text.h>
+#include <Zeit.h>
 
 bool kEReleaseHerstellenME( void *p, void *obj, MausEreignis me )
 {
@@ -44,7 +45,7 @@ KERelease::KERelease( int karte, Schrift *zSchrift )
     : Thread()
 {
     schrift = zSchrift->getThis();
-    Text *kName = infoKlient->getKarteName( karte );
+    Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Release";
     if( kName )
@@ -262,8 +263,8 @@ void KERelease::thread()
     laden->setSichtbar( 1 );
     if( aktion == 1 && zeile )
     {
-        if( !editorKlient->abbildHerstellen( abbilder->zZeilenName( zeile )->getText() ) )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->abbildHerstellen( abbilder->zZeilenName( zeile )->getText() ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         zeile = 0;
         run = 0;
         laden->setSichtbar( 0 );
@@ -271,27 +272,27 @@ void KERelease::thread()
     }
     if( aktion == 2 && zeile )
     {
-        if( !editorKlient->abbildLöschen( abbilder->zZeilenName( zeile )->getText() ) )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->abbildLöschen( abbilder->zZeilenName( zeile )->getText() ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         zeile = 0;
     }
     if( aktion == 3 )
     {
-        if( !editorKlient->veröffentlichen() )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->veröffentlichen() )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         run = 0;
         laden->setSichtbar( 0 );
         return;
     }
     if( aktion == 4 )
     {
-        if( !editorKlient->abbildErstellen( abbildName->zText()->getText() ) )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->abbildErstellen( abbildName->zText()->getText() ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
     }
     if( aktion == 0 )
     {
         int es = 0, tp = 0, vp = 0;
-        if( editorKlient->getShopDaten( es, tp, vp ) )
+        if( editorClient->getShopDaten( es, tp, vp ) )
         {
             if( ( es | 1 ) == es )
                 testVersionErwerbbar->setAuswahl( 0 );
@@ -305,7 +306,7 @@ void KERelease::thread()
             vollVersionPreis->setText( Text() += vp );
         }
         else
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
     }
     if( aktion == 5 )
     {
@@ -316,8 +317,8 @@ void KERelease::thread()
             es |= 2;
         int tp = (int)*testVersionPreis->zText();
         int vp = (int)*vollVersionPreis->zText();
-        if( !editorKlient->setShopDaten( es, tp, vp ) )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->setShopDaten( es, tp, vp ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         run = 0;
         laden->setSichtbar( 0 );
         return;
@@ -335,7 +336,7 @@ void KERelease::thread()
     }
     RCArray< Text > *name = new RCArray< Text >();
     RCArray< Zeit > *datum = new RCArray< Zeit >();
-    anz = editorKlient->getAbbildListe( name, datum );
+    anz = editorClient->getAbbildListe( name, datum );
     for( int i = 0; i < anz; i++ )
     {
         hauptScreen->lock();

+ 8 - 8
KSGClient/NachLogin/Editor/Karte/KartenEditor.cpp

@@ -79,11 +79,11 @@ KartenEditor::~KartenEditor()
 void KartenEditor::thread()
 {
     laden->setSichtbar( 1 );
-    if( !editorKlient->initEditor() )
+    if( !editorClient->initEditor() )
     {
         editor->setAlphaFeldFarbe( 0x5500FF00 );
         editor->removeStyle( Knopf::Style::Erlaubt );
-        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         laden->setSichtbar( 0 );
         run = 0;
         return;
@@ -129,11 +129,11 @@ void KartenEditor::setKarte( int id )
     dateienF = new KEDateien( id, schrift );
     kaufHF = new KEKaufHistorie( id, schrift );
     // Editor laden
-    int spielArt = infoKlient->getSpielId( id );
+    int spielArt = infoClient->getSpielId( id );
     KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
     dgt->laden();
     bool sak = 0;
-    int dgSId = infoKlient->getDateiGruppeIdVonSpiel( spielArt );
+    int dgSId = infoClient->getDateiGruppeIdVonSpiel( spielArt );
     bool sgf = 0;
     for( int i = 0; i < dgt->getZeilenAnzahl(); i++ )
     {
@@ -141,7 +141,7 @@ void KartenEditor::setKarte( int id )
         {
             sgf = 1;
             int lv = dgt->zFeld( i, 2 ) ? TextZuInt( dgt->zFeld( i, 2 )->getText(), 10 ) : 0;
-            int ov = infoKlient->getSpielVersion( spielArt );
+            int ov = infoClient->getSpielVersion( spielArt );
             if( lv == ov )
             {
                 sak = 1;
@@ -155,7 +155,7 @@ void KartenEditor::setKarte( int id )
         nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Deine Spiel Version ist nicht aktuell. Sie wird beim nächsten Spielstart aktualisiert. Bis dahin sind nicht alle Editorfunktionen verfügbar." ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
         if( !sgf )
         {
-            Text *pfad = infoKlient->getDateiGruppePfad( dgSId );
+            Text *pfad = infoClient->getDateiGruppePfad( dgSId );
             Text *idT = new Text();
             idT->append( dgSId );
             if( pfad )
@@ -180,7 +180,7 @@ void KartenEditor::setKarte( int id )
     {
         Text pfad = "data/spiele/";
         dllName = "";
-        dllName.append( infoKlient->getSpielName( spielArt ) );
+        dllName.append( infoClient->getSpielName( spielArt ) );
         pfad.append( dllName.getText() );
         pfad.append( "/bin/" );
         dllName.append( ".dll" );
@@ -210,7 +210,7 @@ void KartenEditor::setKarte( int id )
                 editor->addStyle( Knopf::Style::Erlaubt );
                 editorF = getEditorKlasse();
                 editorF->setSchrift( schrift->getThis() );
-                editorF->setKlient( editorKlient->getThis() );
+                editorF->setKlient( editorClient->getThis() );
                 editorF->setLadeAnimation( (Animation2D*)ladeAnimation->dublizieren() );
                 editor->addStyle( Knopf::Style::Sichtbar );
             }

+ 3 - 3
KSGClient/NachLogin/Editor/Karte/KaufHistorie/KaufHistorie.cpp

@@ -9,7 +9,7 @@
 KEKaufHistorie::KEKaufHistorie( int karte, Schrift *zSchrift )
 {
     schrift = zSchrift->getThis();
-    Text *kName = infoKlient->getKarteName( karte );
+    Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Release";
     if( kName )
@@ -99,10 +99,10 @@ void KEKaufHistorie::thread()
     Array< int > einnahmen;
     Array< int > verkauf;
     Array< int > spiele;
-    int gesammt = editorKlient->getVerkaufStatistik( &verkauf, &einnahmen, &spiele );
+    int gesammt = editorClient->getVerkaufStatistik( &verkauf, &einnahmen, &spiele );
     if( gesammt == 0 && einnahmen.getEintragAnzahl() == 0 )
     {
-        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
     }
     else
     {

+ 35 - 35
KSGClient/NachLogin/Editor/Karte/ShopSeite/KEShopSeite.cpp

@@ -11,7 +11,7 @@ KEShopSeite::KEShopSeite( int karte, Schrift *zSchrift )
     : Thread()
 {
     schrift = zSchrift->getThis();
-    Text *kName = infoKlient->getKarteName( karte );
+    Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Shop Seite";
     if( kName )
@@ -87,10 +87,10 @@ void KEShopSeite::thread()
     case 0: // Init
     {
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->ssGetDateiListe( list );
+        int anz = editorClient->ssGetDateiListe( list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -99,16 +99,16 @@ void KEShopSeite::thread()
     }
     case 1: // Neue Datei
     {
-        if( !editorKlient->ssDateiErstellen( editor->zNeuDateiName()->getText(), editor->getNeuDateiTyp() ) )
+        if( !editorClient->ssDateiErstellen( editor->zNeuDateiName()->getText(), editor->getNeuDateiTyp() ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->ssGetDateiListe( list );
+        int anz = editorClient->ssGetDateiListe( list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -121,10 +121,10 @@ void KEShopSeite::thread()
         if( zName->hat( ".ltdb" ) )
         {
             RCArray< Text > *list = new RCArray< Text >();
-            int anz = editorKlient->ssGetBildListe( zName->getText(), list );
+            int anz = editorClient->ssGetBildListe( zName->getText(), list );
             if( anz < 0 )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 list->release();
                 break;
             }
@@ -132,26 +132,26 @@ void KEShopSeite::thread()
         }
         else if( zName->hat( ".ksgs" ) )
         {
-            Text *txt = editorKlient->ssTextLaden( zName->getText() );
+            Text *txt = editorClient->ssTextLaden( zName->getText() );
             if( !txt )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 break;
             }
             editor->setDateiText( txt );
         }
         else
         {
-            if( !editorKlient->ssOrdnerÖffnen(zName->getText() ) )
+            if( !editorClient->ssOrdnerÖffnen(zName->getText() ) )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 break;
             }
             RCArray< Text > *list = new RCArray< Text >();
-            int anz = editorKlient->ssGetDateiListe( list );
+            int anz = editorClient->ssGetDateiListe( list );
             if( anz < 0 )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
                 list->release();
                 break;
             }
@@ -161,10 +161,10 @@ void KEShopSeite::thread()
     }
     case 3: // Bild Auswählen
     {
-        Bild *b = editorKlient->ssBildLaden( editor->zDateiAuswahl()->getText(), editor->zBildAuswahl()->getText() );
+        Bild *b = editorClient->ssBildLaden( editor->zDateiAuswahl()->getText(), editor->zBildAuswahl()->getText() );
         if( !b )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         editor->setBild( b );
@@ -172,16 +172,16 @@ void KEShopSeite::thread()
     }
     case 4: // Datei Löschen
     {
-        if( ( editor->zDateiAuswahl() && !editorKlient->ssDateiLöschen( editor->zDateiAuswahl()->getText() ) ) || ( !editor->zDateiAuswahl() && !editorKlient->ssDateiLöschen( "." ) ) )
+        if( ( editor->zDateiAuswahl() && !editorClient->ssDateiLöschen( editor->zDateiAuswahl()->getText() ) ) || ( !editor->zDateiAuswahl() && !editorClient->ssDateiLöschen( "." ) ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->ssGetDateiListe( list );
+        int anz = editorClient->ssGetDateiListe( list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -190,22 +190,22 @@ void KEShopSeite::thread()
     }
     case 5: // Text Speichern
     {
-        if( !editorKlient->ssTextSpeichern( editor->zDateiAuswahl()->getText(), editor->zDateiText() ) )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->ssTextSpeichern( editor->zDateiAuswahl()->getText(), editor->zDateiText() ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         break;
     }
     case 6: // Bild Löschen
     {
-        if( !editorKlient->ssBildLöschen( editor->zDateiAuswahl()->getText(), editor->zBildAuswahl()->getText() ) )
+        if( !editorClient->ssBildLöschen( editor->zDateiAuswahl()->getText(), editor->zBildAuswahl()->getText() ) )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->ssGetBildListe( editor->zDateiAuswahl()->getText(), list );
+        int anz = editorClient->ssGetBildListe( editor->zDateiAuswahl()->getText(), list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -227,18 +227,18 @@ void KEShopSeite::thread()
             break;
         }
         err->release();
-        if( !editorKlient->ssBildSpeichern( editor->zDateiAuswahl()->getText(), name, b ) )
+        if( !editorClient->ssBildSpeichern( editor->zDateiAuswahl()->getText(), name, b ) )
         {
             b->release();
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             break;
         }
         b->release();
         RCArray< Text > *list = new RCArray< Text >();
-        int anz = editorKlient->ssGetBildListe( editor->zDateiAuswahl()->getText(), list );
+        int anz = editorClient->ssGetBildListe( editor->zDateiAuswahl()->getText(), list );
         if( anz < 0 )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             list->release();
             break;
         }
@@ -248,9 +248,9 @@ void KEShopSeite::thread()
     case 8: // Vorschau
     {
         editor->setSichtbar( 0 );
-        if( !editorKlient->ladeShopSeiteVorschau() )
+        if( !editorClient->ladeShopSeiteVorschau() )
         {
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
             editor->setSichtbar( 1 );
             break;
         }
@@ -260,8 +260,8 @@ void KEShopSeite::thread()
     }
     case 9: // Veröffentlichen
     {
-        if( !editorKlient->shopSeiteVeröffentlichen() )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->shopSeiteVeröffentlichen() )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         break;
     }
     case 10: // Vorschau Beenden

+ 16 - 16
KSGClient/NachLogin/Editor/Karte/Teams/KETeams.cpp

@@ -22,7 +22,7 @@ KETeams::KETeams( int karte, Schrift *zSchrift )
     : Thread()
 {
     schrift = zSchrift->getThis();
-    Text *kName = infoKlient->getKarteName( karte );
+    Text *kName = infoClient->getKarteName( karte );
     Text titel = kName ? kName->getText() : "<Karte>";
     titel += " - Teams";
     if( kName )
@@ -157,11 +157,11 @@ void KETeams::updateGUI()
     }
     int start = 0;
     for( int i = 0; i < teams->getAuswahl(); i++ )
-        start += sts->teamGröße->get( i );
+        start += sts->teamSize->get( i );
     bool tausw = teams->zEintrag( teams->getAuswahl() ) != 0;
     if( tausw )
     {
-        for( int i = 0; i < sts->teamGröße->get( teams->getAuswahl() ); i++ )
+        for( int i = 0; i < sts->teamSize->get( teams->getAuswahl() ); i++ )
         {
             Text n = "Spieler ";
             n += i + 1;
@@ -178,7 +178,7 @@ void KETeams::updateGUI()
     }
     sts->spielerAnzahl = 0;
     for( int i = 0; i < sts->teamAnzahl; i++ )
-        sts->spielerAnzahl += sts->teamGröße->get( i );
+        sts->spielerAnzahl += sts->teamSize->get( i );
     hauptScreen->unlock();
     bool sAusw = spieler->zEintrag( spieler->getAuswahl() ) != 0;
     tName->setStyle( TextFeld::Style::Erlaubt, tausw );
@@ -211,7 +211,7 @@ void KETeams::nachME( void *obj, MausEreignis &me )
     }
     if( obj == tNeu )
     {
-        sts->teamGröße->set( 0, sts->teamAnzahl );
+        sts->teamSize->set( 0, sts->teamAnzahl );
         sts->teamFarbe->set( 0, sts->teamAnzahl );
         Text tn = "";
         bool ex = 1;
@@ -235,7 +235,7 @@ void KETeams::nachME( void *obj, MausEreignis &me )
     }
     if( obj == tLöschen )
     {
-        sts->teamGröße->remove( teams->getAuswahl() );
+        sts->teamSize->remove( teams->getAuswahl() );
         sts->teamFarbe->remove( teams->getAuswahl() );
         sts->teamName->remove( teams->getAuswahl() );
         sts->teamAnzahl--;
@@ -245,18 +245,18 @@ void KETeams::nachME( void *obj, MausEreignis &me )
     {
         int start = 0;
         for( int i = 0; i < teams->getAuswahl(); i++ )
-            start += sts->teamGröße->get( i );
-        sts->spielerFarbe->add( 0, start + sts->teamGröße->get( teams->getAuswahl() ) );
-        sts->teamGröße->set( sts->teamGröße->get( teams->getAuswahl() ) + 1, teams->getAuswahl() );
+            start += sts->teamSize->get( i );
+        sts->spielerFarbe->add( 0, start + sts->teamSize->get( teams->getAuswahl() ) );
+        sts->teamSize->set( sts->teamSize->get( teams->getAuswahl() ) + 1, teams->getAuswahl() );
         updateGUI();
     }
     if( obj == sLöschen )
     {
         int start = 0;
         for( int i = 0; i < teams->getAuswahl(); i++ )
-            start += sts->teamGröße->get( i );
+            start += sts->teamSize->get( i );
         sts->spielerFarbe->remove( start + spieler->getAuswahl() );
-        sts->teamGröße->set( sts->teamGröße->get( teams->getAuswahl() ) - 1, teams->getAuswahl() );
+        sts->teamSize->set( sts->teamSize->get( teams->getAuswahl() ) - 1, teams->getAuswahl() );
         updateGUI();
     }
     if( obj == teams )
@@ -283,7 +283,7 @@ void KETeams::nachTE( void *obj, TastaturEreignis &te )
     {
         int start = 0;
         for( int i = 0; i < teams->getAuswahl(); i++ )
-            start += sts->teamGröße->get( i );
+            start += sts->teamSize->get( i );
         sts->spielerFarbe->set( TextZuInt( sFarbe->zText()->getText(), 16 ), start + spieler->getAuswahl() );
         sFarbeV->setHintergrundFarbe( sts->spielerFarbe->get( start + spieler->getAuswahl() ) );
     }
@@ -319,15 +319,15 @@ void KETeams::thread()
     laden->setSichtbar( 1 );
     if( aktion == 0 )
     { // Laden
-        if( !editorKlient->ladeTeamDaten( sts ) )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->ladeTeamDaten( sts ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
         else
             updateGUI();
     }
     if( aktion == 1 )
     { // Speichern
-        if( !editorKlient->speicherTeamDaten( sts ) )
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        if( !editorClient->speicherTeamDaten( sts ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorClient->getLetzterFehler() ), new Text( "Ok" ) );
     }
     run = 0;
     laden->setSichtbar( 0 );

+ 10 - 5
KSGClient/NachLogin/ImSpiel/ImSpiel.cpp

@@ -64,7 +64,7 @@ void ImSpiel::beginnLaden( int karteId, SpielerTeamStruktur *sts )
 	ladenFenster->setKarte( karteId );
 	ladenFenster->setSichtbar( 1 );
 	this->karteId = karteId;
-	spielKlient->bereitZumLaden();
+	spielClient->bereitZumLaden();
 	rend = 1;
 	start();
 }
@@ -145,13 +145,18 @@ void ImSpiel::thread()
 	}
     int port = 0;
     Text ip;
-    infoKlient->getKartenServer( karteId, &port, &ip );
-    if( kartenKlient->verbinde( port, ip ) )
-        kartenKlient->downloadKarte( karteId );
+    KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
+    if( kartenClient && kartenClient->verbinde() )
+    {
+        kartenClient->downloadKarte( karteId );
+        kartenClient->trenne( 1 );
+    }
+    if( kartenClient )
+        kartenClient->release();
 	spielFenster = getSpielKlasse();
 	ladenStatus = 1;
 	spielFenster->setKarteId( karteId );
-	spielFenster->setKlients( infoKlient->getThis(), spielKlient->getThis() );
+	spielFenster->setKlients( infoClient->getThis(), spielClient->getThis() );
 	spielFenster->setBildschirm( hauptScreen->getThis() );
 	spielFenster->setSchrift( schrift->getThis() );
 	spielFenster->ladeDaten();

+ 3 - 3
KSGClient/NachLogin/ImSpiel/Laden/SpielLaden.cpp

@@ -16,7 +16,7 @@ SpielLadenListeSpieler::SpielLadenListeSpieler( int accountId, Schrift *zSchrift
 	rahmen->setRamenBreite( 1 );
 	rahmen->setFarbe( 0xFFFFFFFF );
 	this->accountId = accountId;
-	Text *n = infoKlient->getSpielerName( accountId );
+	Text *n = infoClient->getSpielerName( accountId );
 	name = initTextFeld( 1, 1, 149, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, n->getText() );
 	n->release();
 	team = initTextFeld( 230, 1, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "0" );
@@ -225,7 +225,7 @@ void SpielLadenListe::addSpieler( int accountId, int spielerNummer )
 	for( int i = 0; i < sts->teamAnzahl; i++ )
 	{
 		min = max;
-		max += sts->teamGröße->get( i );
+		max += sts->teamSize->get( i );
 		if( spielerNummer >= min && spielerNummer < max )
 		{
 			team = i;
@@ -550,7 +550,7 @@ bool SpielLaden::tick( double tickVal )
 			ladenAlpha = 0;
 			ende = 1;
 			animation = 0;
-			spielKlient->bereitZumSpiel();
+			spielClient->bereitZumSpiel();
 		}
 		else
 		{

+ 6 - 3
KSGClient/NachLogin/MiniGames/Minigames.cpp

@@ -29,13 +29,13 @@ void MGSuchen::thread()
 	KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
 	dgt->laden();
 	bool ak = 0;
-	int dgId = infoKlient->getDateiGruppeIdVonPfad( "data/Minigames" );
+	int dgId = infoClient->getDateiGruppeIdVonPfad( "data/Minigames" );
 	for( int i = 0; i < dgt->getZeilenAnzahl(); i++ )
 	{
 		if( dgt->zFeld( i, 0 ) && TextZuInt( dgt->zFeld( i, 0 )->getText(), 10 ) == dgId )
 		{
 			int lv = dgt->zFeld( i, 2 ) ? TextZuInt( dgt->zFeld( i, 2 )->getText(), 10 ) : 0;
-			int ov = infoKlient->getDateiGruppeVersion( dgId );
+			int ov = infoClient->getDateiGruppeVersion( dgId );
 			if( lv == ov )
 				ak = 1;
 			break;
@@ -156,7 +156,10 @@ void MGLaden::thread()
 		run = 0;
 		return;
 	}
-    game->setMinigameClientZ( minigameClient->getThis() );
+    if( !minigameClient )
+        minigameClient = mainClient->createMinigameServerClient();
+    if( minigameClient )
+        game->setMinigameClientZ( minigameClient->getThis() );
 	if( !game->laden() )
 	{
 		game = game->release();

+ 16 - 14
KSGClient/NachLogin/Neuigkeiten/Neuigkeiten.cpp

@@ -24,27 +24,29 @@ NewsThread::~NewsThread()
 // nicht constant
 void NewsThread::thread()
 {
-	bool trenn = 0;
-	if( !newsKlient->istVerbunden() )
+    if( !newsClient )
+        newsClient = mainClient->createNewsServerClient();
+    if( !newsClient )
+    {
+        news->endLaden( mainClient->getLetzterFehler() );
+        delete this;
+        return;
+    }
+	if( !newsClient->verbinde() )
 	{
-		trenn = 1;
-		if( !newsKlient->verbinde() )
-		{
-			news->endLaden( "Fehler beim Verbinden mit dem News-Server." );
-			run = 0;
-			delete this;
-			return;
-		}
+		news->endLaden( newsClient ->getLetzterFehler() );
+		run = 0;
+		delete this;
+		return;
 	}
-	if( !newsKlient->ladeSeite( scriptName->getText() ) )
+	if( !newsClient->ladeSeite( scriptName->getText() ) )
 	{
-		news->endLaden( "Fehler beim herrunterladen der Seite." );
+		news->endLaden( newsClient->getLetzterFehler() );
 		run = 0;
 		delete this;
 		return;
 	}
-	if( trenn )
-		newsKlient->trenne();
+    newsClient->trenne( 0 );
 	Text *pfad = new Text( "data/tmp/news/" );
 	pfad->append( scriptName->getText() );
 	pfad->append( "/seite.ksgs" );

+ 893 - 829
KSGClient/NachLogin/Shop/Karten/KartenKaufen.cpp

@@ -9,406 +9,458 @@
 
 void KarteKaufenKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {
-	if( !p )
-		return;
-	( (KartenKaufenAuswahl*)p )->ksgsAktion( parameter, retVal );
+    if( !p )
+        return;
+    ( (KartenKaufenAuswahl*)p )->ksgsAktion( parameter, retVal );
 }
 
 // Inhalt der KartenKaufenAuswahl Klasse aus KartenKaufen.h
 // Konstruktor
 KartenKaufenAuswahl::KartenKaufenAuswahl( Schrift *zSchrift )
 {
-	karteId = 0;
-	alpha = 0;
-	ksgs = dllDateien->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
-	if( ksgs )
-	{
-		KSGSGetZeichnung getKSGScript = (KSGSGetZeichnung)GetProcAddress( ksgs, KSGS_START_FUNKTION );
-		if( getKSGScript )
-		{
-			fenster = getKSGScript();
-			fenster->setSchriftZ( zSchrift->getThis() );
-			fenster->setSize( 555, 380 );
-			fenster->setRückrufParam( this );
-			fenster->setRückrufFunktion( KarteKaufenKSGSAktion );
-		}
-		else
-		{
-			fenster = 0;
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-														  new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
-																	"'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
-	}
-	else
-	{
-		fenster = 0;
-		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-													  new Text( "Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht geladen werden." ),
-													  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-	}
-	ram = new LRahmen();
-	ram->setSize( 555, 380 );
-	ram->setFarbe( 0xFFFFFFFF );
-	laden = ( Framework::Animation2D* )ladeAnimation->dublizieren();
-	laden->setPosition( 252, 165 );
-	laden->setSichtbar( 0 );
-	pos = Punkt( 220, 10 );
-	aktion = 0;
-	ref = 1;
+    karteId = 0;
+    alpha = 0;
+    ksgs = dllDateien->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
+    if( ksgs )
+    {
+        KSGSGetZeichnung getKSGScript = (KSGSGetZeichnung)GetProcAddress( ksgs, KSGS_START_FUNKTION );
+        if( getKSGScript )
+        {
+            fenster = getKSGScript();
+            fenster->setSchriftZ( zSchrift->getThis() );
+            fenster->setSize( 555, 380 );
+            fenster->setRückrufParam( this );
+            fenster->setRückrufFunktion( KarteKaufenKSGSAktion );
+        }
+        else
+        {
+            fenster = 0;
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                          new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+    }
+    else
+    {
+        fenster = 0;
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                      new Text( "Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht geladen werden." ),
+                                                      new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+    }
+    ram = new LRahmen();
+    ram->setSize( 555, 380 );
+    ram->setFarbe( 0xFFFFFFFF );
+    laden = ( Framework::Animation2D* )ladeAnimation->dublizieren();
+    laden->setPosition( 252, 165 );
+    laden->setSichtbar( 0 );
+    pos = Punkt( 220, 10 );
+    aktion = 0;
+    ref = 1;
 }
 
 // Destruktor
 KartenKaufenAuswahl::~KartenKaufenAuswahl()
 {
-	if( run )
-		warteAufThread( 2000 );
-	if( run )
-		ende();
-	if( fenster )
-	{
-		fenster->zurücksetzen();
-		fenster->release();
-	}
-	ram->release();
-	laden->release();
-	if( ksgs )
-		dllDateien->releaseDLL( "KSGScript.dll" );
+    if( run )
+        warteAufThread( 2000 );
+    if( run )
+        ende();
+    if( fenster )
+    {
+        fenster->zurücksetzen();
+        fenster->release();
+    }
+    ram->release();
+    laden->release();
+    if( ksgs )
+        dllDateien->releaseDLL( "KSGScript.dll" );
 }
 
 // nicht constant
 void KartenKaufenAuswahl::ladeKarteSeite( int id )
 {
-	if( run )
-		warteAufThread( 2000 );
-	if( run )
-		return;
-	karteId = id;
-	aktion = 1;
-	start();
+    if( run )
+        warteAufThread( 2000 );
+    if( run )
+        return;
+    karteId = id;
+    aktion = 1;
+    start();
 }
 
 void KartenKaufenAuswahl::reset()
 {
-	if( run )
-		warteAufThread( 2000 );
-	if( run )
-		return;
-	aktion = 0;
-	start();
+    if( run )
+        warteAufThread( 2000 );
+    if( run )
+        return;
+    aktion = 0;
+    start();
 }
 
 void KartenKaufenAuswahl::thread()
 {
-	laden->setSichtbar( 1 );
-	if( !aktion || karteId )
-	{
-		while( alpha )
-			Sleep( 100 );
-		if( !aktion )
-			karteId = 0;
-		if( fenster )
-			fenster->zurücksetzen();
-	}
-	if( aktion )
-	{
-		while( alpha )
-			Sleep( 100 );
-		shopKlient->ladeKarteSeite( karteId );
-		Text *pfad = new Text( "data/tmp/shop/kaufen/karten/" );
-		pfad->append( karteId );
-		pfad->append( "/seite.ksgs" );
-		if( fenster )
-		{
-			fenster->setScriptDatei( pfad );
-			fenster->neuLaden();
-		}
-	}
-	laden->setSichtbar( 0 );
-	run = 0;
+    laden->setSichtbar( 1 );
+    if( !aktion || karteId )
+    {
+        while( alpha )
+            Sleep( 100 );
+        if( !aktion )
+            karteId = 0;
+        if( fenster )
+            fenster->zurücksetzen();
+    }
+    if( aktion )
+    {
+        while( alpha )
+            Sleep( 100 );
+        if( !shopClient )
+            shopClient = mainClient->createShopServerClient();
+        if( shopClient && shopClient->verbinde() )
+        {
+            shopClient->ladeKarteSeite( karteId );
+            shopClient->trenne( 0 );
+        }
+        Text *pfad = new Text( "data/tmp/shop/kaufen/karten/" );
+        pfad->append( karteId );
+        pfad->append( "/seite.ksgs" );
+        if( fenster )
+        {
+            fenster->setScriptDatei( pfad );
+            fenster->neuLaden();
+        }
+    }
+    laden->setSichtbar( 0 );
+    run = 0;
 }
 
 void KartenKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
 {
-	KSGSVariable *befehl = parameter->z( 0 );
-	if( !befehl )
-		return;
-	Text *b = befehl->getText();
-	if( !b )
-		return;
-	if( b->istGleich( "GetBesitzStatus" ) )
-	{
-		int besitz = shopKlient->getKarteBesitzStatus( karteId );
-		KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
-		if( getKSGSVariable )
-		{
-			KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += besitz ).getText() };
-			*retVal = getKSGSVariable( fenster, &def );
-		}
-		else
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-														  new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-																	"'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
-		b->release();
-		return;
-	}
-	if( b->istGleich( "GetPreis" ) )
-	{
-		KSGSVariable *version = parameter->z( 1 );
-		if( !version )
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-														  new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-																	"Sie könnte eventuell nicht richtig funktionieren." ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
-		else
-		{
-			bool testVersion = !version->getInt();
-			int preis = shopKlient->getKartePreis( karteId, testVersion );
-			KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
-			if( getKSGSVariable )
-			{
-				KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += preis ).getText() };
-				*retVal = getKSGSVariable( fenster, &def );
-			}
-			else
-			{
-				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-															  new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-																		"'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-															  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-			}
-		}
-		b->release();
-		return;
-	}
-	if( b->istGleich( "GetTestVersionVerbleibend" ) )
-	{
-		int verbleibend = shopKlient->getKarteTestversion( karteId );
-		KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
-		if( getKSGSVariable )
-		{
-			KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += verbleibend ).getText() };
-			*retVal = getKSGSVariable( fenster, &def );
-		}
-		else
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-														  new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-																	"'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
-		b->release();
-		return;
-	}
-	if( b->istGleich( "GetErwerbbarStatus" ) )
-	{
-		int erwerbbar = shopKlient->istKarteErwerbbar( karteId );
-		KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
-		if( getKSGSVariable )
-		{
-			KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += erwerbbar ).getText() };
-			*retVal = getKSGSVariable( fenster, &def );
-		}
-		else
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-														  new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-																	"'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
-		b->release();
-		return;
-	}
-	if( b->istGleich( "GetKupfer" ) )
-	{
-		int kupfer = infoKlient->getKupfer();
-		KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
-		if( getKSGSVariable )
-		{
-			KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += kupfer ).getText() };
-			*retVal = getKSGSVariable( fenster, &def );
-		}
-		else
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-														  new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-																	"'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
-		b->release();
-		return;
-	}
-	if( b->istGleich( "Kaufen" ) )
-	{
-		KSGSVariable *version = parameter->z( 1 );
-		if( !version )
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-														  new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-																	"Sie könnte eventuell nicht richtig funktionieren." ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
-		else
-		{
-			bool testVersion = !version->getInt();
-			if( !shopKlient->karteErwerben( karteId, testVersion ) )
-			{
-				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-															  new Text( "Die Karte konnte nicht erworben werden." ),
-															  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-			}
-			if( run )
-				warteAufThread( 2000 );
-			if( run )
-			{
-				b->release();
-				return;
-			}
-			aktion = 1;
-			start();
-		}
-		b->release();
-		return;
-	}
-	if( b->istGleich( "GetBild" ) )
-	{
-		KSGSVariable *pfad = parameter->z( 1 );
-		KSGSVariable *name = parameter->z( 2 );
-		if( !pfad || !name )
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-														  new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-														  "Sie könnte eventuell nicht richtig funktionieren." ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
-		else
-		{
-			Text *pf = pfad->getText();
-			Text *n = name->getText();
-			if( !pf || !n )
-			{
-				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-															  new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
-															  "Sie könnte eventuell nicht richtig funktionieren." ),
-															  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-			}
-			else
-			{
-				KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
-				if( getKSGSVariable )
-				{
-					int p = n->positionVon( ".ltdb/" );
-					if( p < 0 )
-						p = 0;
-					else
-						p += 6;
-					Bild *b = bilder->get( *n );
-					if( !b )
-					{
-						LTDBDatei *dat = new LTDBDatei();
-						dat->setDatei( pf->getThis() );
-						dat->leseDaten( 0 );
-						b = dat->laden( 0, n->getTeilText( p, n->getLength() ) );
-						dat->release();
-						if( b )
-							bilder->add( *n, b->getThis() );
-					}
-					if( b )
-					{
-						KSGSVariableDef def = { KSGS_BILD, 0, 3, "" };
-						KSGSVariable *ret = getKSGSVariable( fenster, &def );
-						KSGSSetBild setKSGSBild = (KSGSSetBild)GetProcAddress( ksgs, KSGS_SET_BILD_FUNKTION );
-						if( !setKSGSBild )
-						{
-							nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-																		  new Text( "Der Einstiegspunkt '" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei "
-																		  "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-																		  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-							b->release();
-						}
-						else
-							setKSGSBild( ret, b );
-						*retVal = ret;
-					}
-				}
-				else
-				{
-					nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-																  new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
-																  "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
-																  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-				}
-			}
-			if( pf )
-				pf->release();
-			if( n )
-				n->release();
-		}
-		b->release();
-		return;
-	}
+    KSGSVariable *befehl = parameter->z( 0 );
+    if( !befehl )
+        return;
+    Text *b = befehl->getText();
+    if( !b )
+        return;
+    if( b->istGleich( "GetBesitzStatus" ) )
+    {
+        int besitz = 0;
+        if( !shopClient )
+            shopClient = mainClient->createShopServerClient();
+        if( shopClient && shopClient->verbinde() )
+        {
+            besitz = shopClient->getKarteBesitzStatus( karteId );
+            shopClient->trenne( 0 );
+        }
+        KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
+        if( getKSGSVariable )
+        {
+            KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += besitz ).getText() };
+            *retVal = getKSGSVariable( fenster, &def );
+        }
+        else
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                          new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        b->release();
+        return;
+    }
+    if( b->istGleich( "GetPreis" ) )
+    {
+        KSGSVariable *version = parameter->z( 1 );
+        if( !version )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                          new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        else
+        {
+            bool testVersion = !version->getInt();
+            int preis = 0;
+            if( !shopClient )
+                shopClient = mainClient->createShopServerClient();
+            if( shopClient && shopClient->verbinde() )
+            {
+                preis = shopClient->getKartePreis( karteId, testVersion );
+                shopClient->trenne( 0 );
+            }
+            KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
+            if( getKSGSVariable )
+            {
+                KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += preis ).getText() };
+                *retVal = getKSGSVariable( fenster, &def );
+            }
+            else
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                              new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
+                                                                        "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+        }
+        b->release();
+        return;
+    }
+    if( b->istGleich( "GetTestVersionVerbleibend" ) )
+    {
+        int verbleibend = 0;
+        if( !shopClient )
+            shopClient = mainClient->createShopServerClient();
+        if( shopClient && shopClient->verbinde() )
+        {
+            verbleibend = shopClient->getKarteTestversion( karteId );
+            shopClient->trenne( 0 );
+        }
+        KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
+        if( getKSGSVariable )
+        {
+            KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += verbleibend ).getText() };
+            *retVal = getKSGSVariable( fenster, &def );
+        }
+        else
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                          new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        b->release();
+        return;
+    }
+    if( b->istGleich( "GetErwerbbarStatus" ) )
+    {
+        int erwerbbar = 0;
+        if( !shopClient )
+            shopClient = mainClient->createShopServerClient();
+        if( shopClient && shopClient->verbinde() )
+        {
+            erwerbbar = shopClient->istKarteErwerbbar( karteId );
+            shopClient->trenne( 0 );
+        }
+        KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
+        if( getKSGSVariable )
+        {
+            KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += erwerbbar ).getText() };
+            *retVal = getKSGSVariable( fenster, &def );
+        }
+        else
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                          new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        b->release();
+        return;
+    }
+    if( b->istGleich( "GetKupfer" ) )
+    {
+        int kupfer = infoClient->getKupfer();
+        KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
+        if( getKSGSVariable )
+        {
+            KSGSVariableDef def = { KSGS_INT, 0, 3, ( Text() += kupfer ).getText() };
+            *retVal = getKSGSVariable( fenster, &def );
+        }
+        else
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                          new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
+                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        b->release();
+        return;
+    }
+    if( b->istGleich( "Kaufen" ) )
+    {
+        KSGSVariable *version = parameter->z( 1 );
+        if( !version )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                          new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        else
+        {
+            bool testVersion = !version->getInt();
+            if( !shopClient )
+                shopClient = mainClient->createShopServerClient();
+            if( shopClient && shopClient->verbinde() )
+            {
+                if( !shopClient->karteErwerben( karteId, testVersion ) )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                                  new Text( shopClient->getLetzterFehler() ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                }
+                shopClient->trenne( 0 );
+            }
+            else if( shopClient )
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                              new Text( shopClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            else
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                              new Text( mainClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            if( run )
+                warteAufThread( 2000 );
+            if( run )
+            {
+                b->release();
+                return;
+            }
+            aktion = 1;
+            start();
+        }
+        b->release();
+        return;
+    }
+    if( b->istGleich( "GetBild" ) )
+    {
+        KSGSVariable *pfad = parameter->z( 1 );
+        KSGSVariable *name = parameter->z( 2 );
+        if( !pfad || !name )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                          new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
+                                                                    "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        else
+        {
+            Text *pf = pfad->getText();
+            Text *n = name->getText();
+            if( !pf || !n )
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                              new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
+                                                                        "Sie könnte eventuell nicht richtig funktionieren." ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            else
+            {
+                KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
+                if( getKSGSVariable )
+                {
+                    int p = n->positionVon( ".ltdb/" );
+                    if( p < 0 )
+                        p = 0;
+                    else
+                        p += 6;
+                    Bild *b = bilder->get( *n );
+                    if( !b )
+                    {
+                        LTDBDatei *dat = new LTDBDatei();
+                        dat->setDatei( pf->getThis() );
+                        dat->leseDaten( 0 );
+                        b = dat->laden( 0, n->getTeilText( p, n->getLength() ) );
+                        dat->release();
+                        if( b )
+                            bilder->add( *n, b->getThis() );
+                    }
+                    if( b )
+                    {
+                        KSGSVariableDef def = { KSGS_BILD, 0, 3, "" };
+                        KSGSVariable *ret = getKSGSVariable( fenster, &def );
+                        KSGSSetBild setKSGSBild = (KSGSSetBild)GetProcAddress( ksgs, KSGS_SET_BILD_FUNKTION );
+                        if( !setKSGSBild )
+                        {
+                            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                                          new Text( "Der Einstiegspunkt '" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei "
+                                                                                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                            b->release();
+                        }
+                        else
+                            setKSGSBild( ret, b );
+                        *retVal = ret;
+                    }
+                }
+                else
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                                  new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei "
+                                                                            "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                }
+            }
+            if( pf )
+                pf->release();
+            if( n )
+                n->release();
+        }
+        b->release();
+        return;
+    }
 }
 
 void KartenKaufenAuswahl::doMausEreignis( MausEreignis &me )
 {
-	if( run )
-		return;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	if( fenster )
-		fenster->doMausEreignis( me );
-	me.mx += pos.x;
-	me.my += pos.y;
+    if( run )
+        return;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    if( fenster )
+        fenster->doMausEreignis( me );
+    me.mx += pos.x;
+    me.my += pos.y;
 }
 
 void KartenKaufenAuswahl::doTastaturEreignis( TastaturEreignis &te )
 {
-	if( run )
-		return;
-	if( fenster )
-		fenster->doTastaturEreignis( te );
+    if( run )
+        return;
+    if( fenster )
+        fenster->doTastaturEreignis( te );
 }
 
 bool KartenKaufenAuswahl::tick( double zeit )
 {
-	bool rend = ( fenster && !run ) ? fenster->tick( zeit ) : 0;
-	rend |= laden->tick( zeit );
-	if( ( run || !karteId ) && alpha > 0 )
-	{
-		if( alpha - zeit * 150 < 0 )
-			alpha = 0;
-		else
-			alpha -= (unsigned char)( zeit * 150 );
-		rend = 1;
-	}
-	if( !run && karteId && alpha < 255 )
-	{
-		if( alpha + zeit * 150 > 255 )
-			alpha = 255;
-		else
-			alpha += (unsigned char)( zeit * 150 );
-		rend = 1;
-	}
-	return rend;
+    bool rend = ( fenster && !run ) ? fenster->tick( zeit ) : 0;
+    rend |= laden->tick( zeit );
+    if( ( run || !karteId ) && alpha > 0 )
+    {
+        if( alpha - zeit * 150 < 0 )
+            alpha = 0;
+        else
+            alpha -= (unsigned char)( zeit * 150 );
+        rend = 1;
+    }
+    if( !run && karteId && alpha < 255 )
+    {
+        if( alpha + zeit * 150 > 255 )
+            alpha = 255;
+        else
+            alpha += (unsigned char)( zeit * 150 );
+        rend = 1;
+    }
+    return rend;
 }
 
 void KartenKaufenAuswahl::render( Bild &zRObj )
 {
-	if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
-		return;
-	zRObj.setAlpha( alpha );
-	ram->render( zRObj );
-	if( fenster )
-		fenster->render( zRObj );
-	zRObj.releaseAlpha();
-	laden->render( zRObj );
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( pos.x, pos.y, ram->getBreite(), ram->getHeight() ) )
+        return;
+    zRObj.setAlpha( alpha );
+    ram->render( zRObj );
+    if( fenster )
+        fenster->render( zRObj );
+    zRObj.releaseAlpha();
+    laden->render( zRObj );
+    zRObj.releaseDrawOptions();
 }
 
 // constant
@@ -416,16 +468,16 @@ void KartenKaufenAuswahl::render( Bild &zRObj )
 // Reference Counting
 KartenKaufenAuswahl *KartenKaufenAuswahl::getThis()
 {
-	ref++;
-	return this;
+    ref++;
+    return this;
 }
 
 KartenKaufenAuswahl *KartenKaufenAuswahl::release()
 {
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    ref--;
+    if( !ref )
+        delete this;
+    return 0;
 }
 
 
@@ -433,119 +485,119 @@ KartenKaufenAuswahl *KartenKaufenAuswahl::release()
 // Konstruktor
 KartenKaufenListeEintrag::KartenKaufenListeEintrag( int id, Schrift *schrift )
 {
-	karteId = id;
-	auswählen = initKnopf( 173, 73, 22, 22, 0, 0, "" );
-	auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	auswählen->setHintergrundBildZ( bilder->get( "shop.ltdb/weiter.png" ) );
-	initToolTip( auswählen, "Karte auswählen.", schrift, hauptScreen );
-	auswählen->setLinienRahmenBreite( 1 );
-	LTDBDatei *datei = new LTDBDatei();
-	Text *bdpf = new Text( "data/tmp/shop/kaufen/karten/" );
-	bdpf->append( id );
-	bdpf->append( "/titelbg.ltdb" );
-	datei->setDatei( bdpf );
-	hintergrund = datei->laden( 0, new Text( "auswbg.jpg" ) );
-	datei->release();
-	ausgewählt = new AlphaFeld();
-	ausgewählt->setPosition( 1, 1 );
-	ausgewählt->setSize( 198, 98 );
-	ausgewählt->setFarbe( 0x0000FF00 );
-	ausgewählt->setStrength( 10 );
-	ram = new LRahmen();
-	ram->setSize( 200, 100 );
-	ram->setFarbe( 0xFFFFFFFF );
-	ausw = 0;
-	rend = 0;
-	ref = 1;
+    karteId = id;
+    auswählen = initKnopf( 173, 73, 22, 22, 0, 0, "" );
+    auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    auswählen->setHintergrundBildZ( bilder->get( "shop.ltdb/weiter.png" ) );
+    initToolTip( auswählen, "Karte auswählen.", schrift, hauptScreen );
+    auswählen->setLinienRahmenBreite( 1 );
+    LTDBDatei *datei = new LTDBDatei();
+    Text *bdpf = new Text( "data/tmp/shop/kaufen/karten/" );
+    bdpf->append( id );
+    bdpf->append( "/titelbg.ltdb" );
+    datei->setDatei( bdpf );
+    hintergrund = datei->laden( 0, new Text( "auswbg.jpg" ) );
+    datei->release();
+    ausgewählt = new AlphaFeld();
+    ausgewählt->setPosition( 1, 1 );
+    ausgewählt->setSize( 198, 98 );
+    ausgewählt->setFarbe( 0x0000FF00 );
+    ausgewählt->setStrength( 10 );
+    ram = new LRahmen();
+    ram->setSize( 200, 100 );
+    ram->setFarbe( 0xFFFFFFFF );
+    ausw = 0;
+    rend = 0;
+    ref = 1;
 }
 
 // Destruktor
 KartenKaufenListeEintrag::~KartenKaufenListeEintrag()
 {
-	auswählen->release();
-	if( hintergrund )
-		hintergrund->release();
-	ausgewählt->release();
-	ram->release();
+    auswählen->release();
+    if( hintergrund )
+        hintergrund->release();
+    ausgewählt->release();
+    ram->release();
 }
 
 // nicht constant
 void KartenKaufenListeEintrag::resetAuswahl()
 {
-	ausw = 0;
+    ausw = 0;
 }
 
 bool KartenKaufenListeEintrag::doMausEreignis( MausEreignis &me )
 {
-	bool vera = me.verarbeitet;
-	auswählen->doMausEreignis( me );
-	if( !vera && me.verarbeitet && me.id == ME_RLinks )
-	{
-		ausw = 1;
-		return 1;
-	}
-	return 0;
+    bool vera = me.verarbeitet;
+    auswählen->doMausEreignis( me );
+    if( !vera && me.verarbeitet && me.id == ME_RLinks )
+    {
+        ausw = 1;
+        return 1;
+    }
+    return 0;
 }
 
 bool KartenKaufenListeEintrag::tick( double zeit )
 {
-	rend |= ausgewählt->tick( zeit );
-	rend |= auswählen->tick( zeit );
-	int a = ( ausgewählt->getFarbe() >> 24 ) & 0xFF;
-	if( ausw && a < 255 )
-	{
-		if( a + 150 * zeit > 255 )
-			a = 255;
-		else
-			a += (int)( zeit * 150 );
-		ausgewählt->setFarbe( ( ( a << 24 ) & 0xFF000000 ) | ( ausgewählt->getFarbe() & 0xFFFFFF ) );
-		rend = 1;
-	}
-	if( !ausw && a > 0 )
-	{
-		if( a - 150 * zeit < 0 )
-			a = 0;
-		else
-			a += (int)( zeit * 150 );
-		ausgewählt->setFarbe( ( ( a << 24 ) & 0xFF000000 ) | ( ausgewählt->getFarbe() & 0xFFFFFF ) );
-		rend = 1;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= ausgewählt->tick( zeit );
+    rend |= auswählen->tick( zeit );
+    int a = ( ausgewählt->getFarbe() >> 24 ) & 0xFF;
+    if( ausw && a < 255 )
+    {
+        if( a + 150 * zeit > 255 )
+            a = 255;
+        else
+            a += (int)( zeit * 150 );
+        ausgewählt->setFarbe( ( ( a << 24 ) & 0xFF000000 ) | ( ausgewählt->getFarbe() & 0xFFFFFF ) );
+        rend = 1;
+    }
+    if( !ausw && a > 0 )
+    {
+        if( a - 150 * zeit < 0 )
+            a = 0;
+        else
+            a += (int)( zeit * 150 );
+        ausgewählt->setFarbe( ( ( a << 24 ) & 0xFF000000 ) | ( ausgewählt->getFarbe() & 0xFFFFFF ) );
+        rend = 1;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 
 void KartenKaufenListeEintrag::render( int yOff, Bild &zRObj )
 {
-	if( !zRObj.setDrawOptions( 0, yOff, 200, 100 ) )
-		return;
-	ram->render( zRObj );
-	if( hintergrund )
-		zRObj.drawBild( 1, 1, 198, 98, *hintergrund );
-	ausgewählt->render( zRObj );
-	auswählen->render( zRObj );
-	zRObj.releaseDrawOptions();
+    if( !zRObj.setDrawOptions( 0, yOff, 200, 100 ) )
+        return;
+    ram->render( zRObj );
+    if( hintergrund )
+        zRObj.drawBild( 1, 1, 198, 98, *hintergrund );
+    ausgewählt->render( zRObj );
+    auswählen->render( zRObj );
+    zRObj.releaseDrawOptions();
 }
 
 // constant
 int KartenKaufenListeEintrag::getKarteId() const
 {
-	return karteId;
+    return karteId;
 }
 
 // Reference Counting
 KartenKaufenListeEintrag *KartenKaufenListeEintrag::getThis()
 {
-	ref++;
-	return this;
+    ref++;
+    return this;
 }
 
 KartenKaufenListeEintrag *KartenKaufenListeEintrag::release()
 {
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    ref--;
+    if( !ref )
+        delete this;
+    return 0;
 }
 
 
@@ -553,503 +605,515 @@ KartenKaufenListeEintrag *KartenKaufenListeEintrag::release()
 // Konstruktor
 KartenKaufenListe::KartenKaufenListe( Schrift *schrift )
 {
-	s = schrift;
-	pos = Punkt( 5, 55 );
-	ram = new LRahmen();
-	ram->setSize( 215, 380 );
-	ram->setFarbe( 0xFFFFFFFF );
-	einträge = new RCArray< KartenKaufenListeEintrag >();
-	vScroll = new VScrollBar();
-	vScroll->setKlickScroll( 10 );
-	vScroll->update( 0, 380 );
-	rend = 0;
-	ref = 1;
+    s = schrift;
+    pos = Punkt( 5, 55 );
+    ram = new LRahmen();
+    ram->setSize( 215, 380 );
+    ram->setFarbe( 0xFFFFFFFF );
+    einträge = new RCArray< KartenKaufenListeEintrag >();
+    vScroll = new VScrollBar();
+    vScroll->setKlickScroll( 10 );
+    vScroll->update( 0, 380 );
+    rend = 0;
+    ref = 1;
 }
 
 // Destruktor
 KartenKaufenListe::~KartenKaufenListe()
 {
-	s->release();
-	ram->release();
-	einträge->release();
-	vScroll->release();
+    s->release();
+    ram->release();
+    einträge->release();
+    vScroll->release();
 }
 
 // nicht constant
 void KartenKaufenListe::ladeKarten( Array< int > *karten )
 {
-	leeren();
-	int anz = karten->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		if( shopKlient->ladeKarteTitel( karten->hat( i ) ? karten->get( i ) : 0 ) )
-			einträge->add( new KartenKaufenListeEintrag( karten->hat( i ) ? karten->get( i ) : 0, s->getThis() ) );
-	}
-	vScroll->update( anz * 100, 380 );
-	rend = 1;
+    leeren();
+    int anz = karten->getEintragAnzahl();
+    shopClient = mainClient->createShopServerClient();
+    if( shopClient && shopClient->verbinde() )
+    {
+        for( int i = 0; i < anz; i++ )
+        {
+            if( shopClient->ladeKarteTitel( karten->hat( i ) ? karten->get( i ) : 0 ) )
+                einträge->add( new KartenKaufenListeEintrag( karten->hat( i ) ? karten->get( i ) : 0, s->getThis() ) );
+        }
+        shopClient->trenne( 0 );
+    }
+    vScroll->update( anz * 100, 380 );
+    rend = 1;
 }
 
 void KartenKaufenListe::leeren()
 {
     cs.lock();
-	einträge->leeren();
+    einträge->leeren();
     cs.unlock();
-	vScroll->update( 0, 380 );
-	rend = 1;
+    vScroll->update( 0, 380 );
+    rend = 1;
 }
 
 int KartenKaufenListe::doMausEreignis( MausEreignis &me )
 {
-	int mx = me.mx;
-	int my = me.my;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	vScroll->doMausMessage( 200, 0, 15, 380, me );
-	me.my += vScroll->getScroll();
-	int ret = 0;
+    int mx = me.mx;
+    int my = me.my;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    vScroll->doMausMessage( 200, 0, 15, 380, me );
+    me.my += vScroll->getScroll();
+    int ret = 0;
     cs.lock();
-	int anz = einträge->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		if( einträge->z( i )->doMausEreignis( me ) )
-			ret = einträge->z( i )->getKarteId();
-		me.my += 100;
-	}
-	if( ret )
-	{
-		for( int i = 0; i < anz; i++ )
-		{
-			if( einträge->z( i )->getKarteId() != ret )
-				einträge->z( i )->resetAuswahl();
-		}
-	}
+    int anz = einträge->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        if( einträge->z( i )->doMausEreignis( me ) )
+            ret = einträge->z( i )->getKarteId();
+        me.my += 100;
+    }
+    if( ret )
+    {
+        for( int i = 0; i < anz; i++ )
+        {
+            if( einträge->z( i )->getKarteId() != ret )
+                einträge->z( i )->resetAuswahl();
+        }
+    }
     cs.unlock();
-	me.mx = mx;
-	me.my = my;
-	return ret;
+    me.mx = mx;
+    me.my = my;
+    return ret;
 }
 
 bool KartenKaufenListe::tick( double zeit )
 {
-	rend |= vScroll->getRend();
+    rend |= vScroll->getRend();
     cs.lock();
-	int anz = einträge->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		rend |= einträge->z( i )->tick( zeit );
+    int anz = einträge->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        rend |= einträge->z( i )->tick( zeit );
     cs.unlock();
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 
 void KartenKaufenListe::render( Bild &zRObj )
 {
-	int br = ram->getBreite();
-	int hö = ram->getHeight();
-	if( !zRObj.setDrawOptions( pos.x, pos.y, br, hö ) )
-		return;
-	ram->render( zRObj );
+    int br = ram->getBreite();
+    int hö = ram->getHeight();
+    if( !zRObj.setDrawOptions( pos.x, pos.y, br, hö ) )
+        return;
+    ram->render( zRObj );
     cs.lock();
-	int anz = einträge->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-		einträge->z( i )->render( i * 100 - vScroll->getScroll(), zRObj );
+    int anz = einträge->getEintragAnzahl();
+    for( int i = 0; i < anz; i++ )
+        einträge->z( i )->render( i * 100 - vScroll->getScroll(), zRObj );
     cs.unlock();
-	vScroll->render( 200, 0, 15, 380, zRObj );
-	zRObj.releaseDrawOptions();
+    vScroll->render( 200, 0, 15, 380, zRObj );
+    zRObj.releaseDrawOptions();
 }
 
 // constant
 int KartenKaufenListe::getEintragAnzahl()
 {
-	return einträge->getEintragAnzahl();
+    return einträge->getEintragAnzahl();
 }
 
 // Reference Counting
 KartenKaufenListe *KartenKaufenListe::getThis()
 {
-	ref++;
-	return this;
+    ref++;
+    return this;
 }
 
 KartenKaufenListe *KartenKaufenListe::release()
 {
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    ref--;
+    if( !ref )
+        delete this;
+    return 0;
 }
 
 
 // Inhalt der KartenKaufen Klasse aus KartenKaufen.h
 // Konstruktor
 KartenKaufen::KartenKaufen( Schrift *zSchrift )
-	: Thread()
+    : Thread()
 {
-	Bild *shopZurück = bilder->get( "shop.ltdb/zurück.png" );
-	if( !shopZurück )
-	{
-		LTDBDatei *datei = new LTDBDatei();
-		datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) );
-		datei->leseDaten( 0 );
-		shopZurück = datei->laden( 0, new Text( "zurück.png" ) );
-		datei->release();
-		bilder->add( "shop.ltdb/zurück.png", shopZurück->getThis() );
-	}
-	Bild *shopWeiter = bilder->get( "shop.ltdb/weiter.png" );
-	if( !shopWeiter )
-	{
-		LTDBDatei *datei = new LTDBDatei();
-		datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) );
-		datei->leseDaten( 0 );
-		shopWeiter = datei->laden( 0, new Text( "weiter.png" ) );
-		datei->release();
-		bilder->add( "shop.ltdb/weiter.png", shopWeiter->getThis() );
-	}
-	alpha = 255;
-	sichtbar = 0;
-	suchText = new Text( "" );
-	ram = new LRahmen();
-	ram->setSize( 780, 440 );
-	ram->setFarbe( 0xFFFFFFFF );
-	pos = Punkt( 10, 50 );
-	spielArt = new AuswahlBox();
-	spielArt->setStyle( AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Hintergrund |
+    Bild *shopZurück = bilder->get( "shop.ltdb/zurück.png" );
+    if( !shopZurück )
+    {
+        LTDBDatei *datei = new LTDBDatei();
+        datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) );
+        datei->leseDaten( 0 );
+        shopZurück = datei->laden( 0, new Text( "zurück.png" ) );
+        datei->release();
+        bilder->add( "shop.ltdb/zurück.png", shopZurück->getThis() );
+    }
+    Bild *shopWeiter = bilder->get( "shop.ltdb/weiter.png" );
+    if( !shopWeiter )
+    {
+        LTDBDatei *datei = new LTDBDatei();
+        datei->setDatei( new Text( "data/client/bilder/shop.ltdb" ) );
+        datei->leseDaten( 0 );
+        shopWeiter = datei->laden( 0, new Text( "weiter.png" ) );
+        datei->release();
+        bilder->add( "shop.ltdb/weiter.png", shopWeiter->getThis() );
+    }
+    alpha = 255;
+    sichtbar = 0;
+    suchText = new Text( "" );
+    ram = new LRahmen();
+    ram->setSize( 780, 440 );
+    ram->setFarbe( 0xFFFFFFFF );
+    pos = Punkt( 10, 50 );
+    spielArt = new AuswahlBox();
+    spielArt->setStyle( AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Hintergrund |
                         AuswahlBox::Style::Rahmen | AuswahlBox::Style::Sichtbar | AuswahlBox::Style::VScroll | AuswahlBox::Style::MaxHeight );
-	spielArt->setSize( 200, 20 );
-	spielArt->setPosition( 5, 5 );
-	spielArt->setLinienRahmenFarbe( 0xFFFFFFFF );
-	spielArt->setLinienRahmenBreite( 1 );
-	spielArt->setMaxAuskappHeight( 100 );
-	spielArt->setSchriftZ( zSchrift->getThis() );
-	spielArt->setHintergrundFarbe( 0xFF000000 );
-	spielArt->setMausEreignis( _ret1ME );
-	spielArt->setAuswAlphaFeldFarbe( 0x5000FF00 );
-	spielArt->setAuswAlphaFeldStrength( -10 );
-	spielArt->setMausAlphaFeldFarbe( 0x1000FF00 );
-	spielArt->setMausAlphaFeldStrength( -10 );
-	spielArt->setEintragHeight( 20 );
-	spielArt->addEintrag( "Spiel Art wählen" );
-	suchFilterT = initTextFeld( 210, 5, 70, 20, zSchrift, TextFeld::Style::Text, "Suchfilter:" );
-	suchFilter = initTextFeld( 285, 5, 225, 20, zSchrift, TextFeld::Style::TextFeld, "" );
-	initToolTip( suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst.", zSchrift->getThis(), hauptScreen );
-	suchen = initKnopf( 515, 5, 100, 20, zSchrift, Knopf::Style::Sichtbar, "suchen" );
-	seiten = initTextFeld( 55, 30, 250, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Seite 0 von 0, 0 Funde." );
-	zurück = initKnopf( 5, 30, 20, 20, 0, 0, "" );
-	zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	zurück->setHintergrundBildZ( shopZurück );
-	initToolTip( zurück, "Seite zurück blättern.", zSchrift->getThis(), hauptScreen );
-	weiter = initKnopf( 30, 30, 20, 20, 0, 0, "" );
-	weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
-	weiter->setHintergrundBildZ( shopWeiter );
-	initToolTip( weiter, "Seite weiter blättern.", zSchrift->getThis(), hauptScreen );
-	liste = new KartenKaufenListe( zSchrift->getThis() );
-	auswahl = new KartenKaufenAuswahl( zSchrift );
-	laden = ( Framework::Animation2D* )ladeAnimation->dublizieren();
-	laden->setPosition( 365, 195 );
-	laden->setSichtbar( 0 );
-	tickVal = 0;
-	seite = 0;
-	maxSeite = 0;
-	rend = 0;
-	aktion = 0;
-	ref = 1;
-	start();
+    spielArt->setSize( 200, 20 );
+    spielArt->setPosition( 5, 5 );
+    spielArt->setLinienRahmenFarbe( 0xFFFFFFFF );
+    spielArt->setLinienRahmenBreite( 1 );
+    spielArt->setMaxAuskappHeight( 100 );
+    spielArt->setSchriftZ( zSchrift->getThis() );
+    spielArt->setHintergrundFarbe( 0xFF000000 );
+    spielArt->setMausEreignis( _ret1ME );
+    spielArt->setAuswAlphaFeldFarbe( 0x5000FF00 );
+    spielArt->setAuswAlphaFeldStrength( -10 );
+    spielArt->setMausAlphaFeldFarbe( 0x1000FF00 );
+    spielArt->setMausAlphaFeldStrength( -10 );
+    spielArt->setEintragHeight( 20 );
+    spielArt->addEintrag( "Spiel Art wählen" );
+    suchFilterT = initTextFeld( 210, 5, 70, 20, zSchrift, TextFeld::Style::Text, "Suchfilter:" );
+    suchFilter = initTextFeld( 285, 5, 225, 20, zSchrift, TextFeld::Style::TextFeld, "" );
+    initToolTip( suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst.", zSchrift->getThis(), hauptScreen );
+    suchen = initKnopf( 515, 5, 100, 20, zSchrift, Knopf::Style::Sichtbar, "suchen" );
+    seiten = initTextFeld( 55, 30, 250, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Seite 0 von 0, 0 Funde." );
+    zurück = initKnopf( 5, 30, 20, 20, 0, 0, "" );
+    zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    zurück->setHintergrundBildZ( shopZurück );
+    initToolTip( zurück, "Seite zurück blättern.", zSchrift->getThis(), hauptScreen );
+    weiter = initKnopf( 30, 30, 20, 20, 0, 0, "" );
+    weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
+    weiter->setHintergrundBildZ( shopWeiter );
+    initToolTip( weiter, "Seite weiter blättern.", zSchrift->getThis(), hauptScreen );
+    liste = new KartenKaufenListe( zSchrift->getThis() );
+    auswahl = new KartenKaufenAuswahl( zSchrift );
+    laden = ( Framework::Animation2D* )ladeAnimation->dublizieren();
+    laden->setPosition( 365, 195 );
+    laden->setSichtbar( 0 );
+    tickVal = 0;
+    seite = 0;
+    maxSeite = 0;
+    rend = 0;
+    aktion = 0;
+    ref = 1;
+    start();
 }
 
 // Destruktor
 KartenKaufen::~KartenKaufen()
 {
-	if( run )
-		warteAufThread( 1000 );
-	if( run )
-		ende();
-	spielArt->release();
-	suchText->release();
-	ram->release();
-	suchFilterT->release();
-	suchFilter->release();
-	suchen->release();
-	seiten->release();
-	weiter->release();
-	zurück->release();
-	liste->release();
-	auswahl->release();
-	laden->release();
+    if( run )
+        warteAufThread( 1000 );
+    if( run )
+        ende();
+    spielArt->release();
+    suchText->release();
+    ram->release();
+    suchFilterT->release();
+    suchFilter->release();
+    suchen->release();
+    seiten->release();
+    weiter->release();
+    zurück->release();
+    liste->release();
+    auswahl->release();
+    laden->release();
 }
 
 // nicht constant
 void KartenKaufen::setSichtbar( bool sicht )
 {
-	sichtbar = sicht;
-	if( !run && sichtbar )
-	{
-		aktion = 0;
-		start();
-	}
+    sichtbar = sicht;
+    if( !run && sichtbar )
+    {
+        aktion = 0;
+        start();
+    }
 }
 
 void KartenKaufen::thread()
 {
-	laden->setSichtbar( 1 );
-	if( !aktion )
-	{
-		Array< int > *saList = infoKlient->getAccountSpielArtListe();
-		if( saList )
-		{
-			RCArray< Text > *saNamen = new RCArray< Text >();
-			int anz = saList->getEintragAnzahl();
-			for( int i = 0; i < anz; i++ )
-			{
-				if( !saList->hat( i ) )
-					continue;
-				Text *name = infoKlient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
-				if( name )
-					saNamen->add( name );
-			}
-			spielArt->lockZeichnung();
-			spielArt->setAuswahl( 0 );
-			anz = spielArt->getEintragAnzahl();
-			for( int i = 1; i < anz; i++ )
-				spielArt->removeEintrag( 1 );
-			anz = saNamen->getEintragAnzahl();
-			for( int i = 0; i < anz; i++ )
-			{
-				if( saNamen->z( i ) )
-					spielArt->addEintrag( saNamen->z( i )->getText() );
-			}
-			spielArt->unlockZeichnung();
-			saNamen->release();
-			saList->release();
-		}
-		if( !liste->getEintragAnzahl() )
-		{
-			hauptScreen->lock();
+    laden->setSichtbar( 1 );
+    if( !aktion )
+    {
+        Array< int > *saList = infoClient->getAccountSpielArtListe();
+        if( saList )
+        {
+            RCArray< Text > *saNamen = new RCArray< Text >();
+            int anz = saList->getEintragAnzahl();
+            for( int i = 0; i < anz; i++ )
+            {
+                if( !saList->hat( i ) )
+                    continue;
+                Text *name = infoClient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
+                if( name )
+                    saNamen->add( name );
+            }
+            spielArt->lockZeichnung();
+            spielArt->setAuswahl( 0 );
+            anz = spielArt->getEintragAnzahl();
+            for( int i = 1; i < anz; i++ )
+                spielArt->removeEintrag( 1 );
+            anz = saNamen->getEintragAnzahl();
+            for( int i = 0; i < anz; i++ )
+            {
+                if( saNamen->z( i ) )
+                    spielArt->addEintrag( saNamen->z( i )->getText() );
+            }
+            spielArt->unlockZeichnung();
+            saNamen->release();
+            saList->release();
+        }
+        if( !liste->getEintragAnzahl() )
+        {
+            hauptScreen->lock();
             suchText->setText( suchFilter->zText()->getText() );
             seite = 1;
             maxSeite = 1;
             aktion = 1;
-			hauptScreen->unlock();
-		}
+            hauptScreen->unlock();
+        }
         if( !aktion )
         {
             laden->setSichtbar( 0 );
             return;
         }
-	}
-	int spielArtId = 0;
-	if( spielArt->getAuswahl() > 0 )
-		spielArtId = infoKlient->getSpielId( spielArt->zEintrag( spielArt->getAuswahl() )->zText()->getText() );
-	Array< int > *list = shopKlient->suchKarten( suchText->getText(), spielArtId );
-	if( !list )
-	{
-		laden->setSichtbar( 0 );
-		run = 0;
-		return;
-	}
-	Array< int > *slist = new Array< int >();
-	int anz = list->getEintragAnzahl();
-	maxSeite = anz / 10 + 1;
-	if( !( anz % 10 ) )
-		maxSeite--;
-	while( anz <= seite * 10 && seite > 0 )
-		seite--;
-	for( int i = seite * 10; i < anz && i < seite * 10 + 10; i++ )
-		slist->add( list->hat( i ) ? list->get( i ) : 0 );
-	list->release();
-	auswahl->reset();
-	liste->ladeKarten( slist );
-	slist->release();
-	Text *t = new Text( "Seite " );
-	t->append( maxSeite ? seite + 1 : 0 );
-	t->append( " von " );
-	t->append( maxSeite );
-	t->append( ", " );
-	t->append( anz );
-	if( anz == 1 )
-		t->append( " Fund." );
-	else
-		t->append( " Funde." );
-	seiten->setText( t );
-	zurück->setStyle( TextFeld::Style::Erlaubt, seite > 0 );
-	weiter->setStyle( TextFeld::Style::Erlaubt, seite + 1 < maxSeite );
-	laden->setSichtbar( 0 );
+    }
+    int spielArtId = 0;
+    if( spielArt->getAuswahl() > 0 )
+        spielArtId = infoClient->getSpielId( spielArt->zEintrag( spielArt->getAuswahl() )->zText()->getText() );
+    Array< int > *list = 0;
+    if( !shopClient )
+        shopClient = mainClient->createShopServerClient();
+    if( shopClient && shopClient->verbinde() )
+    {
+        list = shopClient->suchKarten( suchText->getText(), spielArtId );
+        shopClient->trenne( 0 );
+    }
+    if( !list )
+    {
+        laden->setSichtbar( 0 );
+        run = 0;
+        return;
+    }
+    Array< int > *slist = new Array< int >();
+    int anz = list->getEintragAnzahl();
+    maxSeite = anz / 10 + 1;
+    if( !( anz % 10 ) )
+        maxSeite--;
+    while( anz <= seite * 10 && seite > 0 )
+        seite--;
+    for( int i = seite * 10; i < anz && i < seite * 10 + 10; i++ )
+        slist->add( list->hat( i ) ? list->get( i ) : 0 );
+    list->release();
+    auswahl->reset();
+    liste->ladeKarten( slist );
+    slist->release();
+    Text *t = new Text( "Seite " );
+    t->append( maxSeite ? seite + 1 : 0 );
+    t->append( " von " );
+    t->append( maxSeite );
+    t->append( ", " );
+    t->append( anz );
+    if( anz == 1 )
+        t->append( " Fund." );
+    else
+        t->append( " Funde." );
+    seiten->setText( t );
+    zurück->setStyle( TextFeld::Style::Erlaubt, seite > 0 );
+    weiter->setStyle( TextFeld::Style::Erlaubt, seite + 1 < maxSeite );
+    laden->setSichtbar( 0 );
 }
 
 void KartenKaufen::doMausEreignis( MausEreignis &me )
 {
-	if( !sichtbar || run )
-		return;
-	int mx = me.mx;
-	int my = me.my;
-	me.mx -= pos.x;
-	me.my -= pos.y;
-	spielArt->doMausEreignis( me );
-	suchFilter->doMausEreignis( me );
-	int auswId = liste->doMausEreignis( me );
-	if( auswId )
-		auswahl->ladeKarteSeite( auswId );
-	auswahl->doMausEreignis( me );
-	int ak = 0;
-	bool tmp = me.verarbeitet;
-	suchen->doMausEreignis( me );
-	ak = me.verarbeitet ? 1 : 0;
-	zurück->doMausEreignis( me );
-	ak = me.verarbeitet && !ak ? 2 : ak;
-	weiter->doMausEreignis( me );
-	ak = me.verarbeitet && !ak ? 3 : ak;
-	if( tmp )
-		ak = 0;
-	if( me.id == ME_RLinks )
-	{
-		switch( ak )
-		{
-		case 1: // Suchen
-			suchText->setText( suchFilter->zText()->getText() );
-			seite = 1;
-			maxSeite = 1;
-			aktion = 1;
-			start();
-			break;
-		case 2: // Seite zurück blättern
-			seite--;
-			if( seite < 1 )
-				seite = 1;
-			aktion = 1;
-			start();
-			break;
-		case 3: // Seite vorwärts blättern
-			seite++;
-			if( seite > maxSeite )
-				seite = maxSeite;
-			aktion = 1;
-			start();
-			break;
-		}
-	}
-	me.mx = mx;
-	me.my = my;
+    if( !sichtbar || run )
+        return;
+    int mx = me.mx;
+    int my = me.my;
+    me.mx -= pos.x;
+    me.my -= pos.y;
+    spielArt->doMausEreignis( me );
+    suchFilter->doMausEreignis( me );
+    int auswId = liste->doMausEreignis( me );
+    if( auswId )
+        auswahl->ladeKarteSeite( auswId );
+    auswahl->doMausEreignis( me );
+    int ak = 0;
+    bool tmp = me.verarbeitet;
+    suchen->doMausEreignis( me );
+    ak = me.verarbeitet ? 1 : 0;
+    zurück->doMausEreignis( me );
+    ak = me.verarbeitet && !ak ? 2 : ak;
+    weiter->doMausEreignis( me );
+    ak = me.verarbeitet && !ak ? 3 : ak;
+    if( tmp )
+        ak = 0;
+    if( me.id == ME_RLinks )
+    {
+        switch( ak )
+        {
+        case 1: // Suchen
+            suchText->setText( suchFilter->zText()->getText() );
+            seite = 1;
+            maxSeite = 1;
+            aktion = 1;
+            start();
+            break;
+        case 2: // Seite zurück blättern
+            seite--;
+            if( seite < 1 )
+                seite = 1;
+            aktion = 1;
+            start();
+            break;
+        case 3: // Seite vorwärts blättern
+            seite++;
+            if( seite > maxSeite )
+                seite = maxSeite;
+            aktion = 1;
+            start();
+            break;
+        }
+    }
+    me.mx = mx;
+    me.my = my;
 }
 
 void KartenKaufen::doTastaturEreignis( TastaturEreignis &te )
 {
-	if( !sichtbar || run )
-		return;
-	bool vera = te.verarbeitet;
-	suchFilter->doTastaturEreignis( te );
-	if( !vera && te.verarbeitet && te.taste == T_Enter && te.id == TE_Release )
-	{
-		MausEreignis me;
-		me.id = ME_RLinks;
-		me.verarbeitet = 0;
-		me.mx = suchen->getX() + 1 + pos.x;
-		me.my = suchen->getY() + 1 + pos.y;
-		doMausEreignis( me );
-	}
-	auswahl->doTastaturEreignis( te );
+    if( !sichtbar || run )
+        return;
+    bool vera = te.verarbeitet;
+    suchFilter->doTastaturEreignis( te );
+    if( !vera && te.verarbeitet && te.taste == T_Enter && te.id == TE_Release )
+    {
+        MausEreignis me;
+        me.id = ME_RLinks;
+        me.verarbeitet = 0;
+        me.mx = suchen->getX() + 1 + pos.x;
+        me.my = suchen->getY() + 1 + pos.y;
+        doMausEreignis( me );
+    }
+    auswahl->doTastaturEreignis( te );
 }
 
 bool KartenKaufen::tick( double zeit )
 {
-	rend |= spielArt->tick( zeit );
-	rend |= suchFilter->tick( zeit );
-	rend |= suchen->tick( zeit );
-	rend |= weiter->tick( zeit );
-	rend |= zurück->tick( zeit );
-	rend |= liste->tick( zeit );
-	rend |= auswahl->tick( zeit );
-	rend |= laden->tick( zeit );
-	tickVal += zeit * 250;
-	int val = (int)tickVal;
-	if( val < 1 )
-	{
-		bool ret = rend;
-		rend = 0;
-		return ret;
-	}
-	if( val > 10 )
-		val = 10;
-	tickVal -= val;
-	if( sichtbar && alpha != 255 && !run )
-	{
-		if( alpha + val > 255 )
-			alpha = 255;
-		else
-			alpha += val;
-		rend = 1;
-	}
-	if( sichtbar && alpha != 125 && run )
-	{
-		if( alpha > 125 )
-		{
-			if( alpha - val < 125 )
-				alpha = 125;
-			else
-				alpha -= val;
-			rend = 1;
-		}
-		else
-		{
-			if( alpha + val > 125 )
-				alpha = 125;
-			else
-				alpha += 125;
-			rend = 1;
-		}
-	}
-	if( !sichtbar && alpha != 0 )
-	{
-		if( alpha - val < 0 )
-			alpha = 0;
-		else
-			alpha -= val;
-		rend = 1;
-	}
-	bool ret = rend;
-	rend = 0;
-	return ret;
+    rend |= spielArt->tick( zeit );
+    rend |= suchFilter->tick( zeit );
+    rend |= suchen->tick( zeit );
+    rend |= weiter->tick( zeit );
+    rend |= zurück->tick( zeit );
+    rend |= liste->tick( zeit );
+    rend |= auswahl->tick( zeit );
+    rend |= laden->tick( zeit );
+    tickVal += zeit * 250;
+    int val = (int)tickVal;
+    if( val < 1 )
+    {
+        bool ret = rend;
+        rend = 0;
+        return ret;
+    }
+    if( val > 10 )
+        val = 10;
+    tickVal -= val;
+    if( sichtbar && alpha != 255 && !run )
+    {
+        if( alpha + val > 255 )
+            alpha = 255;
+        else
+            alpha += val;
+        rend = 1;
+    }
+    if( sichtbar && alpha != 125 && run )
+    {
+        if( alpha > 125 )
+        {
+            if( alpha - val < 125 )
+                alpha = 125;
+            else
+                alpha -= val;
+            rend = 1;
+        }
+        else
+        {
+            if( alpha + val > 125 )
+                alpha = 125;
+            else
+                alpha += 125;
+            rend = 1;
+        }
+    }
+    if( !sichtbar && alpha != 0 )
+    {
+        if( alpha - val < 0 )
+            alpha = 0;
+        else
+            alpha -= val;
+        rend = 1;
+    }
+    bool ret = rend;
+    rend = 0;
+    return ret;
 }
 
 void KartenKaufen::render( Bild &zRObj )
 {
-	if( !alpha )
-		return;
-	int br = ram->getBreite();
-	int hö = ram->getHeight();
-	if( !zRObj.setDrawOptions( pos.x, pos.y, br, hö ) )
-		return;
-	zRObj.setAlpha( alpha );
-	ram->render( zRObj );
-	suchFilterT->render( zRObj );
-	suchFilter->render( zRObj );
-	suchen->render( zRObj );
-	seiten->render( zRObj );
-	weiter->render( zRObj );
-	zurück->render( zRObj );
-	liste->render( zRObj );
-	auswahl->render( zRObj );
-	spielArt->render( zRObj );
-	zRObj.releaseAlpha();
-	laden->render( zRObj );
-	zRObj.releaseDrawOptions();
+    if( !alpha )
+        return;
+    int br = ram->getBreite();
+    int hö = ram->getHeight();
+    if( !zRObj.setDrawOptions( pos.x, pos.y, br, hö ) )
+        return;
+    zRObj.setAlpha( alpha );
+    ram->render( zRObj );
+    suchFilterT->render( zRObj );
+    suchFilter->render( zRObj );
+    suchen->render( zRObj );
+    seiten->render( zRObj );
+    weiter->render( zRObj );
+    zurück->render( zRObj );
+    liste->render( zRObj );
+    auswahl->render( zRObj );
+    spielArt->render( zRObj );
+    zRObj.releaseAlpha();
+    laden->render( zRObj );
+    zRObj.releaseDrawOptions();
 }
 
 // constant
 bool KartenKaufen::istSichtbar() const
 {
-	return sichtbar;
+    return sichtbar;
 }
 
 // Reference Counting
 KartenKaufen *KartenKaufen::getThis()
 {
-	ref++;
-	return this;
+    ref++;
+    return this;
 }
 
 KartenKaufen *KartenKaufen::release()
 {
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    ref--;
+    if( !ref )
+        delete this;
+    return 0;
 }

+ 130 - 65
KSGClient/NachLogin/Shop/Spiele/SpieleKaufen.cpp

@@ -116,7 +116,13 @@ void SpieleKaufenAuswahl::thread()
 	{
 		while( alpha )
 			Sleep( 100 );
-		shopKlient->ladeSpielSeite( spielId );
+        if( !shopClient )
+            shopClient = mainClient->createShopServerClient();
+        if( shopClient && shopClient->verbinde() )
+        {
+            shopClient->ladeSpielSeite( spielId );
+            shopClient->trenne( 0 );
+        }
 		Text *pfad = new Text( "data/tmp/shop/kaufen/spiele/" );
 		pfad->append( spielId );
 		pfad->append( "/seite.ksgs" );
@@ -140,7 +146,14 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVa
 		return;
 	if( b->istGleich( "GetBesitzStatus" ) )
 	{
-		int besitz = shopKlient->getSpielBesitzStatus( spielId );
+        int besitz = 0;
+        if( !shopClient )
+            shopClient = mainClient->createShopServerClient();
+        if( shopClient && shopClient->verbinde() )
+        {
+            besitz = shopClient->getSpielBesitzStatus( spielId );
+            shopClient->trenne( 0 );
+        }
 		KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
 		if( getKSGSVariable )
 		{
@@ -170,7 +183,14 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVa
 		else
 		{
 			bool testVersion = !version->getInt();
-			int preis = shopKlient->getSpielPreis( spielId, testVersion );
+			int preis = 0;
+            if( !shopClient )
+                shopClient = mainClient->createShopServerClient();
+            if( shopClient && shopClient->verbinde() )
+            {
+                preis = shopClient->getSpielPreis( spielId, testVersion );
+                shopClient->trenne( 0 );
+            }
 			KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
 			if( getKSGSVariable )
 			{
@@ -190,7 +210,14 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVa
 	}
 	if( b->istGleich( "GetTestVersionVerbleibend" ) )
 	{
-		int verbleibend = shopKlient->getSpielTestversion( spielId );
+		int verbleibend = 0;
+        if( !shopClient )
+            shopClient = mainClient->createShopServerClient();
+        if( shopClient && shopClient->verbinde() )
+        {
+            verbleibend = shopClient->getSpielTestversion( spielId );
+            shopClient->trenne( 0 );
+        }
 		KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
 		if( getKSGSVariable )
 		{
@@ -209,7 +236,14 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVa
 	}
 	if( b->istGleich( "GetErwerbbarStatus" ) )
 	{
-		int erwerbbar = shopKlient->istSpielErwerbbar( spielId );
+		int erwerbbar = 0;
+        if( !shopClient )
+            shopClient = mainClient->createShopServerClient();
+        if( shopClient && shopClient->verbinde() )
+        {
+            erwerbbar = shopClient->istSpielErwerbbar( spielId );
+            shopClient->trenne( 0 );
+        }
 		KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
 		if( getKSGSVariable )
 		{
@@ -228,7 +262,7 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVa
 	}
 	if( b->istGleich( "GetKupfer" ) )
 	{
-		int kupfer = infoKlient->getKupfer();
+		int kupfer = infoClient->getKupfer();
 		KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
 		if( getKSGSVariable )
 		{
@@ -258,59 +292,77 @@ void SpieleKaufenAuswahl::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVa
 		else
 		{
 			bool testVersion = !version->getInt();
-			if( !shopKlient->spielErwerben( spielId, testVersion ) )
-			{
-				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-															  new Text( "Das Spiel konnte nicht erworben werden." ),
-															  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-			}
-			else
-			{
-				int dgId = infoKlient->getDateiGruppeIdVonSpiel( spielId );
-				if( dgId )
-				{
-					KSGTDatei *dg = new KSGTDatei( "data/dg.ksgt" );
-					dg->laden();
-					bool gefunden = 0;
-					for( int i = 0; i < dg->getZeilenAnzahl(); i++ )
-					{
-						if( dg->zFeld( i, 0 ) && TextZuInt( dg->zFeld( i, 0 )->getText(), 10 ) == dgId )
-						{
-							gefunden = 1;
-							break;
-						}
-					}
-					if( !gefunden )
-					{
-						for( int i = 0; i < dg->getZeilenAnzahl(); i++ )
-						{
-							if( dg->zFeld( i, 3 ) && !dg->zFeld( i, 3 )->istGleich( "SOFORT" ) && !dg->zFeld( i, 3 )->istGleich( "NICHT" ) )
-							{
-								int platz = TextZuInt( dg->zFeld( i, 3 )->getText(), 10 ) + 1;
-								Text *plT = new Text();
-								plT->append( platz );
-								dg->zFeld( i, 3 )->setText( plT );
-							}
-						}
-						Text *idT = new Text();
-						idT->append( dgId );
-						Text *pfad = infoKlient->getDateiGruppePfad( dgId );
-						if( pfad )
-						{
-							RCArray< Text > *zeile = new RCArray< Text >();
-							zeile->add( idT );
-							zeile->add( pfad );
-							zeile->add( new Text( "0" ) );
-							zeile->add( new Text( "0" ) );
-							dg->addZeile( 4, zeile );
-						}
-						else
-							idT->release();
-					}
-					dg->speichern();
-					dg->release();
-				}
-			}
+            if( !shopClient )
+                shopClient = mainClient->createShopServerClient();
+            if( shopClient && shopClient->verbinde() )
+            {
+                if( !shopClient->spielErwerben( spielId, testVersion ) )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                                  new Text( shopClient->getLetzterFehler() ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                }
+                else
+                {
+                    int dgId = infoClient->getDateiGruppeIdVonSpiel( spielId );
+                    if( dgId )
+                    {
+                        KSGTDatei *dg = new KSGTDatei( "data/dg.ksgt" );
+                        dg->laden();
+                        bool gefunden = 0;
+                        for( int i = 0; i < dg->getZeilenAnzahl(); i++ )
+                        {
+                            if( dg->zFeld( i, 0 ) && TextZuInt( dg->zFeld( i, 0 )->getText(), 10 ) == dgId )
+                            {
+                                gefunden = 1;
+                                break;
+                            }
+                        }
+                        if( !gefunden )
+                        {
+                            for( int i = 0; i < dg->getZeilenAnzahl(); i++ )
+                            {
+                                if( dg->zFeld( i, 3 ) && !dg->zFeld( i, 3 )->istGleich( "SOFORT" ) && !dg->zFeld( i, 3 )->istGleich( "NICHT" ) )
+                                {
+                                    int platz = TextZuInt( dg->zFeld( i, 3 )->getText(), 10 ) + 1;
+                                    Text *plT = new Text();
+                                    plT->append( platz );
+                                    dg->zFeld( i, 3 )->setText( plT );
+                                }
+                            }
+                            Text *idT = new Text();
+                            idT->append( dgId );
+                            Text *pfad = infoClient->getDateiGruppePfad( dgId );
+                            if( pfad )
+                            {
+                                RCArray< Text > *zeile = new RCArray< Text >();
+                                zeile->add( idT );
+                                zeile->add( pfad );
+                                zeile->add( new Text( "0" ) );
+                                zeile->add( new Text( "0" ) );
+                                dg->addZeile( 4, zeile );
+                            }
+                            else
+                                idT->release();
+                        }
+                        dg->speichern();
+                        dg->release();
+                    }
+                }
+                shopClient->trenne( 0 );
+            }
+            else if( shopClient )
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                              new Text( shopClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            else
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                              new Text( mainClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
 			if( run )
 				warteAufThread( 2000 );
 			if( run )
@@ -628,11 +680,17 @@ void SpieleKaufenListe::ladeSpiele( Array< int > *spiele )
 {
 	leeren();
 	int anz = spiele->getEintragAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		if( shopKlient->ladeSpielTitel( spiele->hat( i ) ? spiele->get( i ) : 0 ) )
-			einträge->add( new SpieleKaufenListeEintrag( spiele->hat( i ) ? spiele->get( i ) : 0, s->getThis() ) );
-	}
+    if( !shopClient )
+        shopClient = mainClient->createShopServerClient();
+    if( shopClient && shopClient->verbinde() )
+    {
+	    for( int i = 0; i < anz; i++ )
+	    {
+		    if( shopClient->ladeSpielTitel( spiele->hat( i ) ? spiele->get( i ) : 0 ) )
+			    einträge->add( new SpieleKaufenListeEintrag( spiele->hat( i ) ? spiele->get( i ) : 0, s->getThis() ) );
+	    }
+        shopClient->trenne( 0 );
+    }
 	vScroll->update( anz * 100, 380 );
 	rend = 1;
 }
@@ -823,7 +881,14 @@ void SpieleKaufen::setSichtbar( bool sicht )
 void SpieleKaufen::thread()
 {
 	laden->setSichtbar( 1 );
-	Array< int > *list = shopKlient->suchSpiele( suchText->getText() );
+	Array< int > *list = 0;
+    if( !shopClient )
+        shopClient = mainClient->createShopServerClient();
+    if( shopClient && shopClient->verbinde() )
+    {
+        list = shopClient->suchSpiele( suchText->getText() );
+        shopClient->trenne( 0 );
+    }
 	if( !list )
 	{
 		laden->setSichtbar( 0 );

+ 32 - 33
KSGClient/NachLogin/Spiele/Angemeldet/Angemeldet.cpp

@@ -38,8 +38,12 @@ AngemeldetFenster::AngemeldetFenster( Schrift *zSchrift )
 // Destruktor
 AngemeldetFenster::~AngemeldetFenster()
 {
-    if( karteId && anmeldungKlient )
-        anmeldungKlient->abmelden();
+    if( karteId && anmeldungClient )
+    {
+        anmeldungClient->verbinde();
+        anmeldungClient->abmelden();
+        anmeldungClient->trenne( 0 );
+    }
     rahmen->release();
     spielName->release();
     karteName->release();
@@ -55,53 +59,42 @@ AngemeldetFenster::~AngemeldetFenster()
 // nicht constant
 bool AngemeldetFenster::setKarteId( int karteId )
 {
-    if( !anmeldungKlient )
+    if( !anmeldungClient )
         return 0;
     if( !karteId )
     {
-        if( anmeldungKlient->abmelden() )
+        if( anmeldungClient->verbinde() && anmeldungClient->abmelden() )
         {
             this->karteId = 0;
+            anmeldungClient->trenne( 0 );
             return 1;
         }
         else
             return 0;
     }
-    if( !anmeldungKlient->anmelden( karteId ) )
+    if( !anmeldungClient->verbinde() || !anmeldungClient->anmelden( karteId ) )
     {
         if( nachLogin && nachLogin->zNachrichtenListe() )
         {
-            if( anmeldungKlient->getLetzterFehler() )
-            {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-                                                              new Text( anmeldungKlient->getLetzterFehler() ),
-                                                              new Text( "Ok" ),
-                                                              0,
-                                                              NachrichtType::nachricht,
-                                                              0
-                                                              );
-            }
-            else
-            {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-                                                              new Text( "Fehler beim anmelden." ),
-                                                              new Text( "Ok" ),
-                                                              0,
-                                                              NachrichtType::nachricht,
-                                                              0
-                                                              );
-            }
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                            new Text( anmeldungClient->getLetzterFehler() ),
+                                                            new Text( "Ok" ),
+                                                            0,
+                                                            NachrichtType::nachricht,
+                                                            0
+                                                            );
         }
         return 0;
     }
     else
     {
+        anmeldungClient->trenne( 0 );
         time = 0;
         this->karteId = karteId;
-        if( infoKlient )
+        if( infoClient )
         {
-            Text *sN = infoKlient->getSpielName( infoKlient->getSpielId( karteId ) );
-            Text *kN = infoKlient->getKarteName( karteId );
+            Text *sN = infoClient->getSpielName( infoClient->getSpielId( karteId ) );
+            Text *kN = infoClient->getKarteName( karteId );
             if( sN )
             {
                 spielName->setText( "Spiel: " );
@@ -311,12 +304,18 @@ void AngemeldetFenster::doMausEreignis( MausEreignis &me )
         switch( aktion )
         {
         case 1: // abbrechen
-            if( anmeldungKlient && anmeldungKlient->abmelden() )
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->anmeldungAbbrechen();
+            if( anmeldungClient )
+            {
+                if( anmeldungClient->verbinde() && anmeldungClient->abmelden() )
+                {
+                    if( nachLogin && nachLogin->zSpielenFenster() )
+                        nachLogin->zSpielenFenster()->anmeldungAbbrechen();
+                    anmeldungClient->trenne( 0 );
+                }
+            }
             break;
         case 2: // beitreten
-            if( spielKlient->spielErstelltAnnehmen() )
+            if( spielClient->spielErstelltAnnehmen() )
             {
                 status = 3;
                 spielName->addStyle( TextFeld::Style::Sichtbar );
@@ -331,7 +330,7 @@ void AngemeldetFenster::doMausEreignis( MausEreignis &me )
                 rend = 1;
             }
             else if( nachLogin && nachLogin->zSpielenFenster() )
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielKlient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
             break;
         case 3: // Zurück
             if( nachLogin && nachLogin->zSpielenFenster() )

+ 282 - 112
KSGClient/NachLogin/Spiele/Gruppe/Gruppe.cpp

@@ -96,7 +96,7 @@ void GruppeEinladungAccount::setGruppeId( int gruppeId )
 void GruppeEinladungAccount::setAccountId( int id )
 {
 	this->accountId = id;
-	name->setText( infoKlient->getSpielerName( id ) );
+	name->setText( infoClient->getSpielerName( id ) );
 	rend = 1;
 }
 
@@ -171,7 +171,7 @@ bool GruppeEinladungAccount::tick( double tickVal )
 	}
 	if( mausIn )
 	{
-		if( admin == loginKlient->getAccountId() && !status )
+		if( admin == loginClient->getAccountId() && !status )
 		{
 			if( knopfX > br - 60 )
 			{
@@ -181,7 +181,7 @@ bool GruppeEinladungAccount::tick( double tickVal )
 				rend = 1;
 			}
 		}
-		else if( admin == loginKlient->getAccountId() && status != 2 )
+		else if( admin == loginClient->getAccountId() && status != 2 )
 		{
 			if( knopfX > br - 40 )
 			{
@@ -305,18 +305,50 @@ void GruppeEinladungAccount::doMausEreignis( MausEreignis &me )
 		nachLogin->zChatLeiste()->addChat( accountId, 0 );
 		break;
 	case 2:
-		if( !anmeldungKlient->gruppeSpielerEinladen( accountId, gruppeId ) )
+        if( !anmeldungClient )
+            anmeldungClient = mainClient->createAnmeldungServerClient();
+        if( !anmeldungClient )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+		if( !anmeldungClient->verbinde() )
 		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
+			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
 														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
 		}
+        else
+        {
+            if( !anmeldungClient->gruppeSpielerEinladen( accountId, gruppeId ) )
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            anmeldungClient->trenne( 0 );
+        }
 		break;
 	case 3:
-		if( !anmeldungKlient->gruppeEinladungAbbrechen( accountId, gruppeId ) )
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
+        if( !anmeldungClient )
+            anmeldungClient = mainClient->createAnmeldungServerClient();
+        if( !anmeldungClient )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        if( !anmeldungClient->verbinde() )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        else
+        {
+		    if( !anmeldungClient->gruppeEinladungAbbrechen( accountId, gruppeId ) )
+		    {
+			    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+														      new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+		    }
+            anmeldungClient->trenne( 0 );
+        }
 		break;
 	}
 }
@@ -530,7 +562,7 @@ bool GruppeEinladungListe::tick( double tickVal )
 	if( val > 4 )
 		val = 4;
 	this->tickVal -= val;
-	if( admin == loginKlient->getAccountId() )
+	if( admin == loginClient->getAccountId() )
 	{
 		if( einladungHöhe < 30 )
 		{
@@ -588,20 +620,36 @@ void GruppeEinladungListe::doMausEreignis( MausEreignis &me )
 			{
 				if( einladenName->zText()->getLength() )
 				{
-					int accountId = infoKlient->getAccountId( einladenName->zText()->getText() );
+					int accountId = infoClient->getAccountId( einladenName->zText()->getText() );
 					if( accountId )
 					{
-						if( !anmeldungKlient->gruppeSpielerEinladen( accountId, gruppeId ) )
-						{
-							nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-																		  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-						}
-						else
-						{
-							einladenName->setText( "" );
-							einladenName->setAuswahl( 0, 0 );
-							rend = 1;
-						}
+                        if( !anmeldungClient )
+                            anmeldungClient = mainClient->createAnmeldungServerClient();
+                        if( !anmeldungClient )
+                        {
+                            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                        }
+                        if( !anmeldungClient->verbinde() )
+                        {
+                            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                        }
+                        else
+                        {
+                            if( !anmeldungClient->gruppeSpielerEinladen( accountId, gruppeId ) )
+                            {
+                                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                            }
+                            else
+                            {
+                                einladenName->setText( "" );
+                                einladenName->setAuswahl( 0, 0 );
+                                rend = 1;
+                            }
+                            anmeldungClient->trenne( 0 );
+                        }
 					}
 					else
 					{
@@ -642,20 +690,36 @@ void GruppeEinladungListe::doTastaturEreignis( TastaturEreignis &te )
 	{
 		if( einladenName->zText()->getLength() )
 		{
-			int accountId = infoKlient->getAccountId( einladenName->zText()->getText() );
+			int accountId = infoClient->getAccountId( einladenName->zText()->getText() );
 			if( accountId )
 			{
-				if( !anmeldungKlient->gruppeSpielerEinladen( accountId, gruppeId ) )
-				{
-					nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-																  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-				}
-				else
-				{
-					einladenName->setText( "" );
-					einladenName->setAuswahl( 0, 0 );
-					rend = 1;
-				}
+                if( !anmeldungClient )
+                    anmeldungClient = mainClient->createAnmeldungServerClient();
+                if( !anmeldungClient )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                }
+                if( !anmeldungClient->verbinde() )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                }
+                else
+                {
+                    if( !anmeldungClient->gruppeSpielerEinladen( accountId, gruppeId ) )
+                    {
+                        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                                      new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                    }
+                    else
+                    {
+                        einladenName->setText( "" );
+                        einladenName->setAuswahl( 0, 0 );
+                        rend = 1;
+                    }
+                    anmeldungClient->trenne( 0 );
+                }
 			}
 			else
 			{
@@ -823,9 +887,9 @@ void GruppeAccountDaten::setGruppeId( int gruppeId )
 void GruppeAccountDaten::setAccountId( int id )
 {
 	accountId = id;
-	name->setText( infoKlient->getSpielerName( id ) );
+	name->setText( infoClient->getSpielerName( id ) );
 	punkte->setText( "" );
-	punkte->zText()->append( infoKlient->getSpielerPunkte( id, infoKlient->getSpielId( infoKlient->getGruppenKarteId( gruppeId ) ) ) );
+	punkte->zText()->append( infoClient->getSpielerPunkte( id, infoClient->getSpielId( infoClient->getGruppenKarteId( gruppeId ) ) ) );
 	punkte->zText()->append( "p" );
 	rend = 1;
 }
@@ -942,7 +1006,7 @@ bool GruppeAccountDaten::tick( double tickVal )
 				rend = 1;
 			}
 		}
-		if( accountId != loginKlient->getAccountId() )
+		if( accountId != loginClient->getAccountId() )
 		{
 			if( nachrichtSenden->getBreite() < 20 )
 			{
@@ -969,7 +1033,7 @@ bool GruppeAccountDaten::tick( double tickVal )
 				accountAnsehen->setSize( 20, accountAnsehen->getHeight() );
 			rend = 1;
 		}
-		if( accountId == loginKlient->getAccountId() || nachLogin->zFreundesListe()->istFreund( accountId ) )
+		if( accountId == loginClient->getAccountId() || nachLogin->zFreundesListe()->istFreund( accountId ) )
 		{
 			if( freundEinladung->getBreite() > 0 )
 			{
@@ -989,7 +1053,7 @@ bool GruppeAccountDaten::tick( double tickVal )
 				rend = 1;
 			}
 		}
-		if( accountId == loginKlient->getAccountId() || admin != loginKlient->getAccountId() )
+		if( accountId == loginClient->getAccountId() || admin != loginClient->getAccountId() )
 		{
 			if( kick->getBreite() > 0 )
 			{
@@ -1058,14 +1122,30 @@ void GruppeAccountDaten::doMausEreignis( MausEreignis &me )
 		}
 		break;
 	case 3:
-		chatKlient->freundesAnfrage( accountId );
+		chatClient->freundesAnfrage( accountId );
 		break;
 	case 4:
-		if( !anmeldungKlient->kickSpielerAusGruppe( accountId, gruppeId ) )
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
+        if( !anmeldungClient )
+            anmeldungClient = mainClient->createAnmeldungServerClient();
+        if( !anmeldungClient )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        if( !anmeldungClient->verbinde() )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        else
+        {
+            if( !anmeldungClient->kickSpielerAusGruppe( accountId, gruppeId ) )
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            anmeldungClient->trenne( 0 );
+        }
 		break;
 	}
 }
@@ -1394,17 +1474,33 @@ void GruppeChat::doMausEreignis( MausEreignis &me )
 	}
 	if( aktion )
 	{
-		if( anmeldungKlient->gruppeNachricht( gruppeId, nachricht->zText()->getText() ) )
-		{
-			nachricht->setText( "" );
-			nachricht->setAuswahl( 0, 0 );
-			rend = 1;
-		}
-		else
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
+        if( !anmeldungClient )
+            anmeldungClient = mainClient->createAnmeldungServerClient();
+        if( !anmeldungClient )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        if( !anmeldungClient->verbinde() )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        else
+        {
+            if( anmeldungClient->gruppeNachricht( gruppeId, nachricht->zText()->getText() ) )
+            {
+                nachricht->setText( "" );
+                nachricht->setAuswahl( 0, 0 );
+                rend = 1;
+            }
+            else
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            anmeldungClient->trenne( 0 );
+        }
 	}
 	me.mx += pos.x;
 	me.my += pos.y;
@@ -1416,17 +1512,33 @@ void GruppeChat::doTastaturEreignis( TastaturEreignis &te )
 	nachricht->doTastaturEreignis( te );
 	if( te.verarbeitet && !b && te.id == TE_Release && te.taste == T_Enter )
 	{
-		if( anmeldungKlient->gruppeNachricht( gruppeId, nachricht->zText()->getText() ) )
-		{
-			nachricht->setText( "" );
-			nachricht->setAuswahl( 0, 0 );
-			rend = 1;
-		}
-		else
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
+        if( !anmeldungClient )
+            anmeldungClient = mainClient->createAnmeldungServerClient();
+        if( !anmeldungClient )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        if( !anmeldungClient->verbinde() )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+        else
+        {
+            if( anmeldungClient->gruppeNachricht( gruppeId, nachricht->zText()->getText() ) )
+            {
+                nachricht->setText( "" );
+                nachricht->setAuswahl( 0, 0 );
+                rend = 1;
+            }
+            else
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            anmeldungClient->trenne( 0 );
+        }
 	}
 }
 
@@ -1508,14 +1620,14 @@ void GruppeAnmeldung::reset()
 void GruppeAnmeldung::setGruppeId( int gruppeId )
 {
 	this->gruppeId = gruppeId;
-	spielerHinzufügen->setStyle( KontrollKnopf::Style::Selected, infoKlient->getGruppeSpielerHinzufügen( gruppeId ) );
+	spielerHinzufügen->setStyle( KontrollKnopf::Style::Selected, infoClient->getGruppeSpielerHinzufügen( gruppeId ) );
 	rend = 1;
 }
 
 void GruppeAnmeldung::setAdmin( int admin )
 {
 	this->admin = admin;
-	if( admin == loginKlient->getAccountId() )
+	if( admin == loginClient->getAccountId() )
 	{
 		spielerHinzufügen->addStyle( KontrollKnopf::Style::Erlaubt );
 		angemeldet->addStyle( KontrollKnopf::Style::Erlaubt );
@@ -1594,12 +1706,12 @@ void GruppeAnmeldung::doMausEreignis( MausEreignis &me )
 	me.my -= pos.y;
 	bool ak = !me.verarbeitet;
 	int aktion = 0;
-	if( admin == loginKlient->getAccountId() )
+	if( admin == loginClient->getAccountId() )
 	{
 		spielerHinzufügen->doMausEreignis( me );
-		aktion = ( me.verarbeitet && admin == loginKlient->getAccountId() && ak ) ? 1 : aktion;
+		aktion = ( me.verarbeitet && admin == loginClient->getAccountId() && ak ) ? 1 : aktion;
 		angemeldet->doMausEreignis( me );
-		aktion = ( me.verarbeitet && admin == loginKlient->getAccountId() && ak && !aktion ) ? 2 : aktion;
+		aktion = ( me.verarbeitet && admin == loginClient->getAccountId() && ak && !aktion ) ? 2 : aktion;
 	}
 	gruppeVerlassen->doMausEreignis( me );
 	aktion = ( me.verarbeitet && ak && !aktion ) ? 3 : aktion;
@@ -1612,44 +1724,102 @@ void GruppeAnmeldung::doMausEreignis( MausEreignis &me )
 	switch( aktion )
 	{
 	case 1:
-		if( !anmeldungKlient->gruppeSpielStarten( gruppeId, spielerHinzufügen->hatStyleNicht( KontrollKnopf::Style::Selected ) ) )
-		{
-			spielerHinzufügen->setStyle( KontrollKnopf::Style::Selected, spielerHinzufügen->hatStyleNicht( KontrollKnopf::Style::Selected ) );
-			rend = 1;
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
+        if( !anmeldungClient )
+            anmeldungClient = mainClient->createAnmeldungServerClient();
+        if( !anmeldungClient )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            spielerHinzufügen->setStyle( KontrollKnopf::Style::Selected, spielerHinzufügen->hatStyleNicht( KontrollKnopf::Style::Selected ) );
+            rend = 1;
+        }
+        if( !anmeldungClient->verbinde() )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            spielerHinzufügen->setStyle( KontrollKnopf::Style::Selected, spielerHinzufügen->hatStyleNicht( KontrollKnopf::Style::Selected ) );
+            rend = 1;
+        }
+        else
+        {
+            if( !anmeldungClient->gruppeSpielStarten( gruppeId, spielerHinzufügen->hatStyleNicht( KontrollKnopf::Style::Selected ) ) )
+            {
+                spielerHinzufügen->setStyle( KontrollKnopf::Style::Selected, spielerHinzufügen->hatStyleNicht( KontrollKnopf::Style::Selected ) );
+                rend = 1;
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            anmeldungClient->trenne( 0 );
+        }
 		break;
 	case 2:
-		if( angemeldet->hatStyle( KontrollKnopf::Style::Selected ) )
-		{
-			if( !anmeldungKlient->gruppeAnmelden( gruppeId ) )
-			{
-				angemeldet->setStyle( KontrollKnopf::Style::Selected, angemeldet->hatStyleNicht( KontrollKnopf::Style::Selected ) );
-				rend = 1;
-				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-															  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-			}
-		}
-		else
-		{
-			if( !anmeldungKlient->gruppeAbmelden( gruppeId ) )
-			{
-				angemeldet->setStyle( KontrollKnopf::Style::Selected, angemeldet->hatStyleNicht( KontrollKnopf::Style::Selected ) );
-				rend = 1;
-				nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-															  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-			}
-		}
+        if( !anmeldungClient )
+            anmeldungClient = mainClient->createAnmeldungServerClient();
+        if( !anmeldungClient )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            angemeldet->setStyle( KontrollKnopf::Style::Selected, angemeldet->hatStyleNicht( KontrollKnopf::Style::Selected ) );
+            rend = 1;
+        }
+        if( !anmeldungClient->verbinde() )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            angemeldet->setStyle( KontrollKnopf::Style::Selected, angemeldet->hatStyleNicht( KontrollKnopf::Style::Selected ) );
+            rend = 1;
+        }
+        else
+        {
+		    if( angemeldet->hatStyle( KontrollKnopf::Style::Selected ) )
+		    {
+			    if( !anmeldungClient->gruppeAnmelden( gruppeId ) )
+			    {
+				    angemeldet->setStyle( KontrollKnopf::Style::Selected, angemeldet->hatStyleNicht( KontrollKnopf::Style::Selected ) );
+				    rend = 1;
+				    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+															      new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+			    }
+		    }
+		    else
+		    {
+			    if( !anmeldungClient->gruppeAbmelden( gruppeId ) )
+			    {
+				    angemeldet->setStyle( KontrollKnopf::Style::Selected, angemeldet->hatStyleNicht( KontrollKnopf::Style::Selected ) );
+				    rend = 1;
+				    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+															      new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+			    }
+		    }
+            anmeldungClient->trenne( 0 );
+        }
 		break;
 	case 3:
-		if( anmeldungKlient->gruppeVerlassen( gruppeId ) )
-			nachLogin->zSpielenFenster()->gruppeVerlassen();
-		else
-		{
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
-														  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-		}
+        if( !anmeldungClient )
+            anmeldungClient = mainClient->createAnmeldungServerClient();
+        if( !anmeldungClient )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            rend = 1;
+        }
+        if( !anmeldungClient->verbinde() )
+        {
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                          new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            rend = 1;
+        }
+        else
+        {
+            if( anmeldungClient->gruppeVerlassen( gruppeId ) )
+                nachLogin->zSpielenFenster()->gruppeVerlassen();
+            else
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            }
+            anmeldungClient->trenne( 0 );
+        }
 		break;
 	}
 	me.mx += pos.x;
@@ -1932,7 +2102,7 @@ void GruppeKarte::thread()
 		hintergrund = hintergrund->release();
 	if( fehler )
 		fehler = fehler->release();
-	karteId = infoKlient->getGruppenKarteId( gruppeId );
+	karteId = infoClient->getGruppenKarteId( gruppeId );
 	if( !karteId )
 	{
 		run = 0;
@@ -2130,14 +2300,14 @@ void GruppeSpielGefunden::doMausEreignis( MausEreignis &me )
 	annehmen->doMausEreignis( me );
 	if( me.verarbeitet && !ver && me.id == ME_RLinks )
 	{
-		if( spielKlient->spielErstelltAnnehmen() )
+		if( spielClient->spielErstelltAnnehmen() )
 		{
 			annehmen->removeStyle( Knopf::Style::Sichtbar );
 			warte->addStyle( TextFeld::Style::Sichtbar );
 			rend = 1;
 		}
 		else if( nachLogin && nachLogin->zSpielenFenster() )
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielKlient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
 	}
 	me.mx += pos.x;
 	me.my += pos.y;
@@ -2219,8 +2389,8 @@ void GruppeFenster::setGruppeId( int id )
 	spiel->setSichtbar( 0 );
 	if( id )
 	{
-		int adminId = infoKlient->getGruppeAdminId( id );
-		nachLogin->zFreundesListe()->zeigeEinladeKnopf( adminId == loginKlient->getAccountId() );
+		int adminId = infoClient->getGruppeAdminId( id );
+		nachLogin->zFreundesListe()->zeigeEinladeKnopf( adminId == loginClient->getAccountId() );
 		setAdmin( adminId );
 	}
 	rend = 1;

+ 26 - 8
KSGClient/NachLogin/Spiele/Karte Auswahl/KarteAuswahl.cpp

@@ -181,7 +181,7 @@ void KarteDaten::updateErlaubt()
     if( geladen != 2 )
         return;
     bool update = erlaubt;
-    erlaubt = infoKlient->istKarteErlaubt( karteId );
+    erlaubt = infoClient->istKarteErlaubt( karteId );
     if( update != erlaubt && beschreibung && ksgs )
     {
         KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
@@ -208,14 +208,32 @@ void KarteDaten::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **
         }
         if( erlaubt && txt->istGleich( "gruppeErstellen" ) )
         {
-            int ret = anmeldungKlient->gruppeErstellen( karteId );
-            if( !ret && nachLogin )
+            if( !anmeldungClient )
+                anmeldungClient = mainClient->createAnmeldungServerClient();
+            if( !anmeldungClient )
             {
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( mainClient->getLetzterFehler() ),
                                                               new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                rend = 1;
+            }
+            if( !anmeldungClient->verbinde() )
+            {
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                rend = 1;
+            }
+            else
+            {
+                int ret = anmeldungClient->gruppeErstellen( karteId );
+                if( !ret && nachLogin )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungClient->getLetzterFehler() ),
+                                                                  new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                }
+                else if( nachLogin )
+                    nachLogin->zSpielenFenster()->gruppeBetreten( ret );
+                anmeldungClient->trenne( 0 );
             }
-            else if( nachLogin )
-                nachLogin->zSpielenFenster()->gruppeBetreten( ret );
         }
         txt->release();
     }
@@ -547,10 +565,10 @@ void KarteAuswahlFenster::updateListe()
 
 void KarteAuswahlFenster::thread()
 {
-    Array< int > *liste = infoKlient->getAccountKarteListe( spielId );
+    Array< int > *liste = infoClient->getAccountKarteListe( spielId );
     if( !liste )
     {
-        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoKlient->getLetzterFehler() ),
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoClient->getLetzterFehler() ),
                                                       new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
         run = 0;
         return;

+ 8 - 8
KSGClient/NachLogin/Spiele/Spiel Auswahl/SpielAuswahl.cpp

@@ -75,7 +75,7 @@ void SpielDaten::Loader::thread()
             if( !sd->geladen )
                 sd->geladen = 1;
             sd->rend = 1;
-            int dgId = infoKlient->getDateiGruppeIdVonSpiel( sd->spielId );
+            int dgId = infoClient->getDateiGruppeIdVonSpiel( sd->spielId );
             if( dgId )
             {
                 KSGTDatei *dg = new KSGTDatei( "data/dg.ksgt" );
@@ -103,7 +103,7 @@ void SpielDaten::Loader::thread()
                     }
                     Text *idT = new Text();
                     idT->append( dgId );
-                    Text *pfad = infoKlient->getDateiGruppePfad( dgId );
+                    Text *pfad = infoClient->getDateiGruppePfad( dgId );
                     if( pfad )
                     {
                         RCArray< Text > *zeile = new RCArray< Text >();
@@ -476,20 +476,20 @@ void SpielDaten::updateErlaubt()
     KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
     dgt->laden();
     bool ak = 0;
-    int dgId = infoKlient->getDateiGruppeIdVonSpiel( spielId );
+    int dgId = infoClient->getDateiGruppeIdVonSpiel( spielId );
     for( int i = 0; i < dgt->getZeilenAnzahl(); i++ )
     {
         if( dgt->zFeld( i, 0 ) && TextZuInt( dgt->zFeld( i, 0 )->getText(), 10 ) == dgId )
         {
             int lv = dgt->zFeld( i, 2 ) ? TextZuInt( dgt->zFeld( i, 2 )->getText(), 10 ) : 0;
-            int ov = infoKlient->getSpielVersion( spielId );
+            int ov = infoClient->getSpielVersion( spielId );
             if( lv == ov )
                 ak = 1;
             break;
         }
     }
     dgt->release();
-    erlaubt = ak && infoKlient->istSpielErlaubt( spielId );
+    erlaubt = ak && infoClient->istSpielErlaubt( spielId );
     if( !erlaubt && !updateH->hat( spielId ) )
     {
         updateH->erstellen( schrift, spielId );
@@ -811,10 +811,10 @@ void SpielAuswahlFenster::updateListe()
 
 void SpielAuswahlFenster::thread()
 {
-    Array< int > *liste = infoKlient->getAccountSpielArtListe();
+    Array< int > *liste = infoClient->getAccountSpielArtListe();
     if( !liste )
     {
-        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoKlient->getLetzterFehler() ),
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoClient->getLetzterFehler() ),
                                                       new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
         run = 0;
         return;
@@ -822,7 +822,7 @@ void SpielAuswahlFenster::thread()
     int anz = liste->getEintragAnzahl();
     for( int i = 0; i < anz; i++ )
     {
-        Text *name = infoKlient->getSpielName( liste->hat( i ) ? liste->get( i ) : 0 );
+        Text *name = infoClient->getSpielName( liste->hat( i ) ? liste->get( i ) : 0 );
         if( name )
         {
             bool gefunden = 0;

+ 3 - 3
KSGClient/NachLogin/Spiele/Spiele.cpp

@@ -133,7 +133,7 @@ void Spiele::gruppeBetreten( int gruppeId )
 	größe2 = größe3;
 	pos2 = pos3;
 	gruppe->setGruppeId( gruppeId );
-	gruppe->neuerSpieler( loginKlient->getAccountId() );
+	gruppe->neuerSpieler( loginClient->getAccountId() );
 	animation |= 0x4;
 	spielGefundenB = 0;
 }
@@ -188,7 +188,7 @@ void Spiele::setGruppeAdmin( int gruppeId, int admin )
 {
 	if( gruppe->getGruppeId() == gruppeId )
 		gruppe->setAdmin( admin );
-	nachLogin->zFreundesListe()->zeigeEinladeKnopf( admin == loginKlient->getAccountId() );
+	nachLogin->zFreundesListe()->zeigeEinladeKnopf( admin == loginClient->getAccountId() );
 }
 
 void Spiele::kickAusGruppe( int gruppeId )
@@ -325,7 +325,7 @@ void Spiele::ladeSpielStatistik( int karteId )
 	sichtbar = 0;
 	alpha = 0;
 	jetzt = 6;
-	statistik->setSpielArt( infoKlient->getSpielId( karteId ) );
+	statistik->setSpielArt( infoClient->getSpielId( karteId ) );
 	setSichtbar( 1 );
 }
 

+ 4 - 4
KSGClient/NachLogin/Spiele/Statistik/SpielStatistik.cpp

@@ -42,7 +42,7 @@ void SpielStatistik::setSpielArt( int spielArt )
 		return;
 	this->spielArt = spielArt;
 	la->setSichtbar( 1 );
-	Text *name = infoKlient->getSpielName( spielArt );
+	Text *name = infoClient->getSpielName( spielArt );
 	if( !name )
 	{
 		this->spielArt = 0;
@@ -82,12 +82,12 @@ void SpielStatistik::setSpielArt( int spielArt )
 		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
 		return;
 	}
-	stat->setAccountId( loginKlient->getAccountId() );
+	stat->setAccountId( loginClient->getAccountId() );
 	stat->setBilder( bilder );
 	stat->setRückrufFunktionen( spielStatistikAddNachrichtF, spielStatistikAddChatF, spielStatistikAddFreundF, spielStatistikAccountAnsehenF, spielStatistikIstFreundF, this );
 	stat->setSchrift( schrift->getThis() );
 	stat->setBildschirm( hauptScreen->getThis() );
-	stat->setKlients( infoKlient->getThis(), spielKlient->getThis() );
+	stat->setKlients( infoClient->getThis(), spielClient->getThis() );
 	stat->bereit();
 }
 
@@ -189,7 +189,7 @@ void SpielStatistik::addChatF( int acc )
 
 void SpielStatistik::addFreundF( int acc )
 {
-	if( !chatKlient->freundesAnfrage( acc ) )
+	if( !chatClient->freundesAnfrage( acc ) )
 		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Freundesanfrage konnte nicht gesendet werden." ), new Text( "Ok" ) );
 	else
 		nachLogin->zNachrichtenListe()->addNachricht( new Text( "Freundesanfrage" ), new Text( "Es wurde eine Freundesanfrage an den Spieler gesendet." ), new Text( "Ok" ) );

+ 18 - 18
KSGClient/NachLogin/Spiele/Team Auswahl/TeamAuswahl.cpp

@@ -11,10 +11,10 @@
 TeamAuswahlListeSpieler::TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, Schrift *zSchrift, int accountId, int karteId )
 {
 	this->accountId = accountId;
-	Text *n = infoKlient->getSpielerName( accountId );
+	Text *n = infoClient->getSpielerName( accountId );
 	name = initTextFeld( 1, 1, 99, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, n->getText() );
 	n->release();
-	if( accountId == loginKlient->getAccountId() )
+	if( accountId == loginClient->getAccountId() )
 	{
 		teamAuswahl = new AuswahlBox();
 		teamAuswahl->setStyle( AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MultiStyled | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund );
@@ -32,7 +32,7 @@ TeamAuswahlListeSpieler::TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, Schr
 	else
 		team = initTextFeld( 100, 1, 150, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" );
 	Array< int > *statistik = new Array< int >();
-	infoKlient->getSpielStatistik( accountId, infoKlient->getSpielId( karteId ), statistik );
+	infoClient->getSpielStatistik( accountId, infoClient->getSpielId( karteId ), statistik );
 	punkte = initTextFeld( 250, 1, 80, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Punkte: " );
 	punkte->zText()->append( statistik->hat( 3 ) ? statistik->get( 3 ) : 0 );
 	spiele = initTextFeld( 330, 1, 80, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " );
@@ -56,7 +56,7 @@ TeamAuswahlListeSpieler::TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, Schr
 TeamAuswahlListeSpieler::~TeamAuswahlListeSpieler()
 {
 	name->release();
-	if( accountId == loginKlient->getAccountId() )
+	if( accountId == loginClient->getAccountId() )
 		teamAuswahl->release();
 	else
 		team->release();
@@ -72,7 +72,7 @@ TeamAuswahlListeSpieler::~TeamAuswahlListeSpieler()
 // nicht constant
 void TeamAuswahlListeSpieler::disable()
 {
-	if( accountId == loginKlient->getAccountId() )
+	if( accountId == loginClient->getAccountId() )
 		teamAuswahl->removeStyle( AuswahlBox::Style::Erlaubt );
 }
 
@@ -83,7 +83,7 @@ void TeamAuswahlListeSpieler::spielerTeamAuswahlE( AuswahlBox *obj, int p1, int
 	{
 		if( tmpTeamName->istGleich( "Zufällig" ) )
 		{
-			if( !spielKlient->spielErstelltTeamWechseln( 0 ) )
+			if( !spielClient->spielErstelltTeamWechseln( 0 ) )
 				obj->setAuswahl( obj->getEintragPos( teamName->getText() ) );
 		}
 		else
@@ -97,7 +97,7 @@ void TeamAuswahlListeSpieler::spielerTeamAuswahlE( AuswahlBox *obj, int p1, int
 					break;
 				}
 			}
-			if( !spielKlient->spielErstelltTeamWechseln( neuTeam ) )
+			if( !spielClient->spielErstelltTeamWechseln( neuTeam ) )
 				obj->setAuswahl( obj->getEintragPos( teamName->getText() ) );
 		}
 		obj->einklappen();
@@ -122,7 +122,7 @@ void TeamAuswahlListeSpieler::setTeam( Text *zName )
 
 void TeamAuswahlListeSpieler::setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe )
 {
-	if( accountId != loginKlient->getAccountId() )
+	if( accountId != loginClient->getAccountId() )
 		return;
 	if( erlaubt )
 	{
@@ -150,7 +150,7 @@ void TeamAuswahlListeSpieler::setTeamErlaubt( Text *zName, bool erlaubt, int tea
 
 bool TeamAuswahlListeSpieler::tick( double tickVal )
 {
-	if( accountId == loginKlient->getAccountId() )
+	if( accountId == loginClient->getAccountId() )
 		rend |= teamAuswahl->tick( tickVal );
 	else if( !team->zText()->istGleich( teamName->getText() ) )
 	{
@@ -164,7 +164,7 @@ bool TeamAuswahlListeSpieler::tick( double tickVal )
 
 void TeamAuswahlListeSpieler::doMausEreignis( MausEreignis &me )
 {
-	if( accountId == loginKlient->getAccountId() )
+	if( accountId == loginClient->getAccountId() )
 		teamAuswahl->doMausEreignis( me );
 }
 
@@ -174,7 +174,7 @@ void TeamAuswahlListeSpieler::render( int yOff, Bild &zRObj )
 		return;
 	rahmen->render( zRObj );
 	name->render( zRObj );
-	if( loginKlient->getAccountId() == accountId )
+	if( loginClient->getAccountId() == accountId )
 		teamAuswahl->render( zRObj );
 	else
 		team->render( zRObj );
@@ -477,7 +477,7 @@ TeamAuswahlListe::TeamAuswahlListe( Schrift *zSchrift, SpielerTeamStruktur *sts,
 		tmp->setTeam( i );
 		tmp->setName( sts->teamName->get( i ) );
 		tmp->setFarbe( sts->teamFarbe->hat( i ) ? sts->teamFarbe->get( i ) : 0 );
-		tmp->setMaxSpieler( sts->teamGröße->hat( i ) ? sts->teamGröße->get( i ) : 0 );
+		tmp->setMaxSpieler( sts->teamSize->hat( i ) ? sts->teamSize->get( i ) : 0 );
 		teams->set( tmp, i + 1 );
 	}
 	teamAnzahl = 1 + sts->teamAnzahl;
@@ -532,7 +532,7 @@ void TeamAuswahlListe::setTeamVonSpieler( int accountId, int spielerNummer )
 		for( int i = 0; i < sts->teamAnzahl; i++ )
 		{
 			min = max;
-			max += sts->teamGröße->get( i );
+			max += sts->teamSize->get( i );
 			if( spielerNummer - 1 >= min && spielerNummer - 1 < max )
 			{
 				int neuTeam = i + 1;
@@ -717,7 +717,7 @@ bool TeamAuswahlTimer::doMausEreignis( MausEreignis &me )
 	bestätigen->doMausEreignis( me );
 	if( !vera && me.verarbeitet && me.id == ME_RLinks )
 	{
-		if( spielKlient->spielErstelltTeamFertig() )
+		if( spielClient->spielErstelltTeamFertig() )
 		{
 			bestätigen->removeStyle( Knopf::Style::Erlaubt );
 			return 1;
@@ -842,14 +842,14 @@ void TeamAuswahlChat::doMausEreignis( MausEreignis &me )
 	int aktion = ( ver && me.verarbeitet && me.id == ME_RLinks ) ? 1 : 0;
 	if( aktion == 1 )
 	{ // Nachricht senden
-		if( spielKlient->spielErstelltChatNachricht( nachricht->zText()->getText() ) )
+		if( spielClient->spielErstelltChatNachricht( nachricht->zText()->getText() ) )
 		{
 			nachricht->setText( "" );
 			nachricht->setAuswahl( 0, 0 );
 			rend = 1;
 		}
 		else
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielKlient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
 	}
 }
 
@@ -860,14 +860,14 @@ void TeamAuswahlChat::doTastaturEreignis( TastaturEreignis &te )
 	int aktion = ( ver && te.verarbeitet && te.id == TE_Release && te.taste == T_Enter ) ? 1 : 0;
 	if( aktion == 1 )
 	{ // Nachricht senden
-		if( spielKlient->spielErstelltChatNachricht( nachricht->zText()->getText() ) )
+		if( spielClient->spielErstelltChatNachricht( nachricht->zText()->getText() ) )
 		{
 			nachricht->setText( "" );
 			nachricht->setAuswahl( 0, 0 );
 			rend = 1;
 		}
 		else
-			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielKlient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+			nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielClient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
 	}
 }
 

+ 4 - 4
KSGClient/NachLogin/Titel/TitelLeiste.cpp

@@ -354,16 +354,16 @@ void TitelLeiste::thread()
 {
 	while( 1 )
 	{
-		if( infoKlient )
+		if( infoClient )
 		{
             cs.lock();
 			Text *infoTxt = new Text( "" );
 			int typ = 0;
-			bool b = infoKlient->getInformationText( infoTxt, &typ );
+			bool b = infoClient->getInformationText( infoTxt, &typ );
 			if( b && infoTxt->getLength() )
 				info->setText( infoTxt->getThis() );
 			infoTxt = infoTxt->release();
-			int k = infoKlient->getKupfer();
+			int k = infoClient->getKupfer();
 			int s = k / 100;
 			int g = s / 100;
 			s = s % 100;
@@ -393,7 +393,7 @@ void TitelLeiste::thread()
 			gold->setText( gt );
 			silber->setText( st );
 			kupfer->setText( kt );
-			editor->setStyle( Knopf::Style::Sichtbar, infoKlient->hatRecht( 1 ) );
+			editor->setStyle( Knopf::Style::Sichtbar, infoClient->hatRecht( 1 ) );
             cs.unlock();
 		}
 		Sleep( 60 * 1000 );

+ 1 - 1
KSGClient/NachLogin/UpdateGUI/UpdateGUI.cpp

@@ -111,7 +111,7 @@ void UpdateGUI::thread()
 {
 	int dgId = dg;
 	if( spielId )
-		dgId = infoKlient->getDateiGruppeIdVonSpiel( spielId );
+		dgId = infoClient->getDateiGruppeIdVonSpiel( spielId );
 	Text err;
 	if( !p->update( dgId, &updateAbbrechen, updateFortschritt->getThis(), updateStatus->getThis(), &err ) )
 	{

+ 308 - 0
KSGClient/Netzwerk/ChatMessageProcessor.cpp

@@ -0,0 +1,308 @@
+#include "ChatMessageProcessor.h"
+#include "../Global/Variablen.h"
+
+ChatMessageProcessor::ChatMessageProcessor()
+    : Thread()
+{
+    ref = 1;
+    start();
+}
+
+void ChatMessageProcessor::thread()
+{
+    KSGClient::ChatServerNachricht msg;
+    while( chatClient && chatClient->istVerbunden() && chatClient->getNextMessage( msg ) )
+    {
+        switch( msg.type )
+        {
+        case 0: // verbindung getrennt
+            return;
+        case 1: // kick
+            loginClient->trenne( 0 );
+            infoClient->trenne( 0 );
+            chatClient->trenne( 0 );
+            cmProcessor = cmProcessor->release();
+            aktion = 4;
+            break;
+        case 2: // Server Ausgelastet
+            aktion = 1;
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+            {
+                hauptScreen->lock();
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Server Ausgelastet" ),
+                                                              new Text( "Der Chat Server ist derzeit ausgelastet. Es wird versucht auf einen anderen Server auszuweichen." ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                hauptScreen->unlock();
+            }
+            break;
+        case 3: // Fehler
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg.message.getThis(), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            hauptScreen->unlock();
+            break;
+        case 4: // Chat Nachricht
+            if( nachLogin && nachLogin->zChatLeiste() )
+            {
+                hauptScreen->lock();
+                nachLogin->zChatLeiste()->chatNachricht( msg.account, msg.message );
+                hauptScreen->unlock();
+            }
+            break;
+        case 5: // Spiel Einladung
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+            {
+                int karteId = infoClient->getGruppenKarteId( msg.gruppe );
+                int spielId = infoClient->getSpielId( karteId );
+                Text *spiel = infoClient->getSpielName( spielId );
+                Text *karte = infoClient->getKarteName( karteId );
+                Text *name = infoClient->getSpielerName( msg.account );
+                Text *titel = new Text( "Spiel Einladung" );
+                Text *nachricht = new Text( "Von: " );
+                nachricht->append( name );
+                nachricht->append( "\nSpiel: " );
+                nachricht->append( spiel );
+                nachricht->append( "\nKarte: " );
+                nachricht->append( karte );
+                SpielEinladungParam *param = new SpielEinladungParam();
+                param->gruppeId = msg.gruppe;
+                param->vonAccount = msg.account;
+                hauptScreen->lock();
+                nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ), NachrichtType::spielEinladung, param );
+                hauptScreen->unlock();
+            }
+            break;
+        case 6: // Account Status ändert sich
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+                nachLogin->zFreundesListe()->setStatus( msg.account, msg.message );
+            hauptScreen->unlock();
+            break;
+        case 7: // Account Name ändert sich
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+                nachLogin->zFreundesListe()->setName( msg.account, msg.message );
+            hauptScreen->unlock();
+            break;
+        case 8: // kein Freund mehr
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+                nachLogin->zFreundesListe()->removeMember( msg.account );
+            hauptScreen->unlock();
+            break;
+        case 9: // Freundesanfrage
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+            {
+                Text *titel = new Text( "Freundeseinladung" );
+                Text *nachricht = new Text( "" );
+                nachricht->append( infoClient->getSpielerName( msg.account ) );
+                nachricht->append( " möchte sich mit dir befreunden." );
+                int *accountId = new int;
+                *accountId = msg.account;
+                hauptScreen->lock();
+                if( nachLogin && nachLogin->zNachrichtenListe() )
+                {
+                    nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ),
+                                                                  NachrichtType::freundEinladung, (void*)accountId );
+                }
+                hauptScreen->unlock();
+            }
+            break;
+        case 0xA: // Neuer Freund
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+                nachLogin->zFreundesListe()->addMember( msg.account );
+            hauptScreen->unlock();
+            break;
+        case 0xB: // Freundesanfrage abgelehnt
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+            {
+                Text *titel = new Text( "Freundeseinladung Abgelehnt" );
+                Text *nachricht = new Text( "" );
+                nachricht->append( infoClient->getSpielerName( msg.account ) );
+                nachricht->append( " hat deine Freundesanfrage abgelehnt." );
+                hauptScreen->lock();
+                nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                hauptScreen->unlock();
+            }
+            break;
+        case 0xC: // Einladung zum Chatroom
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+            {
+                Text *titel = new Text( "Chatroom Einladung" );
+                Text *nachricht = new Text( "" );
+                nachricht->append( infoClient->getSpielerName( msg.account ) );
+                nachricht->append( " lädt dich dazu ein das Chatroom '" );
+                nachricht->append( infoClient->getChatroomName( msg.chatroom ) );
+                nachricht->append( "' zu betreten." );
+                ChatroomEinladungParam *param = new ChatroomEinladungParam();
+                param->chatroomId = msg.chatroom;
+                param->vonAccount = msg.account;
+                nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "betreten" ), new Text( "ablehnen" ), NachrichtType::chatroomEinladung, param );
+            }
+            break;
+        case 0xD: // Einladung zum Chatroom abgelehnt
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+            {
+                Text *titel = new Text( "Chatroom Einladung Abgelehnt" );
+                Text *nachricht = new Text( "" );
+                nachricht->append( infoClient->getSpielerName( msg.account ) );
+                nachricht->append( " möchte dem Chatroom '" );
+                nachricht->append( infoClient->getChatroomName( msg.chatroom ) );
+                nachricht->append( "' nicht beitreten." );
+                hauptScreen->lock();
+                nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                hauptScreen->unlock();
+            }
+            break;
+        case 0xE: // Spieler betritt Chatroom
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
+                nachLogin->zChatLeiste()->addSpieler( msg.chatroom, msg.account );
+            hauptScreen->unlock();
+            break;
+        case 0xF: // Chatroom Nachricht
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
+                nachLogin->zChatLeiste()->chatroomNachricht( msg.chatroom, msg.account, msg.message );
+            hauptScreen->unlock();
+            break;
+        case 0x10: // Spieler verlässt Chatroom
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
+                nachLogin->zChatLeiste()->removeSpieler( msg.chatroom, msg.account );
+            hauptScreen->unlock();
+            break;
+        case 0x11: // Freunde
+        {
+            char freundeAnzahl = msg.ids.getEintragAnzahl();
+            for( int i = 0; i < freundeAnzahl; i++ )
+            {
+                if( nachLogin )
+                {
+                    while( !nachLogin->zFreundesListe() )
+                    {
+                        Sleep( 50 );
+                    }
+                    hauptScreen->lock();
+                    nachLogin->zFreundesListe()->addMember( msg.ids.get( i ) );
+                    hauptScreen->unlock();
+                }
+            }
+            break;
+        }
+        case 0x12: // Spieler im Chatroom
+        {
+            char anzahl = msg.ids.getEintragAnzahl();
+            for( char i = 0; i < anzahl; i++ )
+            {
+                hauptScreen->lock();
+                if( nachLogin && nachLogin->zChatLeiste() )
+                    nachLogin->zChatLeiste()->addSpieler( msg.chatroom, msg.ids.get( i ) );
+                hauptScreen->unlock();
+            }
+            break;
+        }
+        case 0x13: // Freund online
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zFreundesListe() )
+                nachLogin->zFreundesListe()->setOnline( msg.account, 1 );
+            hauptScreen->unlock();
+            break;
+        case 0x14: // Freund offline
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zFreundesListe() )
+                nachLogin->zFreundesListe()->setOnline( msg.account, 0 );
+            hauptScreen->unlock();
+            break;
+        case 0x15: // Chatroom Admin
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
+                nachLogin->zChatLeiste()->setChatroomAdmin( msg.account );
+            hauptScreen->unlock();
+            break;
+        case 0x16: // Chatroom Kick
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zChatLeiste() )
+                nachLogin->zChatLeiste()->removeChat( 0, msg.chatroom );
+            hauptScreen->unlock();
+            break;
+        case 0x17: // Spieler betritt Gruppe
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->spielerBetrittGruppe( msg.gruppe, msg.account );
+            break;
+        case 0x18: // Spieler verlässt Gruppe
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->spielerVerlässtGruppe( msg.gruppe, msg.account );
+            break;
+        case 0x19: // gruppe Nachricht
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->gruppeNachricht( msg.gruppe, msg.message );
+            break;
+        case 0x1A: // gruppe Angemeldet
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->gruppeAnmelden( msg.gruppe );
+            break;
+        case 0x1B: // gruppe Abgemeldet
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->gruppeAbmelden( msg.gruppe );
+            break;
+        case 0x1C: // gruppe Spiel starten
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->setGruppeSpielStarten( msg.gruppe, msg.account == 1 );
+            break;
+        case 0x1D: // kick aus Gruppe
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->kickAusGruppe( msg.gruppe );
+            break;
+        case 0x1E: // gruppe Admin
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->setGruppeAdmin( msg.gruppe, msg.account );
+            break;
+        case 0x1F: // gruppe Einladung abgelehnt
+                if( nachLogin && nachLogin->zSpielenFenster() )
+                    nachLogin->zSpielenFenster()->gruppeEinadungAbgelehnt( msg.gruppe, msg.account );
+            break;
+        case 0x20: // SpielServer Verbindungs Anfrage
+            if( smProcessor )
+                smProcessor = smProcessor->release();
+            if( spielClient )
+                spielClient = spielClient->release();
+            spielClient = msg.client;
+            spielClient->verbinde();
+            smProcessor = new SpielMessageProcessor();
+            break;
+        case 0x21: // Gruppe Einladung abgebrochen
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->gruppeEinladungAbgebrochen( msg.gruppe, msg.account );
+            break;
+        case 0x22: // Gruppe Einladung hinzufügen
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->gruppeEinladungNeu( msg.gruppe, msg.account );
+            break;
+        default: // Unbekannte Servernachricht
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+            {
+                hauptScreen->lock();
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                              new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                hauptScreen->unlock();
+            }
+            break;
+        }
+    }
+}
+
+ChatMessageProcessor *ChatMessageProcessor::getThis()
+{
+    ref++;
+    return this;
+}
+
+ChatMessageProcessor *ChatMessageProcessor::release()
+{
+    if( !--ref )
+        delete this;
+    return 0;
+}

+ 16 - 0
KSGClient/Netzwerk/ChatMessageProcessor.h

@@ -0,0 +1,16 @@
+#pragma once
+
+#include <Thread.h>
+
+using namespace Framework;
+
+class ChatMessageProcessor : public Thread
+{
+private:
+    int ref;
+public:
+    ChatMessageProcessor();
+    void thread() override;
+    ChatMessageProcessor *getThis();
+    ChatMessageProcessor *release();
+};

+ 0 - 562
KSGClient/Netzwerk/KSGKlient.h

@@ -1,562 +0,0 @@
-#ifndef KSGKlient_H
-#define KSGKlient_H
-
-#include "KSGKlientV.h"
-#include "../Strukturen/Strukturen.h"
-#include <Bild.h>
-#include <GSLSoundV.h>
-#include "Critical.h"
-
-using namespace Network;
-using namespace Framework;
-
-#define LOCK( cs ) EnterCriticalSection( cs )
-#define UNLOCK( cs ) LeaveCriticalSection( cs )
-
-struct AHDaten;
-
-class LoginKlient
-{
-private:
-	Klient *klient;
-	bool verbunden;
-	char *fehler;
-	bool brauchKick;
-	int klientId;
-	int accountId;
-	int ref;
-	Critical cs;
-
-public:
-	// Konstruktor 
-	LoginKlient();
-	// Destruktor 
-	~LoginKlient(); // wenn verbunden, dann trennen
-	// nicht constant
-	bool verbinde(); // verbindet sich mit dem Login Server
-	int login( const char *name, const char *pass ); // gibt bei Erfolg 1 zurück
-	bool kick( const char *geheim );
-	bool logout(); // logt den Account aus
-	bool keepAlive(); // Erhält die Verbindung aufrecht
-	bool trenne(); // trennt sich von dem Login Server
-	void setLetzterFehler( char *err ); // setzt den letzten Fehler
-	// constant
-	bool istVerbunden() const; // prüft, ob mit Login Server verbunden
-	int getAccountId() const; // gibt die AccountId zurück
-	char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	LoginKlient *getThis();
-	LoginKlient *release();
-};
-
-class RegisterKlient
-{
-private:
-	Klient *klient;
-	bool verbunden;
-	char *fehler;
-	bool brauchSchlüssel;
-	int klientId;
-	int ref;
-	Critical cs;
-
-public:
-	// Konstruktor 
-	RegisterKlient();
-	// Destruktor
-	~RegisterKlient(); // wenn verbunden, dann trennen
-	// nicht constant
-	bool verbinde(); // verbindet ich mit dem Register Server
-	bool accountErstellen( const char *name, const char *pass, const char *geheim, const char *eMail, unsigned short jahr, char monat, char tag ); // erstellt den Account
-	bool accountLöschen( const char *name, const char *pass, const char *geheim ); // löscht den Account
-	int accountBestätigen( const char *name, const char *pass ); // account Bestätigung fortsetzen
-	bool bestätigen( const char *schlüssel ); // bestätigt den Vorgang mit Schüssel
-	void eMailErneutSenden(); // E-Mail nochmal senden
-	void später(); // bestätigung später abclose
-	void abbrechen(); // bricht den Vorgang ab
-	bool passwortÄndern( const char *name, const char *pass, const char *geheim, const char *nPass ); // ändert das Passwort
-	bool eMailÄndern( const char *name, const char *pass, const char *geheim, const char *nEMail ); // ändert die E-Mail Addresse
-	bool geheimnisÄndern( const char *name, const char *pass, const char *geheim, const char *nGeheim ); // ändert das Geheimnis
-	bool nameVergessen( const char *pass, const char *geheim ); // schickt den Account Namen an die Bekannte E-Mail Addresse
-	bool passwortVergessen( const char *name, const char *geheim ); // schickt das Account Passwort an die Bekannte E-Mail Addresse
-	bool geheimnisVergessen( const char *name, const char *pass ); // schickt das Account Geheimnis an die Bekannte E-Mail Addresse
-	bool eMailVergessen( const char *name, const char *pass, const char *geheim, char **eMail ); // gibt die E-Mail Addresse des Accounts zurück
-	bool keepAlive(); // Erhält die Verbindung aufrecht
-	bool trenne(); // trennt sich von dem Register Server
-	// constant
-	bool istVerbunden() const; // prüft, ob mit Register Server verbunden
-	bool vorgangBrauchBestätigung() const; // prüft, ob eine Bestätigung notwendig ist
-	char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	RegisterKlient *getThis();
-	RegisterKlient *release();
-};
-
-class InformationKlient : public InformationKlientV
-{
-private:
-	Klient *klient;
-	bool verbunden;
-	Text *fehler;
-	int klientId;
-	int ref;
-	Critical cs;
-
-public:
-	// Konstruktor
-	InformationKlient();
-	// Destruktor
-	~InformationKlient(); // wenn verbunden, dann trennen
-	// nicht constant
-	virtual bool verbinde() override; // verbindet ich mit dem Informaion Server
-    virtual bool getInformationText( Text *txt, int *typ ) override; // fragt nach Informationstext
-	virtual bool istSpielErlaubt( int spielId ) override; // fragt, ob das entsprechende Spiel vom Server gesperrt wurde
-	virtual bool istKarteErlaubt( int karteId ) override; // fragt, ob die entsprechende Karte vom Server gesperrt wurde
-	virtual int getKarteId( char *name ) override; // fragt nach der Id einer Karte
-	virtual int getSpielId( char *name ) override; // fragt nach der id eines Spiels
-	virtual Text *getSpielerName( int accountId ); // fragt nach dem Namen eines Accounts
-    virtual bool getSpielStatistik( int accountId, int spielId, Array< int > *werte ) override; // fragt nach der Spiel Statistik eines Accounts
-	virtual Text *getKarteName( int karteId ) override; // fragt nach dem Namen einer Karte
-	virtual Text *getSpielName( int spielId ) override; // fragt nach dem Namen einer Spielart
-    virtual Text *getChatroomName( int chatroomId ) override; // fragt nach dem Namen eines Chatrooms
-    virtual int getSpielId( int karteId ) override; // fragt zu welcher Spielart die Karte gehört
-    virtual int getAccountId( char *name ) override; // gibt die Id des Accounts zurück
-    virtual int getChatroomId( char *name ) override; // gibt die Id des Chatrooms zurück
-    virtual int getGruppenKarteId( int gruppenId ) override; // gibt die karten Id der gruppe zurück
-    virtual bool getGruppeSpielerHinzufügen( int gruppeId ) override; // gibt die Spieler hinzufügen Funktion der Gruppe zurück
-    virtual int getGruppeAdminId( int gruppeId ) override; // gibt den Gruppen Administrator zurück
-    virtual int getSpielerPunkte( int accountId, int spielId ) override; // gibt die Punkte eines Spielers zurück
-    virtual Array< int > *getAccountSpielArtListe() override; // gibt eine Liste mit gekauften Spielen zurück
-    virtual int getSpielVersion( int spielId ) override; // gibt die neuste Version eines Spiels zurück
-    virtual int getKupfer() override; // gibt das Kupfer des Accounts zurück
-    virtual int getDateiGruppeIdVonSpiel( int spielId ) override; // Gibt die Dateigruppe eines Spieles zurück
-    virtual Text *getDateiGruppePfad( int dgId ) override; // Gibt den Dateigruppen Pfad zurück
-    virtual Array< int > *getAccountKarteListe( int spielId ) override; // gibt eine Liste mit gekauften Karten zurück
-    virtual int getDateiGruppeIdVonPfad( char *pfad ) override; // Gibt die Dateigruppe eines Pfades zurück
-    virtual int getDateiGruppeVersion( int dg ) override; // gibt die neuste Version einer Dateigruppe zurück
-	virtual int getSpielerListe( char *suche, int *seite, int *maxSeite, char sortSpalte, char rückwärts, 
-								 Array< int > *accounts, RCArray< Text > *name, RCArray< Text > *zuletztOnline,
-                                 RCArray< Text > *letztesSpiel, RCArray< Text > *letzteKarte, RCArray< Text > *punkte ) override; // sucht nach Spielern
-	virtual bool getSpielerAktivität( int accId, RCArray< Text > *datum, Array< double > *stOnline, Array< double > *stGespielt, 
-                                      Array< int > *anzSpiele, Array< int > *anzGewonnen ) override; // ermittelt die aktivität eines Spielers
-    virtual int getAccountKarteSpiele( int account, int karte ) override; // Gibt zurück, wie oft ein Spieler eine Karte schon gespielt hat
-    virtual int getAccountKarteSpieleGewonnen( int account, int karte ) override; // Gibt zurück, wie oft ein Spieler eine Karte schon gewonnen hat
-	virtual bool hatAccountKarte( int account, int karte ) override; // Gibt zurück, ob ein Spieler die Karte im Besitz hat
-	virtual bool hatAccountSpiel( int account, int spiel ) override; // Gibt zurück, ob ein Spieler ein Spiel im Besitz hat
-    virtual Array< int > *getAccountKarteGespieltListe( int account, int spielId ) override; // gibt eine Liste mit Karten zurück, die von einem Spieler bereits gespielt wurden
-    virtual Array< int > *getAccountSpielGespieltListe( int account ) override; // gibt eine Liste mit Spielen zurück, die von einem Spieler bereits gespielt wurden
-    virtual bool getSpielPartnerListe( int account, Array< int > *spieler, Array< int > *karten, Array< int > *anzahl ) override; // Gibt eine Liste von Spiel Partnern eines Spielers zurück
-	virtual bool getStatistikListe( int account, int *seite, int *maxSeite, char sortSpalte, char rückwärts, 
-                                    RCArray< Array< int > > *werte, RCArray< Text > *namen ) override; // Gibt eine Liste mit Spiel Statistiken zurück
-    virtual AHDaten *getSpielHistorieDaten( int account ) override; // Gibt eine Liste mit den letzten 20 Spielen zurück
-    virtual bool getHistorieServer( int spielId, int *port, Text *ip ) override; // sucht nach dem Historie Server von einem Spiel
-    virtual bool keepAlive() override; // Erhält die Verbindung aufrecht
-    virtual bool hatRecht( int recht ) override; // Prüft ob Berechtigung vorhanden
-	virtual int getKartenListe( char *filter, char sortSpalte, char absteigend, Array< int > *kId, RCArray< Text > *kName, RCArray< Text > *sName,
-                                Array< int > *kupfer, Array< int > *verkauft, Array< int > *maxSpieler ) override; // Gibt eine Liste mit Karten zurück
-	virtual bool getEditorServer( int karteId, int *port, Text *ip ) override; // sucht nach dem Editor Server von einer Karte
-    virtual bool getKartenServer( int karteId, int *port, Text *ip ) override; // sucht nach dem Karten Server von einer Karte
-    virtual bool trenne() override; // trennt sich von dem Informaion Server
-	// constant
-    virtual bool istVerbunden() const override; // prüft, ob mit Informaion Server verbunden
-    virtual char *getLetzterFehler() const override; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	virtual InformationKlientV *getThis() override;
-	virtual InformationKlientV *release() override;
-};
-
-class ChatKlient : private Thread
-{
-private:
-	Klient *senden;
-	Klient *empfangen;
-	bool verbunden;
-	Text *fehler;
-	int klientId;
-	int ref;
-	Critical cs;
-
-public:
-	// Konstruktor
-	ChatKlient();
-	// Destruktor 
-	~ChatKlient();
-	// nicht constant
-	bool verbinde(); // verbindet ich mit dem Chat Server
-	bool chatNachricht( int zuAccount, const char *nachricht ); // sendet eine Nachricht zu einem Account
-	bool accountNameÄndern( const char *name ); // ändert den Account Namen
-	bool freundschaftBeenden( int accountId ); // beendet die Freundschaft mit einem Account
-	bool freundesAnfrage( int accountId ); // sendet eine Freundesanfragezu einem Account
-	bool freundesAnfrageBeantworten( int accountId, bool ja ); // beantwortet eine Freundesanfrage
-	int chatroomErstellen( const char *name ); // erstellt ein chatroom
-	bool chatroomEinladung( int accountId, int chatroomId ); // verschickt eine Einladung zu einem Chatroom
-	bool chatroomEinladungAblehnen( int accountId, int chatroomId ); // Einladung zum Chatroom wird abgelehnt
-	bool chatroomBetreten( int chatroomId ); // betritt ein chatroom
-	bool chatroomNachricht( int chatroomId, const char *nachricht ); // chatroom Nachricht senden
-	bool chatroomVerlassen( int chatroomId ); // verlässt chatroom
-	bool chatroomKick( int chatroomId, int accountId ); // kickt Spieler aus Chatroom( nur wenn admin )
-	bool freundesListeAnfragen(); // fragt nach allen freunden
-	bool chatNachrichtAnfrage(); // fragt nach chat nachrichten in abwesenheit
-	bool keepAlive(); // Erhält die Verbindung aufrecht
-	bool trenne(); // trennt sich von dem Chat Server
-	virtual void thread(); // empfangen von Nachrichten
-	// constant
-	bool istVerbunden() const; // prüft, ob mit Chat Server verbunden
-	char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	ChatKlient *getThis();
-	ChatKlient *release();
-};
-
-class AnmeldungKlient
-{
-private:
-	Klient *klient;
-	bool verbunden;
-	Text *fehler;
-	int klientId;
-	bool spielHistorie;
-	int ref;
-	Critical cs;
-
-public:
-	// Konstruktor
-	AnmeldungKlient();
-	// Destruktor
-	~AnmeldungKlient();
-	// nicht constant
-	bool verbinde(); // verbindet ich mit dem Chat Server
-	int gruppeErstellen( int karteId ); // erstellt eine gruppe
-	bool gruppeBetreten( int gruppeId, Array< int > *mitglieder, int *anzahl ); // betritt Gruppe
-	bool gruppeVerlassen( int gruppeId ); // Verlässt die gruppe
-	bool gruppeAnmelden( int gruppeId ); // meldet gruppe an
-	bool gruppeAbmelden( int gruppeId ); // meldet gruppe ab
-	bool gruppeSpielerEinladen( int accountId, int gruppeId ); // läht Spieler ein die Gruppe zu betreten
-	bool gruppeEinladungAbbrechen( int accountId, int gruppeId ); // bricht einladung ab
-	bool gruppeEinladungAblehnen( int gruppeId ); // Einladung zur Gruppe ablehnen
-	bool kickSpielerAusGruppe( int accountId, int gruppeId ); // wirft Spieler aus Gruppe
-	bool gruppeSpielStarten( int gruppeId, bool spielStarten ); // startet das Spiel der Gruppe
-	bool gruppeNachricht( int gruppeId, char *nachricht ); // nachricht an gruppe senden
-	bool anmelden( int karteId ); // betritt warteschlange
-	bool abmelden(); // verlässt warteschlange
-	bool keepAlive(); // Erhält die Verbindung aufrecht
-	bool trenne(); // trennt sich von dem Chat Server
-	// constant
-	bool istVerbunden() const; // prüft, ob mit Chat Server verbunden
-	char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	AnmeldungKlient *getThis();
-	AnmeldungKlient *release();
-};
-
-class SpielKlient : public SpielKlientV
-{
-private:
-	Klient *senden;
-	Klient *empfangen;
-	bool verbunden;
-	Text *fehler;
-	int klientId;
-	int ref;
-	Critical cs;
-
-public:
-	// Konstruktor
-	SpielKlient();
-	// Destruktor
-	~SpielKlient();
-	// nicht constant
-	virtual bool verbinde( unsigned short port, char *ip ); // verbindet ich mit dem Chat Server
-	virtual bool spielErstelltAnnehmen(); // klient ist bereit dem erstellten Spiel beizutreten
-	virtual bool spielErstelltAblehnen(); // klient ist nicht bereit dem erstellten Spiel beizutreten
-	virtual bool spielErstelltTeamWechseln( int team ); // wechselt das Team
-	virtual bool spielErstelltTeamFertig(); // bestetigt die Team Auswahl
-	virtual bool spielErstelltChatNachricht( char *nachricht ); // sendet eine Chat Nachricht an die mitglieder des erstellten Spiels
-	virtual bool bereitZumLaden(); // Klient ist bereit zum Laden
-	virtual bool setLadenProzent( int prozent ); // Setzt den Fortschritt des Klients
-	virtual bool bereitZumSpiel(); // Klient ist bereit zum Spiel
-	virtual bool spielNachricht( short län, char *bytes ); // Nachricht während des Spiels
-	virtual bool statistikNachricht( short län, char *bytes ); // Nachricht während der Statistik
-	virtual bool keepAlive(); // Erhält die Verbindung aufrecht
-	virtual bool trenne(); // trennt sich von dem Chat Server
-	virtual void thread(); // empfangen von Nachrichten
-	// constant
-	virtual bool istVerbunden() const; // prüft, ob mit Chat Server verbunden
-	virtual char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	virtual SpielKlientV *getThis();
-	virtual SpielKlientV *release();
-};
-
-class ShopKlient
-{
-private:
-	Klient *klient;
-	bool verbunden;
-	Text *fehler;
-	int klientId;
-	int ref;
-    Critical cs;
-
-    bool verbinde( int port, char *ip ); // verbindet sich mit vorgegebenem Server 
-
-public:
-	// Konstruktor
-	ShopKlient();
-	// Destruktor
-	~ShopKlient();
-	// nicht constant
-	bool verbinde(); // verbindet sich mit dem Shop Server
-	Array< int > *suchSpiele( const char *suche ); // sucht nach Spielen
-	bool ladeSpielTitel( int id ); // läd Titelbild des Spieles herunter
-	bool ladeSpielSeite( int id ); // läd Seite des Spieles herunter
-	int getSpielBesitzStatus( int id ); // 0 = nicht im Besitz, 1 = Testversion, 2 = gekauft
-	int getSpielTestversion( int id ); // gibt die Anzahl der verbleibenden Spiele zurück
-	int istSpielErwerbbar( int id ); // 0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides
-	int getSpielPreis( int id, bool testVersion ); // gibt den Preis eines Spieles zurück
-	bool spielErwerben( int spielId, bool testVersion ); // Spiel kaufen
-	Array< int > *suchKarten( const char *suche, int spielId ); // sucht nach Karten
-	bool ladeKarteTitel( int id ); // läd Titelbild der Karte herunter
-	bool ladeKarteSeite( int id ); // läd Seite der Karte herunter
-	int getKarteBesitzStatus( int id ); // 0 = nicht im Besitz, 1 = Testversion, 2 = gekauft
-	int getKarteTestversion( int id ); // gibt die Anzahl der verbleibenden Spiele zurück
-	int istKarteErwerbbar( int id ); // prüft, ob die Karte erworben werden kann
-	int getKartePreis( int id, bool testVersion ); // gibt den Preis einer Karte zurück
-	bool karteErwerben( int karteId, bool testVersion ); // Karte kaufen
-	bool keepAlive(); // Erhält die Verbindung aufrecht
-	bool trenne(); // trennt sich von dem Shop Server
-	// constant
-	bool istVerbunden() const; // prüft, ob mit Shop Server verbunden
-	char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	ShopKlient *getThis();
-	ShopKlient *release();
-};
-
-class HistorieKlient
-{
-private:
-	Klient *klient;
-	Text *fehler;
-	int klientId;
-	int ref;
-	Critical cs;
-	// privat
-	bool verbinde( char *ip, int port ); // verbindet ich mit dem Historie Server
-	bool trenne(); // trennt sich von dem Historie Server
-
-public:
-	// Konstruktor
-	HistorieKlient();
-	// Destruktor
-	~HistorieKlient();
-	// nicht constant
-	bool downloadSpielHistorie( int spielId ); // läd Spiel Historie herunter
-	// constant
-	bool istVerbunden() const; // prüft, ob mit Historie Server verbunden
-	char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	HistorieKlient *getThis();
-	HistorieKlient *release();
-};
-
-class NewsKlient
-{
-private:
-	Klient *klient;
-	bool verbunden;
-	Text *fehler;
-	int klientId;
-	int ref;
-	Critical cs;
-
-public:
-	// Konstruktor
-	NewsKlient();
-	// Destruktor
-	~NewsKlient();
-	// nicht constant
-	bool verbinde(); // verbindet ich mit dem News Server
-	bool ladeSeite( char *name );
-	bool keepAlive(); // Erhält die Verbindung aufrecht
-	bool trenne(); // trennt sich von dem News Server
-	// constant
-	bool istVerbunden() const; // prüft, ob mit News Server verbunden
-	char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	NewsKlient *getThis();
-	NewsKlient *release();
-};
-
-class EditorKlient : public EditorKlientV
-{
-private:
-	Klient *klient;
-	bool verbunden;
-	Text *fehler;
-	int klientId;
-	int ref;
-	Critical cs;
-
-public:
-	// Konstruktor
-	EditorKlient();
-	// Destruktor
-	~EditorKlient();
-	// nicht constant
-	bool verbinde( unsigned short port, char *ip ) override; // verbindet ich mit dem Editor Server
-    bool karteErstellen( Text *zName, int spielArt ) override; // Erstellt eine neue Karte
-	bool ladeKarte( int id ) override; // lädt eine bestimmte Karte
-    int getAbbildListe( RCArray< Text > *name, RCArray< Zeit > *datum ) override; // gibt eine Liste mit Abbildern der geladenen Karte zurück
-    bool abbildErstellen( char *name ) override; // Erstellt ein neues Abbild der Karte
-    bool abbildLöschen( char *name ) override; // Löscht ein altes Abbild der Karte
-    bool abbildHerstellen( char *name ) override; // Stellt ein altes Abbild der Karte wieder her
-    bool veröffentlichen() override; // Veröffentlicht die Karte
-    bool shopSeiteVeröffentlichen() override; // Veröffentlicht die Shop Seite
-    bool ladeShopSeiteVorschau() override; // Läht die Vorschau der Shop Seite herrunter
-    bool ssDateiErstellen( char *name, int typ ) override; // Erstellt eine neue Shop Seiten Datei (typ:0=Ordner,1=Bild,2=Text)
-    bool ssOrdnerÖffnen( char *name ) override; // Öffnet einen Ordner der Shop Seite
-    Bild *ssBildLaden( char *datei, char *bild ) override; // Läht das ein Bild der Shop Seite
-    bool ssDateiLöschen( char *name ) override; // Löscht eine Datei der Shop Seite
-    Text *ssTextLaden( char *datei ) override; // Läd eine KSGS Datei der Shop Seite
-    bool ssTextSpeichern( char *datei, Text *zText ) override; // Spechert eine KSGS Datei der Shop Seite
-    bool ssBildLöschen( char *datei, char *bild ) override; // Löscht ein Bild der Shop Seite
-    bool ssBildSpeichern( char *datei, char *name, Bild *zBild ) override; // Speichert ein Bild einer ShopSeite
-    int ssGetDateiListe( RCArray< Text > *zList ) override; // Läd die Datei Liste der Shop Seite
-    int ssGetBildListe( char *name, RCArray< Text > *zList ) override; // Läd die Bild Liste einer Bild Datei der Shop Seite
-    bool getShopDaten( int &es, int &tp, int &vp ) override; // Läht die Shop Daten
-    bool setShopDaten( int es, int tp, int vp ) override; // Setzt die Shop Daten
-    Text *beschreibungLaden() override; // läht die Kartenbeschreibung
-    Bild *titelbildLaden() override; // läht das Titelbild
-    Bild *minimapLaden() override; // läht das Minimapbild
-    Bild *ladebildLaden() override; // läht das Ladebild
-    bool beschreibungSpeichern( Text *zText ) override; // speichert die Kartenbeschreibung
-    bool titelbildSpeichern( Bild *zBild ) override; // speichert das Titelbild
-    bool minimapSpeichern( Bild *zBild ) override; // speichert das Minimapbild
-    bool ladebildSpeichern( Bild *zBild ) override; // speichert das Ladebild
-    bool ladeTeamDaten( SpielerTeamStruktur *sts ) override; // läht die Team Daten
-    bool speicherTeamDaten( SpielerTeamStruktur *sts ) override; // speichert die Team Daten
-    bool deNeueDatei( char typ, Text *zName ) override; // DateienEditor: Erstellt neue Datei (typ: 0=ordner 1=bild 2=modell2d 3=sound
-    bool deOrdnerÖffnen( Text *zName ) override; // DateienEditor: Öffnet Ordner
-    Bild *deBildLaden( Text *zDatei, Text *zBild, FBalken *zF ) override; // DateienEditor: Bild laden
-    bool deDateiLöschen( Text *zName ) override; // DateienEditor: Löscht Datei
-    bool deBildLöschen( Text *zDatei, Text *zBild ) override; // DateienEditor: Löscht Bild aus Datei
-    bool deBildSpeichern( Text *zDatei, Text *zName, Bild *zBild, FBalken *zF ) override; // DateienEditor: Speichert Bild
-    int deGetDateiListe( RCArray< Text > *zNamen ) override; // DateienEditor: Datei Liste herunterladen
-    int deGetBildListe( Text *zDatei, RCArray< Text > *zNamen ) override; // DateienEditor: Liste mit in der Datei gespeicherten Bildern
-    int deGetModelListe( Text *zDatei, RCArray< Text > *zNamen ) override; // DateienEditor Liste mit in der Datei gespeicherten Modellen
-    int deGetSoundListe( Text *zDatei, RCArray< Text > *zNamen ) override; // DateienEditor: Liste mit in der Datei gespeicherten Tönen
-    bool deModelLöschen( Text *zDatei, Text *zModel ) override; // DateienEditor: Löscht Modell
-    bool deSoundLöschen( Text *zDatei, Text *zSound ) override; // DateienEditor: Löscht Ton
-    Model2DData *deModelLaden( Text *zDatei, Text *zModel, FBalken *zF ) override; // DateienEditor: läd ein Model herunter
-    GSL::GSLSoundV *deSoundLaden( Text *zDatei, Text *zSound, FBalken *zF ) override; // DateienEditor: läd Sound herunter
-    bool deModelSpeichern( Text *zDatei, Text *zModel, Model2DData *zData, FBalken *zF ) override; // DateienEditor: Speichert Modell
-    bool deSoundSpeichern( Text *zDatei, Text *zSound, GSL::GSLSoundV *zData, FBalken *zF ) override; // DateienEditor: Speichert Sound
-    int getVerkaufStatistik( Array< int > *verkauft, Array< int > *einkommen, Array< int > *gespielt ) override; // Gibt eine Verkaufsstatistik der letzten 30 Tage zurück
-    bool initEditor() override; // Initialisiert den Editor auf Serverseite
-	bool keepAlive() override; // Erhält die Verbindung aufrecht
-	bool trenne() override; // trennt sich von dem Editor Server
-    void lock() override;
-    void unlock() override;
-    Klient *zKlient() override; // gibt den Klient zurück
-	// constant
-	bool istVerbunden() const override; // prüft, ob mit Editor Server verbunden
-	char *getLetzterFehler() const override; // gibt den Letzten Fehlertext zuück
-	// Reference Counting
-	EditorKlientV *getThis() override;
-	EditorKlientV *release() override;
-};
-
-class KartenKlient
-{
-private:
-    Klient *klient;
-    bool verbunden;
-    Text *fehler;
-    int klientId;
-    int ref;
-    Critical cs;
-
-public:
-    // Konstruktor
-    KartenKlient();
-    // Destruktor
-    ~KartenKlient();
-    // nicht constant
-    bool verbinde( unsigned short port, char *ip ); // verbindet ich mit dem Karten Server
-    bool downloadKarte( int id ); // läd die Karte herunter
-    bool downloadKarteTitel( int id ); // läd das Titelbild einer Karte herunter
-    bool downloadKarteBeschreibung( int id ); // läd die Beschreibung einer Karte herunter
-    bool downloadKarteMinimap( int id ); // läd die Minimap einer Karte herunter
-    bool downloadKarteLadebild( int id ); // läd das Ladebild einer Karte herunter
-    bool keepAlive(); // Erhält die Verbindung aufrecht
-    bool trenne(); // trennt sich von dem Editor Server
-    // constant
-    bool istVerbunden() const; // prüft, ob mit Editor Server verbunden
-    char *getLetzterFehler() const; // gibt den Letzten Fehlertext zuück
-    // Reference Counting
-    KartenKlient *getThis();
-    KartenKlient *release();
-};
-
-class MinigameClient : public MinigameKlientV
-{
-private:
-    Klient *klient;
-    bool verbunden;
-    char *fehler;
-    int klientId;
-    int ref;
-    bool needCapture;
-    Critical cs;
-
-public:
-    // Konstruktor
-    MinigameClient();
-    // Destruktor
-    ~MinigameClient();
-    // verbindet ich mit dem Minigame Server
-    bool verbinde() override; 
-    // Gibt die liste mit allen Optionen zu einem Minigame zurück, zu denen es Welt beste Scores gibt
-    //  mName: Der Name des Minigames
-    //  zOptionList: Ein Zeiger auf ein Array von Texten, in denen die Optionen gespeichert werden
-    //  return: Anzahl der Optionen
-    int getMinigameOptionList( char *mName, RCArray< Text > *zOptionList ) override;
-    // Gibt eine Liste mit den Weltbesten Scores zurück
-    //  mName: Der Name des Minigames
-    //  zScore: (rückgabe) Ein Array von Scores
-    //  zPlayerList: (rückgabe) Ein Array von Spielernamen, die die Scores erreicht haben.
-    //  zOptionList: (rückgabe) Ein Array von Optionen, die beim erreichen der Scores aktiv waren.
-    //  return: Anzahl der Scores
-    int getMinigameBestscoreList( char *mName, Array< int > *zScore, RCArray< Text > *zPlayerList, RCArray< Text > *zOptionList ) override;
-    // Gibt den Welt bestscore zu einem Bestimmten Minigame mit bestimmten Optionen zurück.
-    //  mName: Der Name des Minigames
-    //  oName: Die Optionen
-    //  zPlayer: (rückgabe) Der Spielername, der den Score erreicht hat
-    //  return: Der Score der erreicht wurde
-    int getMinigameOptionBestscore( char *mName, char *oName, Text *zPlayer ) override;
-    // Meldet die Beendigung eines Minigames
-    //  mName: Der Name des Minigames
-    //  oName: Die Optionen mit denen gespielt wurde
-    //  score: Der Erreichte Score
-    //  return: 0: Im Falle eines Fehlers, 1: Im Falle eines Erfolgs, 2: Falls ein Game Capture hochgeladen werden muss
-    int reportEndOfGame( char *mName, char *oName, int score ) override;
-    // Lädt ein Game Capture hoch
-    //  zCapture: Ein Zeiger auf die Capture Datei
-    //  return: 1, falls erfolgreich
-    bool uploadGameCapture( Datei *zCapture ) override;
-    // Lädt ein Game Capture herunter
-    //  mName: Der Name des Minigames
-    //  oName: Die Optionen
-    //  return: Ein Zeiger auf die Datei mit dem Capture
-    Datei *downloadGameCapture( char *mName, char *oName ) override;
-    bool keepAlive() override; // Erhält die Verbindung aufrecht
-    bool trenne() override; // trennt sich von dem Minigame Server
-    bool istVerbunden() const override; // prüft, ob mit Editor Server verbunden
-    char *getLetzterFehler() const override; // gibt den Letzten Fehlertext zuück
-    // Reference Counting
-    MinigameKlientV *getThis();
-    MinigameKlientV *release();
-};
-
-#endif

+ 11 - 12
KSGClient/Netzwerk/KSGServer.cpp

@@ -7,17 +7,16 @@ using namespace Framework;
 
 char *getMainServerIp()
 {
-	InitDatei *dat = new InitDatei( "data/optionen.ini" );
-	dat->laden();
-	Text *ipT = dat->getWert( "ServerIP" );
-	dat->release();
-	int län = ipT->getLength();
-	char *ret = new char[ län + 1 ];
-	ret[ län ] = 0;
-	for( int i = 0; i < län; i++ )
-		ret[ i ] = ipT->getText()[ i ];
-	ipT->release();
-	return ret;
+    Datei dat;
+    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();
+    return ip;
 }
 
 unsigned short getMainServerPort()
@@ -47,7 +46,7 @@ char getSchl
 {
 	char län = 0;
 	Datei *dat = new Datei();
-	dat->setDatei( "data/tmp/schlüssel.netw" );
+	dat->setDatei( "data/tmp/crypt.key" );
 	dat->open( Datei::Style::lesen );
 	dat->lese( &län, 1 );
 	*schlüssel = new char[ län ];

+ 18 - 20
KSGClient/Netzwerk/KeepAlive.cpp

@@ -15,26 +15,24 @@ void KeepAliveTh::thread()
 {
 	while( !exit )
 	{
-		if( loginKlient && loginKlient->istVerbunden() )
-			loginKlient->keepAlive();
-		if( registerKlient && registerKlient->istVerbunden() )
-			registerKlient->keepAlive();
-		if( infoKlient && infoKlient->istVerbunden() )
-			infoKlient->keepAlive();
-		if( chatKlient && chatKlient->istVerbunden() )
-			chatKlient->keepAlive();
-		if( anmeldungKlient && anmeldungKlient->istVerbunden() )
-			anmeldungKlient->keepAlive();
-		if( spielKlient && spielKlient->istVerbunden() )
-			spielKlient->keepAlive();
-		if( shopKlient && shopKlient->istVerbunden() )
-			shopKlient->keepAlive();
-		if( newsKlient && newsKlient->istVerbunden() )
-            newsKlient->keepAlive();
-        if( editorKlient && editorKlient->istVerbunden() )
-            editorKlient->keepAlive();
-        if( kartenKlient && kartenKlient->istVerbunden() )
-            kartenKlient->keepAlive();
+		if( loginClient && loginClient->istVerbunden() )
+			loginClient->keepAlive();
+		if( registerClient && registerClient->istVerbunden() )
+			registerClient->keepAlive();
+		if( infoClient && infoClient->istVerbunden() )
+			infoClient->keepAlive();
+		if( chatClient && chatClient->istVerbunden() )
+			chatClient->keepAlive();
+		if( anmeldungClient && anmeldungClient->istVerbunden() )
+			anmeldungClient->keepAlive();
+		if( spielClient && spielClient->istVerbunden() )
+			spielClient->keepAlive();
+		if( shopClient && shopClient->istVerbunden() )
+			shopClient->keepAlive();
+		if( newsClient && newsClient->istVerbunden() )
+            newsClient->keepAlive();
+        if( editorClient && editorClient->istVerbunden() )
+            editorClient->keepAlive();
         if( minigameClient && minigameClient->istVerbunden() )
             minigameClient->keepAlive();
 		for( int i = 0; i < 300 && !exit; i++ )

+ 0 - 44
KSGClient/Netzwerk/Keys.h

@@ -1,44 +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,
-        MINIGAME = 14
-    };
-
-    // Keytypen
-    enum Key
-    {
-        EMPFANGEN = 0,
-        SENDEN = 0
-    };
-};

+ 0 - 851
KSGClient/Netzwerk/Klients/AnmeldungK.cpp

@@ -1,851 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der AnmeldungKlient Klasse aus KSGKlient.h
-// Konstruktor
-AnmeldungKlient::AnmeldungKlient()
-{
-    verbunden = 0;
-    klient = 0;
-    fehler = new Text( "" );
-    spielHistorie = 0;
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-AnmeldungKlient::~AnmeldungKlient()
-{
-    cs.lock();
-    if( klient )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            klient->sendeEncrypted( "\4", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        else
-        {
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::ANMELDUNG, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::ANMELDUNG, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( klient->getServerPort(), klient->getServerIp() );
-            klient->sendeEncrypted( "\1", 1 );
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            else
-            {
-                char *sl = 0;
-                char slLän = getSchlüssel( &sl );
-                klient->setSendeKey( sl, slLän );
-                klient->setEmpfangKey( sl, slLän );
-                delete[] sl;
-                klient->sendeEncrypted( "\4", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                if( serverReturn == 3 )
-                {
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *nachricht = new char[ län + 1 ];
-                    nachricht[ län ] = 0;
-                    klient->getNachrichtEncrypted( nachricht, län );
-                    delete[]nachricht;
-                }
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        klient = klient->release();
-    }
-    fehler = fehler->release();
-    cs.unlock();
-}
-
-// nicht constant
-bool AnmeldungKlient::verbinde() // verbindet ich mit dem Chat Server
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    spielHistorie = 0;
-    if( !klient )
-    {
-        char *msIp = getMainServerIp();
-        unsigned short msPort = getMainServerPort();
-        Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
-        klient = new Klient();
-        int keyLen = 0;
-        char *key = 0;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
-        klient->setSendeKey( key, keyLen );
-        delete[] key;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
-        klient->setEmpfangKey( key, keyLen );
-        delete[] key;
-        if( !klient->verbinde( msPort, msIp ) )
-        {
-            Framework::logLine( "ERROR: Server nicht erreichbar." );
-            fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." );
-            klient = klient->release();
-            delete[]msIp;
-            cs.unlock();
-            return 0;
-        }
-        delete[]msIp;
-        klient->sende( "\0", 1 ); // Verschlüsselung aktivieren
-        klient->sendeEncrypted( "\1", 1 );
-        klient->sendeEncrypted( (char*)&klientId, 4 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 3 )
-        {
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *nachricht = new char[ län + 1 ];
-            nachricht[ län ] = 0;
-            klient->getNachrichtEncrypted( nachricht, län );
-            fehler->setText( nachricht );
-            Framework::logLine( Text( "ERROR: " ) += nachricht );
-            delete[]nachricht;
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        klient->sendeEncrypted( "\6\6", 2 );
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        if( byte == 2 )
-        {
-            unsigned char lsIp[ 4 ];
-            klient->getNachrichtEncrypted( (char *)lsIp, 4 );
-            unsigned short lsPort = 0;
-            klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            Text *lsIpT = new Text( "" );
-            lsIpT->append( (int)lsIp[ 0 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 1 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 2 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 3 ] );
-            Framework::logLine( ( ( Text( "Zugeteilter Anmeldung Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::ANMELDUNG, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::ANMELDUNG, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( lsPort, lsIpT->getText() );
-            lsIpT = lsIpT->release();
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        if( byte == 3 )
-        {
-            klient->getNachrichtEncrypted( &byte, 1 );
-            char *f = new char[ byte + 1 ];
-            f[ byte ] = 0;
-            klient->getNachrichtEncrypted( f, byte );
-            fehler->setText( f );
-            Framework::logLine( Text( "ERROR: " ) += f );
-            delete[]f;
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-    }
-    Framework::logLine( "Verbinung mit Anmeldung Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::ANMELDUNG, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::ANMELDUNG, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
-    {
-        if( klient->sendeEncrypted( "\1", 1 ) )
-        {
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            char serverReturn = 0;
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char byte = 0;
-                klient->getNachrichtEncrypted( &byte, 1 );
-                char *f = new char[ byte + 1 ];
-                f[ byte ] = 0;
-                klient->getNachrichtEncrypted( f, byte );
-                fehler->setText( f );
-                Framework::logLine( Text( "ERROR: " ) += f );
-                delete[]f;
-                klient->sendeEncrypted( "\3", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                klient->trenne();
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            klient->setSendeKey( sl, slLän );
-            klient->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            verbunden = 1;
-            cs.unlock();
-            Framework::logLine( "Erfolgreich mit Anmeldung Server verbunden." );
-            return 1;
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
-            fehler->setText( "Der dir zugewiesene Anmeldung Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
-            klient = klient->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        fehler->setText( "Der dir zugewiesene Anmeldung Server antwortet nicht. Bitte versuche es Später erneut." );
-        klient = klient->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-int AnmeldungKlient::gruppeErstellen( int karteId ) // erstellt eine gruppe
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\5", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&karteId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    int gruppeId = 0;
-    klient->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-    cs.unlock();
-    return gruppeId;
-}
-
-bool AnmeldungKlient::gruppeBetreten( int gruppeId, Array< int > *mitglieder, int *anzahl ) // betritt Gruppe
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x6", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->getNachrichtEncrypted( (char*)anzahl, 4 );
-    for( int i = 0; i < *anzahl; i++ )
-    {
-        int id = 0;
-        klient->getNachrichtEncrypted( (char*)&id, 4 );
-        mitglieder->add( id, i );
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::gruppeVerlassen( int gruppeId ) // Verlässt die gruppe
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x7", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::gruppeAnmelden( int gruppeId ) // meldet gruppe an
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x9", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::gruppeAbmelden( int gruppeId ) // meldet gruppe ab
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\xA", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::gruppeSpielerEinladen( int accountId, int gruppeId ) // läht Spieler ein die Gruppe zu betreten
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\xB", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&accountId, 4 );
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::gruppeEinladungAbbrechen( int accountId, int gruppeId ) // bricht einladung ab
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x11", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->sendeEncrypted( (char*)&accountId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::gruppeEinladungAblehnen( int gruppeId ) // Einladung zur Gruppe ablehnen
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x12", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::kickSpielerAusGruppe( int accountId, int gruppeId ) // wirft Spieler aus Gruppe
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\xC", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&accountId, 4 );
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::gruppeSpielStarten( int gruppeId, bool spielStarten ) // startet das Spiel der Gruppe
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x10", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->sendeEncrypted( (char*)&spielStarten, 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::gruppeNachricht( int gruppeId, char *nachricht ) // nachricht an gruppe senden
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    char län = textLength( nachricht );
-    if( !län )
-        return 1;
-    cs.lock();
-    klient->sendeEncrypted( "\xD", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    klient->sendeEncrypted( (char*)&län, 1 );
-    klient->sendeEncrypted( nachricht, län );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::anmelden( int karteId ) // betritt warteschlange
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\xE", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&karteId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::abmelden() // verlässt warteschlange
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\xF", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *message = new char[ län + 1 ];
-        message[ län ] = 0;
-        klient->getNachrichtEncrypted( message, län );
-        fehler->setText( message );
-        delete[] message;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool AnmeldungKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Anmeldung Server..." );
-    bool ok = klient->sendeEncrypted( "\x13", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool AnmeldungKlient::trenne() // trennt sich von dem Chat Server
-{
-    if( !verbunden )
-        return 1;
-    cs.lock();
-    Framework::logLine( "Verbindung zum Anmeldung Server wird getrennt..." );
-    klient->sendeEncrypted( "\3", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    klient->trenne();
-    verbunden = 0;
-    klient->trenne();
-    cs.unlock();
-    return 1;
-}
-
-// constant
-bool AnmeldungKlient::istVerbunden() const // prüft, ob mit Chat Server verbunden
-{
-    return verbunden;
-}
-
-char *AnmeldungKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler->getText();
-}
-
-// Reference Counting
-AnmeldungKlient *AnmeldungKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-AnmeldungKlient *AnmeldungKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 1203
KSGClient/Netzwerk/Klients/ChatK.cpp

@@ -1,1203 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include "../../Global/Variablen.h"
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der ChatKlient Klasse aus KSGKlient.h
-// Konstruktor
-ChatKlient::ChatKlient()
-{
-    verbunden = 0;
-    senden = 0;
-    empfangen = 0;
-    fehler = new Text( "" );
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor 
-ChatKlient::~ChatKlient()
-{
-    cs.lock();
-    if( senden )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            senden->sendeEncrypted( "\4", 1 );
-            senden->getNachrichtEncrypted( &serverReturn, 1 );
-            senden->sendeEncrypted( "\3", 1 );
-            senden->getNachrichtEncrypted( &serverReturn, 1 );
-            senden->trenne();
-        }
-        senden = senden->release();
-        verbunden = 0;
-        if( empfangen )
-        {
-            warteAufThread( 5000 );
-            ende();
-            empfangen->trenne();
-            empfangen = empfangen->release();
-        }
-    }
-    fehler = fehler->release();
-    cs.unlock();
-}
-
-// nicht constant
-bool ChatKlient::verbinde() // verbindet ich mit dem Chat Server
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    if( !senden )
-    {
-        Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
-        char *msIp = getMainServerIp();
-        unsigned short msPort = getMainServerPort();
-        senden = new Klient();
-        int keyLen = 0;
-        char *key = 0;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
-        senden->setSendeKey( key, keyLen );
-        delete[] key;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
-        senden->setEmpfangKey( key, keyLen );
-        delete[] key;
-        if( !senden->verbinde( msPort, msIp ) )
-        {
-            Framework::logLine( "ERROR: Server nicht erreichbar." );
-            fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." );
-            senden = senden->release();
-            delete[]msIp;
-            cs.unlock();
-            return 0;
-        }
-        delete[]msIp;
-        senden->sende( "\0", 1 ); // Verschlüsselung aktivieren
-        senden->sendeEncrypted( "\1", 1 );
-        senden->sendeEncrypted( (char*)&klientId, 4 );
-        char serverReturn = 0;
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 3 )
-        {
-            char län = 0;
-            senden->getNachrichtEncrypted( &län, 1 );
-            char *nachricht = new char[ län + 1 ];
-            nachricht[ län ] = 0;
-            senden->getNachrichtEncrypted( nachricht, län );
-            Framework::logLine( Text( "ERROR: " ) += nachricht );
-            fehler->setText( nachricht );
-            delete[]nachricht;
-            senden->sendeEncrypted( "\3", 1 );
-            senden->getNachrichtEncrypted( &serverReturn, 1 );
-            senden->trenne();
-            senden = senden->release();
-            cs.unlock();
-            return 0;
-        }
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        senden->setSendeKey( sl, slLän );
-        senden->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        senden->sendeEncrypted( "\6\5", 2 );
-        char byte = 0;
-        senden->getNachrichtEncrypted( &byte, 1 );
-        if( byte == 2 )
-        {
-            unsigned char lsIp[ 4 ];
-            senden->getNachrichtEncrypted( (char *)lsIp, 4 );
-            unsigned short lsPort = 0;
-            senden->getNachrichtEncrypted( (char*)&lsPort, 2 );
-            senden->sendeEncrypted( "\3", 1 );
-            senden->getNachrichtEncrypted( &serverReturn, 1 );
-            senden->trenne();
-            Text *lsIpT = new Text( "" );
-            lsIpT->append( (int)lsIp[ 0 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 1 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 2 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 3 ] );
-            Framework::logLine( ( ( Text( "Zugeteilter Chat Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::CHAT, Keys::SENDEN );
-            senden->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::CHAT, Keys::EMPFANGEN );
-            senden->setEmpfangKey( key, keyLen );
-            delete[] key;
-            senden->verbinde( lsPort, lsIpT->getText() );
-            lsIpT = lsIpT->release();
-            //senden->sendeEncrypted( "\xFF", 1 );
-            senden->sendeEncrypted( "\3", 1 );
-            senden->getNachrichtEncrypted( &serverReturn, 1 );
-            senden->trenne();
-        }
-        if( byte == 3 )
-        {
-            senden->getNachrichtEncrypted( &byte, 1 );
-            char *f = new char[ byte + 1 ];
-            f[ byte ] = 0;
-            senden->getNachrichtEncrypted( f, byte );
-            Framework::logLine( Text( "ERROR: " ) += f );
-            fehler->setText( f );
-            delete[]f;
-            senden->sendeEncrypted( "\3", 1 );
-            senden->getNachrichtEncrypted( &serverReturn, 1 );
-            senden->trenne();
-            senden = senden->release();
-            cs.unlock();
-            return 0;
-        }
-    }
-    Framework::logLine( "Verbinung mit Chat Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::CHAT, Keys::SENDEN );
-    senden->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::CHAT, Keys::EMPFANGEN );
-    senden->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( senden->verbinde( senden->getServerPort(), senden->getServerIp() ) )
-    {
-        if( senden->sendeEncrypted( "\1", 1 ) )
-        {
-            senden->sendeEncrypted( (char*)&klientId, 4 );
-            char ret = 0;
-            senden->getNachrichtEncrypted( &ret, 1 );
-            if( ret != 1 )
-            {
-                char byte = 0;
-                senden->getNachrichtEncrypted( &byte, 1 );
-                char *f = new char[ byte + 1 ];
-                f[ byte ] = 0;
-                senden->getNachrichtEncrypted( f, byte );
-                fehler->setText( f );
-                Framework::logLine( Text( "ERROR: " ) += f );
-                delete[]f;
-                senden->sendeEncrypted( "\3", 1 );
-                char serverReturn = 0;
-                senden->getNachrichtEncrypted( &serverReturn, 1 );
-                senden->trenne();
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            senden->setSendeKey( sl, slLän );
-            senden->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            if( !empfangen )
-                empfangen = new Klient();
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::CHAT, Keys::SENDEN );
-            empfangen->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::CHAT, Keys::EMPFANGEN );
-            empfangen->setEmpfangKey( key, keyLen );
-            delete[] key;
-            if( empfangen->verbinde( senden->getServerPort(), senden->getServerIp() ) )
-            {
-                start();
-                verbunden = 1;
-                cs.unlock();
-                Framework::logLine( "Erfolgreich mit Chat Server verbunden." );
-                return 1;
-            }
-            else
-            {
-                Framework::logLine( "ERROR: Empfangen vom Server nicht erfolgreich." );
-                fehler->setText( "Der dir zugewiesene Chat Server kann dir keine Nachrichten senden." );
-                cs.unlock();
-                return 1;
-            }
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
-            fehler->setText( "Der dir zugewiesene Chat Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
-            senden = senden->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        fehler->setText( "Der dir zugewiesene Chat Server antwortet nicht. Bitte versuche es Später erneut." );
-        senden = senden->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool ChatKlient::chatNachricht( int zuAccount, const char *nachricht ) // sendet eine Nachricht zu einem Account
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    char län = textLength( nachricht );
-    if( !län )
-        return 1;
-    cs.lock();
-    senden->sendeEncrypted( "\6", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&zuAccount, 4 );
-        senden->sendeEncrypted( &län, 1 );
-        senden->sendeEncrypted( nachricht, län );
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool ChatKlient::accountNameÄndern( const char *name ) // ändert den Account Namen
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    char län = textLength( name );
-    if( !län )
-        return 1;
-    cs.lock();
-    senden->sendeEncrypted( "\x8", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( &län, 1 );
-        senden->sendeEncrypted( name, län );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::freundschaftBeenden( int accountId ) // beendet die Freundschaft mit einem Account
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\x9", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::freundesAnfrage( int accountId ) // sendet eine Freundesanfragezu einem Account
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xA", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::freundesAnfrageBeantworten( int accountId, bool ja ) // beantwortet eine Freundesanfrage
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xB", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
-        char ok = (char)ja;
-        senden->sendeEncrypted( &ok, 1 );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-int ChatKlient::chatroomErstellen( const char *name ) // erstellt ein chatroom
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    char län = textLength( name );
-    if( !län )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xC", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( &län, 1 );
-        senden->sendeEncrypted( name, län );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        if( !serverReturn )
-        {
-            cs.unlock();
-            return 0;
-        }
-        int ret = 0;
-        senden->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::chatroomEinladung( int accountId, int chatroomId ) // verschickt eine Einladung zu einem Chatroom
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xD", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::chatroomEinladungAblehnen( int accountId, int chatroomId ) // Einladung zum Chatroom wird abgelehnt
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xE", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&accountId, 4 );
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::chatroomBetreten( int chatroomId ) // betritt ein chatroom
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xF", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::chatroomNachricht( int chatroomId, const char *nachricht ) // chatroom Nachricht senden
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    char län = textLength( nachricht );
-    if( !län )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\x10", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
-        senden->sendeEncrypted( &län, 1 );
-        senden->sendeEncrypted( nachricht, län );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::chatroomVerlassen( int chatroomId ) // verlässt chatroom
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\x11", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::chatroomKick( int chatroomId, int accountId ) // kickt Spieler aus Chatroom( nur wenn admin )
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\x12", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn )
-    {
-        senden->sendeEncrypted( (char*)&chatroomId, 4 );
-        senden->sendeEncrypted( (char*)&accountId, 4 );
-        senden->getNachrichtEncrypted( &serverReturn, 1 );
-        cs.unlock();
-        return serverReturn == 1;
-    }
-    else
-    {
-        cs.unlock();
-        return 0;
-    }
-}
-
-bool ChatKlient::freundesListeAnfragen() // fragt nach allen freunden
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    char serverReturn = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\x13", 1 );
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    cs.unlock();
-    return serverReturn == 1;
-}
-
-bool ChatKlient::chatNachrichtAnfrage() // fragt nach chat nachrichten in abwesenheit
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    char serverReturn = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\x14", 1 );
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    cs.unlock();
-    return serverReturn == 1;
-}
-
-bool ChatKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Chat Server..." );
-    bool ok = senden->sendeEncrypted( "\x15", 1 );
-    ok &= senden->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool ChatKlient::trenne() // trennt sich von dem Chat Server
-{
-    if( !verbunden )
-        return 1;
-    cs.lock();
-    Framework::logLine( "Verbindung zum Chat Server wird getrennt..." );
-    senden->sendeEncrypted( "\3", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    senden->trenne();
-    verbunden = 0;
-    warteAufThread( 5000 );
-    ende();
-    if( empfangen )
-        empfangen->trenne();
-    cs.unlock();
-    return 1;
-}
-
-void ChatKlient::thread() // empfangen von Nachrichten
-{
-    if( !verbunden || !empfangen || !senden )
-        return;
-    empfangen->sendeEncrypted( "\1", 1 );
-    empfangen->sendeEncrypted( (char*)&klientId, 4 );
-    char res = 0;
-    empfangen->getNachrichtEncrypted( &res, 1 );
-    if( res == 3 )
-    {
-        char län = 0;
-        senden->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        senden->getNachrichtEncrypted( nachricht, län );
-        fehler->setText( nachricht );
-        delete[]nachricht;
-    }
-    if( res != 1 )
-    {
-        WMessageBox( 0, new Text( "Fehler" ), new Text( "Server akzeptiert den Klient nicht" ), MB_ICONERROR );
-        return;
-    }
-    char *sl = 0;
-    char slLän = getSchlüssel( &sl );
-    empfangen->setSendeKey( sl, slLän );
-    empfangen->setEmpfangKey( sl, slLän );
-    delete[] sl;
-    char befehl = 0;
-    while( verbunden )
-    {
-        if( !empfangen->getNachrichtEncrypted( &befehl, 1 ) )
-            return;
-        switch( befehl )
-        {
-        case 0: // verbindung getrennt
-            return;
-            break;
-        case 1: // kick
-            if( 1 )
-            {
-                loginKlient->trenne();
-                infoKlient->trenne();
-                chatKlient->trenne();
-                aktion = 4;
-            }
-            break;
-        case 2: // Server Ausgelastet
-            aktion = 1;
-            if( nachLogin && nachLogin->zNachrichtenListe() )
-            {
-                hauptScreen->lock();
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Server Ausgelastet" ),
-                                                              new Text( "Der Chat Server ist derzeit ausgelastet. Es wird versucht auf einen anderen Server auszuweichen." ),
-                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-                hauptScreen->unlock();
-            }
-            break;
-        case 3: // Fehler
-            if( 1 )
-            {
-                char länge = 0;
-                empfangen->getNachrichtEncrypted( &länge, 1 );
-                char *txt = new char[ länge + 1 ];
-                txt[ länge ] = 0;
-                empfangen->getNachrichtEncrypted( txt, länge );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( txt ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-                hauptScreen->unlock();
-                delete[]txt;
-            }
-            break;
-        case 4: // Chat Nachricht
-            if( 1 )
-            {
-                int vonAccount = 0;
-                empfangen->getNachrichtEncrypted( (char*)&vonAccount, 4 );
-                char länge = 0;
-                empfangen->getNachrichtEncrypted( &länge, 1 );
-                char *nachricht = new char[ länge + 1 ];
-                nachricht[ länge ] = 0;
-                empfangen->getNachrichtEncrypted( nachricht, länge );
-                if( nachLogin && nachLogin->zChatLeiste() )
-                {
-                    hauptScreen->lock();
-                    nachLogin->zChatLeiste()->chatNachricht( vonAccount, nachricht );
-                    hauptScreen->unlock();
-                }
-                delete[]nachricht;
-            }
-            break;
-        case 5: // Spiel Einladung
-            if( 1 )
-            {
-                int vonAccount = 0;
-                empfangen->getNachrichtEncrypted( (char*)&vonAccount, 4 );
-                int gruppeId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                {
-                    int karteId = infoKlient->getGruppenKarteId( gruppeId );
-                    int spielId = infoKlient->getSpielId( karteId );
-                    Text *spiel = infoKlient->getSpielName( spielId );
-                    Text *karte = infoKlient->getKarteName( karteId );
-                    Text *name = infoKlient->getSpielerName( vonAccount );
-                    Text *titel = new Text( "Spiel Einladung" );
-                    Text *nachricht = new Text( "Von: " );
-                    nachricht->append( name );
-                    nachricht->append( "\nSpiel: " );
-                    nachricht->append( spiel );
-                    nachricht->append( "\nKarte: " );
-                    nachricht->append( karte );
-                    SpielEinladungParam *param = new SpielEinladungParam();
-                    param->gruppeId = gruppeId;
-                    param->vonAccount = vonAccount;
-                    hauptScreen->lock();
-                    nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ), NachrichtType::spielEinladung, param );
-                    hauptScreen->unlock();
-                }
-            }
-            break;
-        case 6: // Account Status ändert sich
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                char län = 0;
-                empfangen->getNachrichtEncrypted( &län, 1 );
-                char *status = new char[ län + 1 ];
-                status[ län ] = 0;
-                empfangen->getNachrichtEncrypted( status, län );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                    nachLogin->zFreundesListe()->setStatus( accountId, status );
-                hauptScreen->unlock();
-                delete[]status;
-            }
-            break;
-        case 7: // Account Name ändert sich
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                char län = 0;
-                empfangen->getNachrichtEncrypted( &län, 1 );
-                char *name = new char[ län + 1 ];
-                name[ län ] = 0;
-                empfangen->getNachrichtEncrypted( name, län );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                    nachLogin->zFreundesListe()->setName( accountId, name );
-                hauptScreen->unlock();
-                delete[]name;
-            }
-            break;
-        case 8: // kein Freund mehr
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                    nachLogin->zFreundesListe()->removeMember( accountId );
-                hauptScreen->unlock();
-            }
-            break;
-        case 9: // Freundesanfrage
-            if( 1 )
-            {
-                int vonAccount = 0;
-                empfangen->getNachrichtEncrypted( (char*)&vonAccount, 4 );
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                {
-                    Text *titel = new Text( "Freundeseinladung" );
-                    Text *nachricht = new Text( "" );
-                    nachricht->append( infoKlient->getSpielerName( vonAccount ) );
-                    nachricht->append( " möchte sich mit dir befreunden." );
-                    int *accountId = new int;
-                    *accountId = vonAccount;
-                    hauptScreen->lock();
-                    if( nachLogin && nachLogin->zNachrichtenListe() )
-                    {
-                        nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "annehmen" ), new Text( "ablehnen" ),
-                                                                      NachrichtType::freundEinladung, (void*)accountId );
-                    }
-                    hauptScreen->unlock();
-                }
-            }
-            break;
-        case 0xA: // Neuer Freund
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                    nachLogin->zFreundesListe()->addMember( accountId );
-                hauptScreen->unlock();
-            }
-            break;
-        case 0xB: // Freundesanfrage abgelehnt
-            if( 1 )
-            {
-                int vonAccount = 0;
-                empfangen->getNachrichtEncrypted( (char*)&vonAccount, 4 );
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                {
-                    Text *titel = new Text( "Freundeseinladung Abgelehnt" );
-                    Text *nachricht = new Text( "" );
-                    nachricht->append( infoKlient->getSpielerName( vonAccount ) );
-                    nachricht->append( " hat deine Freundesanfrage abgelehnt." );
-                    hauptScreen->lock();
-                    nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-                    hauptScreen->unlock();
-                }
-            }
-            break;
-        case 0xC: // Einladung zum Chatroom
-            if( 1 )
-            {
-                int vonAccount = 0;
-                empfangen->getNachrichtEncrypted( (char*)&vonAccount, 4 );
-                int chatroomId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&chatroomId, 4 );
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                {
-                    Text *titel = new Text( "Chatroom Einladung" );
-                    Text *nachricht = new Text( "" );
-                    nachricht->append( infoKlient->getSpielerName( vonAccount ) );
-                    nachricht->append( " lädt dich dazu ein das Chatroom '" );
-                    nachricht->append( infoKlient->getChatroomName( chatroomId ) );
-                    nachricht->append( "' zu betreten." );
-                    ChatroomEinladungParam *param = new ChatroomEinladungParam();
-                    param->chatroomId = chatroomId;
-                    param->vonAccount = vonAccount;
-                    nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "betreten" ), new Text( "ablehnen" ), NachrichtType::chatroomEinladung, param );
-                }
-            }
-            break;
-        case 0xD: // Einladung zum Chatroom abgelehnt
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                int chatroomId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&chatroomId, 4 );
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                {
-                    Text *titel = new Text( "Chatroom Einladung Abgelehnt" );
-                    Text *nachricht = new Text( "" );
-                    nachricht->append( infoKlient->getSpielerName( accountId ) );
-                    nachricht->append( " möchte dem Chatroom '" );
-                    nachricht->append( infoKlient->getChatroomName( chatroomId ) );
-                    nachricht->append( "' nicht beitreten." );
-                    hauptScreen->lock();
-                    nachLogin->zNachrichtenListe()->addNachricht( titel, nachricht, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-                    hauptScreen->unlock();
-                }
-            }
-            break;
-        case 0xE: // Spieler betritt Chatroom
-            if( 1 )
-            {
-                int chatroomId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&chatroomId, 4 );
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zChatLeiste() )
-                    nachLogin->zChatLeiste()->addSpieler( chatroomId, accountId );
-                hauptScreen->unlock();
-            }
-            break;
-        case 0xF: // Chatroom Nachricht
-            if( 1 )
-            {
-                int chatroomId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&chatroomId, 4 );
-                int vonAccount = 0;
-                empfangen->getNachrichtEncrypted( (char*)&vonAccount, 4 );
-                char län = 0;
-                empfangen->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                if( län )
-                {
-                    empfangen->getNachrichtEncrypted( nachricht, län );
-                    hauptScreen->lock();
-                    if( nachLogin && nachLogin->zChatLeiste() )
-                        nachLogin->zChatLeiste()->chatroomNachricht( chatroomId, vonAccount, nachricht );
-                    hauptScreen->unlock();
-                }
-                delete[]nachricht;
-            }
-            break;
-        case 0x10: // Spieler verlässt Chatroom
-            if( 1 )
-            {
-                int chatroomId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&chatroomId, 4 );
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zChatLeiste() )
-                    nachLogin->zChatLeiste()->removeSpieler( chatroomId, accountId );
-                hauptScreen->unlock();
-            }
-            break;
-        case 0x11: // Freunde
-            if( 1 )
-            {
-                char freundeAnzahl;
-                empfangen->getNachrichtEncrypted( &freundeAnzahl, 1 );
-                for( int i = 0; i < freundeAnzahl; i++ )
-                {
-                    int accountId = 0;
-                    empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                    if( nachLogin )
-                    {
-                        while( !nachLogin->zFreundesListe() )
-                        {
-                            Sleep( 50 );
-                        }
-                        hauptScreen->lock();
-                        nachLogin->zFreundesListe()->addMember( accountId );
-                        hauptScreen->unlock();
-                    }
-                }
-            }
-            break;
-        case 0x12: // Spieler im Chatroom
-            if( 1 )
-            {
-                int chatroomId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&chatroomId, 4 );
-                char anzahl = 0;
-                empfangen->getNachrichtEncrypted( &anzahl, 1 );
-                for( char i = 0; i < anzahl; i++ )
-                {
-                    int accountId = 0;
-                    empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                    hauptScreen->lock();
-                    if( nachLogin && nachLogin->zChatLeiste() )
-                        nachLogin->zChatLeiste()->addSpieler( chatroomId, accountId );
-                    hauptScreen->unlock();
-                }
-            }
-            break;
-        case 0x13: // Freund online
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zFreundesListe() )
-                    nachLogin->zFreundesListe()->setOnline( accountId, 1 );
-                hauptScreen->unlock();
-            }
-            break;
-        case 0x14: // Freund offline
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zFreundesListe() )
-                    nachLogin->zFreundesListe()->setOnline( accountId, 0 );
-                hauptScreen->unlock();
-            }
-            break;
-        case 0x15: // Chatroom Admin
-            if( 1 )
-            {
-                int chatroomId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&chatroomId, 4 );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zChatLeiste() )
-                    nachLogin->zChatLeiste()->setChatroomAdmin( chatroomId );
-                hauptScreen->unlock();
-            }
-            break;
-        case 0x16: // Chatroom Kick
-            if( 1 )
-            {
-                int chatroomId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&chatroomId, 4 );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zChatLeiste() )
-                    nachLogin->zChatLeiste()->removeChat( 0, chatroomId );
-                hauptScreen->unlock();
-            }
-            break;
-        case 0x17: // Spieler betritt Gruppe
-            if( 1 )
-            {
-                int accountId = 0;
-                int gruppeId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->spielerBetrittGruppe( gruppeId, accountId );
-            }
-            break;
-        case 0x18: // Spieler verlässt Gruppe
-            if( 1 )
-            {
-                int accountId = 0;
-                int gruppeId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->spielerVerlässtGruppe( gruppeId, accountId );
-            }
-            break;
-        case 0x19: // gruppe Nachricht
-            if( 1 )
-            {
-                int gruppeId = 0;
-                char län = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                empfangen->getNachrichtEncrypted( &län, 1 );
-                if( län )
-                {
-                    char *nachricht = new char[ län + 1 ];
-                    nachricht[ län ] = 0;
-                    empfangen->getNachrichtEncrypted( nachricht, län );
-                    if( nachLogin && nachLogin->zSpielenFenster() )
-                        nachLogin->zSpielenFenster()->gruppeNachricht( gruppeId, nachricht );
-                    delete[] nachricht;
-                }
-            }
-            break;
-        case 0x1A: // gruppe Angemeldet
-            if( 1 )
-            {
-                int gruppeId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->gruppeAnmelden( gruppeId );
-            }
-            break;
-        case 0x1B: // gruppe Abgemeldet
-            if( 1 )
-            {
-                int gruppeId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->gruppeAbmelden( gruppeId );
-            }
-            break;
-        case 0x1C: // gruppe Spiel starten
-            if( 1 )
-            {
-                int gruppeId = 0;
-                char starten = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                empfangen->getNachrichtEncrypted( &starten, 1 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->setGruppeSpielStarten( gruppeId, starten == 1 );
-            }
-            break;
-        case 0x1D: // kick aus Gruppe
-            if( 1 )
-            {
-                int gruppeId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->kickAusGruppe( gruppeId );
-            }
-            break;
-        case 0x1E: // gruppe Admin
-            if( 1 )
-            {
-                int gruppeId = 0;
-                int adminId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&adminId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->setGruppeAdmin( gruppeId, adminId );
-            }
-            break;
-        case 0x1F: // gruppe Einladung abgelehnt
-            if( 1 )
-            {
-                int gruppeId;
-                int accountId;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->gruppeEinadungAbgelehnt( gruppeId, accountId );
-            }
-            break;
-        case 0x20: // SpielServer Verbindungs Anfrage
-            if( 1 )
-            {
-                unsigned short port;
-                unsigned char *ip = new unsigned char[ 4 ];
-                empfangen->getNachrichtEncrypted( (char*)&port, 2 );
-                empfangen->getNachrichtEncrypted( (char*)ip, 4 );
-                Text *ipT = new Text( "" );
-                ipT->append( (int)ip[ 0 ] );
-                ipT->append( "." );
-                ipT->append( (int)ip[ 1 ] );
-                ipT->append( "." );
-                ipT->append( (int)ip[ 2 ] );
-                ipT->append( "." );
-                ipT->append( (int)ip[ 3 ] );
-                spielKlient->verbinde( port, ipT->getText() );
-                delete[] ip;
-                ipT->release();
-            }
-            break;
-        case 0x21: // Gruppe Einladung abgebrochen
-            if( 1 )
-            {
-                int gruppeId = 0;
-                int account = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&account, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->gruppeEinladungAbgebrochen( gruppeId, account );
-            }
-            break;
-        case 0x22: // Gruppe Einladung hinzufügen
-            if( 1 )
-            {
-                int gruppeId = 0;
-                int account = 0;
-                empfangen->getNachrichtEncrypted( (char*)&gruppeId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&account, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->gruppeEinladungNeu( gruppeId, account );
-            }
-            break;
-        case 0x23: // ping
-            empfangen->sendeEncrypted( "\1", 1 );
-            break;
-        default: // Unbekannte Servernachricht
-            if( nachLogin && nachLogin->zNachrichtenListe() )
-            {
-                hauptScreen->lock();
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-                                                              new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
-                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-                hauptScreen->unlock();
-            }
-            break;
-        }
-    }
-}
-
-// constant
-bool ChatKlient::istVerbunden() const // prüft, ob mit Chat Server verbunden
-{
-    return verbunden;
-}
-
-char *ChatKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler->getText();
-}
-
-// Reference Counting
-ChatKlient *ChatKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-ChatKlient *ChatKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 2909
KSGClient/Netzwerk/Klients/EditorK.cpp

@@ -1,2909 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include <Datei.h>
-#include "../../Global/Variablen.h"
-#include <GSLDateiV.h>
-#include "../Keys.h"
-#include <Globals.h>
-
-typedef GSL::GSLDateiV *( *GetGSLDatei )( );
-
-class DownloadSound : public GSL::GSLSoundV
-{
-private:
-    bool istM;
-    int sample;
-    __int64 län;
-    Klient *k;
-    FBalken *f;
-    int ref;
-
-public:
-    // Konstruktor
-    DownloadSound( Klient *zK, FBalken *zF )
-    {
-        k = zK;
-        f = zF;
-        ref = 1;
-    }
-    // nicht constant
-    // GSL
-    void playSound() override
-    {}
-    void setPause( bool p ) override
-    {}
-    void stopSound() override
-    {}
-    void warteAufSound( int zeit ) override
-    {}
-    // Lautstärke: 0 - 0xFFFF
-    void setVolume( unsigned int links, unsigned int rechts ) override
-    {}
-    // zum Speichern
-    void open() override
-    {
-        char m = 0;
-        k->getNachrichtEncrypted( &m, 1 );
-        istM = ( m == 1 );
-        sample = 0;
-        k->getNachrichtEncrypted( (char*)&sample, 4 );
-        län = 0;
-        k->getNachrichtEncrypted( (char*)&län, 8 );
-        f->setAktionAnzahl( län );
-    }
-    int getDaten( char *buffer, int län ) override
-    {
-        int l = län < this->län ? län : ( int )this->län;
-        if( !l )
-            return -1;
-        k->getNachricht( buffer, l );
-        this->län -= l;
-        f->aktionPlus( l );
-        return l;
-    }
-    void close() override
-    {}
-    bool istMono() const override
-    {
-        return istM;
-    }
-    int getSampleRate() const override
-    {
-        return sample;
-    }
-    __int64 getDatLength() const override
-    {
-        return län;
-    }
-    // Reference Counting
-    GSL::GSLSoundV *getThis() override
-    {
-        ref++;
-        return this;
-    }
-    GSL::GSLSoundV *release() override
-    {
-        ref--;
-        if( !ref )
-            delete this;
-        return 0;
-    }
-};
-
-// Inhalt der EditorKlient Klasse aus KSGKlient.h
-// Konstruktor
-EditorKlient::EditorKlient()
-{
-    verbunden = 0;
-    klient = 0;
-    fehler = new Text( "" );
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-EditorKlient::~EditorKlient()
-{
-    cs.lock();
-    if( verbunden )
-        trenne();
-    fehler = fehler->release();
-    cs.unlock();
-}
-
-// nicht constant
-bool EditorKlient::verbinde( unsigned short port, char *ip ) // verbindet ich mit dem Editor Server
-{
-    if( klient && verbunden && klient->getServerPort() == port && Text( ip ).istGleich( klient->getServerIp() ) )
-        return 1;
-    if( klient || verbunden )
-        trenne();
-    klient = new Klient();
-    Framework::logLine( ( ( Text( "Zugeteilter Editor Server:" ) += ip ) += ":" ) += port );
-    Framework::logLine( "Verbinung mit Editor Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::EDITOR, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::EDITOR, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( !klient->verbinde( (unsigned short)port, ip ) )
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        klient = klient->release();
-        fehler->setText( "Fehler beim verbinden mit dem Editor Server." );
-        return 0;
-    }
-    klient->sendeEncrypted( "\1", 1 );
-    klient->sendeEncrypted( (char*)&klientId, 4 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        klient->getNachrichtEncrypted( nachricht, län );
-        fehler->setText( nachricht );
-        Framework::logLine( Text( "ERROR: " ) += nachricht );
-        delete[]nachricht;
-        trenne();
-        return 0;
-    }
-    if( ret == 1 )
-    {
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        verbunden = 1;
-    }
-    Framework::logLine( "Erfolgreich mit Editor Server verbunden." );
-    return 1;
-}
-
-bool EditorKlient::karteErstellen( Text *zName, int spielArt ) // Erstellt eine neue Karte
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xA", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        char l = (char)zName->getLength();
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( zName->getText(), l );
-        klient->sendeEncrypted( (char*)&spielArt, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::ladeKarte( int id ) // lädt eine bestimmte Karte
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x6", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-int EditorKlient::getAbbildListe( RCArray< Text > *name, RCArray< Zeit > *datum )
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x5", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            int anz = 0;
-            klient->getNachrichtEncrypted( (char*)&anz, 4 );
-            for( int i = 0; i < anz; i++ )
-            {
-                char l = 0;
-                klient->getNachrichtEncrypted( &l, 1 );
-                char *n = new char[ l + 1 ];
-                n[ l ] = 0;
-                klient->getNachrichtEncrypted( n, l );
-                name->set( new Text( n ), i );
-                delete[] n;
-                Zeit *dat = new Zeit();
-                int d = 0;
-                klient->getNachrichtEncrypted( (char*)&d, 4 );
-                dat->setJahr( d );
-                klient->getNachrichtEncrypted( (char*)&d, 4 );
-                dat->setMonat( d );
-                klient->getNachrichtEncrypted( (char*)&d, 4 );
-                dat->setTag( d );
-                klient->getNachrichtEncrypted( (char*)&d, 4 );
-                dat->setStunde( d );
-                klient->getNachrichtEncrypted( (char*)&d, 4 );
-                dat->setMinute( d );
-                klient->getNachrichtEncrypted( (char*)&d, 4 );
-                dat->setSekunde( d );
-                datum->set( dat, i );
-            }
-            cs.unlock();
-            return anz;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::abbildErstellen( char *name )
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x1", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            char l = (char)textLength( name );
-            klient->sendeEncrypted( &l, 1 );
-            if( l )
-                klient->sendeEncrypted( name, l );
-            klient->getNachrichtEncrypted( &ret, 1 );
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool EditorKlient::abbildLöschen( char *name )
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x2", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            char l = (char)textLength( name );
-            klient->sendeEncrypted( &l, 1 );
-            if( l )
-                klient->sendeEncrypted( name, l );
-            klient->getNachrichtEncrypted( &ret, 1 );
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool EditorKlient::abbildHerstellen( char *name )
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x3", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            char l = (char)textLength( name );
-            klient->sendeEncrypted( &l, 1 );
-            if( l )
-                klient->sendeEncrypted( name, l );
-            klient->getNachrichtEncrypted( &ret, 1 );
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool EditorKlient::veröffentlichen()
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x4", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-            klient->getNachrichtEncrypted( &ret, 1 );
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::shopSeiteVeröffentlichen() // Veröffentlicht die Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x6", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-            klient->getNachrichtEncrypted( &ret, 1 );
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::ladeShopSeiteVorschau() // Läht die Vorschau der Shop Seite herrunter
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x8", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            int anz = 0;
-            klient->getNachrichtEncrypted( (char*)&anz, 4 );
-            Text pf = "data/tmp/ke/ssv";
-            for( int i = 0; i < anz; i++ )
-            {
-                char l = 0;
-                klient->getNachrichtEncrypted( &l, 1 );
-                char *pfad = new char[ l + 1 ];
-                pfad[ l ] = 0;
-                klient->getNachrichtEncrypted( pfad, l );
-                Text p = pf.getText();
-                p += pfad;
-                delete[] pfad;
-                Datei d;
-                d.setDatei( p );
-                d.erstellen();
-                d.open( Datei::Style::schreiben );
-                __int64 größe = 0;
-                klient->getNachrichtEncrypted( (char*)&größe, 8 );
-                char *buffer = new char[ 2048 ];
-                while( größe > 0 )
-                {
-                    int l = größe > 2048 ? 2048 : (int)größe;
-                    klient->getNachricht( buffer, l );
-                    d.schreibe( buffer, l );
-                    größe -= l;
-                }
-                delete[] buffer;
-                d.close();
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::ssDateiErstellen( char *name, int typ ) // Erstellt eine neue Shop Seiten Datei (typ:0=Ordner,1=Bild,2=Text)
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x1", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char t = typ;
-                klient->sendeEncrypted( &t, 1 );
-                char l = (char)textLength( name );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( name, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::ssOrdnerÖffnen( char *name ) // Öffnet einen Ordner der Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x2", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)textLength( name );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( name, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-Bild *EditorKlient::ssBildLaden( char *datei, char *bild ) // Läht das ein Bild der Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x3", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)textLength( datei );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( datei, l );
-                l = (char)textLength( bild );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( bild, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    Bild *ret = new Bild();
-                    int br = 0;
-                    int hö = 0;
-                    klient->getNachrichtEncrypted( (char*)&br, 4 );
-                    klient->getNachrichtEncrypted( (char*)&hö, 4 );
-                    ret->neuBild( br, hö, 0 );
-                    char *buffer = (char*)ret->getBuffer();
-                    __int64 län = br * hö * 4;
-                    for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
-                    {
-                        klient->getNachricht( &( buffer[ i ] ), l );
-                        i += l;
-                        län -= l;
-                    }
-                    cs.unlock();
-                    return ret;
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::ssDateiLöschen( char *name ) // Löscht eine Datei der Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x4", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)textLength( name );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( name, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-Text *EditorKlient::ssTextLaden( char *datei ) // Läd eine KSGS Datei der Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\xA", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)textLength( datei );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( datei, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int län = 0;
-                    klient->getNachrichtEncrypted( (char*)&län, 4 );
-                    char *txt = new char[ län + 1 ];
-                    txt[ län ] = 0;
-                    for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
-                        klient->getNachricht( &( txt[ i ] ), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                    if( ret == 1 )
-                    {
-                        Text *t = new Text( txt );
-                        delete[] txt;
-                        cs.unlock();
-                        return t;
-                    }
-                    delete[] txt;
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::ssTextSpeichern( char *datei, Text *zText ) // Spechert eine KSGS Datei der Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x5", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)textLength( datei );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( datei, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int län = zText->getLength();
-                    klient->sendeEncrypted( (char*)&län, 4 );
-                    for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
-                        klient->sende( &( zText->getText()[ i ] ), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::ssBildLöschen( char *datei, char *bild ) // Löscht ein Bild der Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x6", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)textLength( datei );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( datei, l );
-                l = (char)textLength( bild );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( bild, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::ssBildSpeichern( char *datei, char *name, Bild *zBild ) // Speichert ein Bild einer ShopSeite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x7", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)textLength( datei );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( datei, l );
-                l = (char)textLength( name );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( name, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int br = zBild->getBreite();
-                    int hö = zBild->getHeight();
-                    klient->sendeEncrypted( (char*)&br, 4 );
-                    klient->sendeEncrypted( (char*)&hö, 4 );
-                    __int64 län = br * hö * 4;
-                    char *buffer = (char*)zBild->getBuffer();
-                    for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
-                        klient->sende( &( buffer[ i ] ), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-int EditorKlient::ssGetDateiListe( RCArray< Text > *zList ) // Läd die Datei Liste der Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x8", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                int anz = 0;
-                klient->getNachrichtEncrypted( (char*)&anz, 4 );
-                for( int i = 0; i < anz; i++ )
-                {
-                    char l = 0;
-                    klient->getNachrichtEncrypted( &l, 1 );
-                    char *n = new char[ l + 1 ];
-                    n[ l ] = 0;
-                    klient->getNachrichtEncrypted( n, l );
-                    zList->add( new Text( n ) );
-                    delete[] n;
-                }
-                cs.unlock();
-                return anz;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return -1;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int EditorKlient::ssGetBildListe( char *name, RCArray< Text > *zList ) // Läd die Bild Liste einer Bild Datei der Shop Seite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x7", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x9", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)textLength( name );
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( name, l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int anz = 0;
-                    klient->getNachrichtEncrypted( (char*)&anz, 4 );
-                    for( int i = 0; i < anz; i++ )
-                    {
-                        l = 0;
-                        klient->getNachrichtEncrypted( &l, 1 );
-                        char *n = new char[ l + 1 ];
-                        n[ l ] = 0;
-                        klient->getNachrichtEncrypted( n, l );
-                        zList->add( new Text( n ) );
-                        delete[] n;
-                    }
-                    cs.unlock();
-                    return anz;
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return -1;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::getShopDaten( int &es, int &tp, int &vp ) // Läht die Shop Daten
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x9", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->getNachrichtEncrypted( (char*)&es, 4 );
-            klient->getNachrichtEncrypted( (char*)&tp, 4 );
-            klient->getNachrichtEncrypted( (char*)&vp, 4 );
-            cs.unlock();
-            return 1;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::setShopDaten( int es, int tp, int vp ) // Setzt die Shop Daten
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xA", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( (char*)&es, 4 );
-            klient->sendeEncrypted( (char*)&tp, 4 );
-            klient->sendeEncrypted( (char*)&vp, 4 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                cs.unlock();
-                return 1;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-Text *EditorKlient::beschreibungLaden() // läht die Kartenbeschreibung
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xB", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x1", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                int län = 0;
-                klient->getNachrichtEncrypted( (char*)&län, 4 );
-                char *txt = new char[ län + 1 ];
-                txt[ län ] = 0;
-                for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
-                    klient->getNachricht( &( txt[ i ] ), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    Text *t = new Text( txt );
-                    delete[] txt;
-                    cs.unlock();
-                    return t;
-                }
-                delete[] txt;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-Bild *EditorKlient::titelbildLaden() // läht das Titelbild
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xB", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x2", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                Bild *ret = new Bild();
-                int br = 0;
-                int hö = 0;
-                klient->getNachrichtEncrypted( (char*)&br, 4 );
-                klient->getNachrichtEncrypted( (char*)&hö, 4 );
-                ret->neuBild( br, hö, 0 );
-                char *buffer = (char*)ret->getBuffer();
-                __int64 län = br * hö * 4;
-                for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
-                {
-                    klient->getNachricht( &( buffer[ i ] ), l );
-                    i += l;
-                    län -= l;
-                }
-                cs.unlock();
-                return ret;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-Bild *EditorKlient::minimapLaden() // läht das Minimapbild
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xB", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x3", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                Bild *ret = new Bild();
-                int br = 0;
-                int hö = 0;
-                klient->getNachrichtEncrypted( (char*)&br, 4 );
-                klient->getNachrichtEncrypted( (char*)&hö, 4 );
-                ret->neuBild( br, hö, 0 );
-                char *buffer = (char*)ret->getBuffer();
-                __int64 län = br * hö * 4;
-                for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
-                {
-                    klient->getNachricht( &( buffer[ i ] ), l );
-                    i += l;
-                    län -= l;
-                }
-                cs.unlock();
-                return ret;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-Bild *EditorKlient::ladebildLaden() // läht das Ladebild
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xB", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x4", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                Bild *ret = new Bild();
-                int br = 0;
-                int hö = 0;
-                klient->getNachrichtEncrypted( (char*)&br, 4 );
-                klient->getNachrichtEncrypted( (char*)&hö, 4 );
-                ret->neuBild( br, hö, 0 );
-                char *buffer = (char*)ret->getBuffer();
-                __int64 län = br * hö * 4;
-                for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
-                {
-                    klient->getNachricht( &( buffer[ i ] ), l );
-                    i += l;
-                    län -= l;
-                }
-                cs.unlock();
-                return ret;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::beschreibungSpeichern( Text *zText ) // speichert die Kartenbeschreibung
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xB", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x5", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                int län = zText->getLength();
-                klient->sendeEncrypted( (char*)&län, 4 );
-                for( int i = 0, l = län > 2048 ? 2048 : län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : län )
-                    klient->sende( &( zText->getText()[ i ] ), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::titelbildSpeichern( Bild *zBild ) // speichert das Titelbild
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xB", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x6", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                int br = zBild->getBreite();
-                int hö = zBild->getHeight();
-                klient->sendeEncrypted( (char*)&br, 4 );
-                klient->sendeEncrypted( (char*)&hö, 4 );
-                __int64 län = br * hö * 4;
-                char *buffer = (char*)zBild->getBuffer();
-                for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
-                    klient->sende( &( buffer[ i ] ), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::minimapSpeichern( Bild *zBild ) // speichert das Minimapbild
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xB", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x7", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                int br = zBild->getBreite();
-                int hö = zBild->getHeight();
-                klient->sendeEncrypted( (char*)&br, 4 );
-                klient->sendeEncrypted( (char*)&hö, 4 );
-                __int64 län = br * hö * 4;
-                char *buffer = (char*)zBild->getBuffer();
-                for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
-                    klient->sende( &( buffer[ i ] ), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::ladebildSpeichern( Bild *zBild ) // speichert das Ladebild
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xB", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x8", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                int br = zBild->getBreite();
-                int hö = zBild->getHeight();
-                klient->sendeEncrypted( (char*)&br, 4 );
-                klient->sendeEncrypted( (char*)&hö, 4 );
-                __int64 län = br * hö * 4;
-                char *buffer = (char*)zBild->getBuffer();
-                for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; i += l, län -= l, l = län > 2048 ? 2048 : (int)län )
-                    klient->sende( &( buffer[ i ] ), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::ladeTeamDaten( SpielerTeamStruktur *sts ) // läht die Team Daten
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xC", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x1", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                klient->getNachrichtEncrypted( (char*)&sts->spielerAnzahl, 4 );
-                klient->getNachrichtEncrypted( (char*)&sts->teamAnzahl, 4 );
-                for( int i = 0; i < sts->spielerAnzahl; i++ )
-                {
-                    int f = 0;
-                    klient->getNachrichtEncrypted( (char*)&f, 4 );
-                    sts->spielerFarbe->set( f, i );
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    int f = 0;
-                    klient->getNachrichtEncrypted( (char*)&f, 4 );
-                    sts->teamFarbe->set( f, i );
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    char l = 0;
-                    klient->getNachrichtEncrypted( &l, 1 );
-                    char *n = new char[ l + 1 ];
-                    n[ l ] = 0;
-                    klient->getNachrichtEncrypted( n, l );
-                    sts->teamName->set( new Text( n ), i );
-                    delete[] n;
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    int g = 0;
-                    klient->getNachrichtEncrypted( (char*)&g, 4 );
-                    sts->teamGröße->set( g, i );
-                }
-                cs.unlock();
-                return 1;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::speicherTeamDaten( SpielerTeamStruktur *sts ) // speichert die Team Daten
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xC", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x2", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                klient->sendeEncrypted( (char*)&sts->spielerAnzahl, 4 );
-                klient->sendeEncrypted( (char*)&sts->teamAnzahl, 4 );
-                for( int i = 0; i < sts->spielerAnzahl; i++ )
-                {
-                    int f = sts->spielerFarbe->get( i );
-                    klient->sendeEncrypted( (char*)&f, 4 );
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    int f = sts->teamFarbe->get( i );
-                    klient->sendeEncrypted( (char*)&f, 4 );
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    char l = (char)sts->teamName->z( i )->getLength();
-                    klient->sendeEncrypted( &l, 1 );
-                    klient->sendeEncrypted( sts->teamName->z( i )->getText(), l );
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    int g = sts->teamGröße->get( i );
-                    klient->sendeEncrypted( (char*)&g, 4 );
-                }
-                cs.unlock();
-                return 1;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::deNeueDatei( char typ, Text *zName ) // DateienEditor: Erstellt neue Datei (typ: 0=ordner 1=bild 2=modell2d 3=sound
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x1", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                klient->sendeEncrypted( &typ, 1 );
-                char l = (char)zName->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( zName->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::deOrdnerÖffnen( Text *zName ) // DateienEditor: Öffnet Ordner
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x2", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char län = (char)zName->getLength();
-                klient->sendeEncrypted( &län, 1 );
-                if( län )
-                    klient->sendeEncrypted( zName->getText(), län );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-Bild *EditorKlient::deBildLaden( Text *zDatei, Text *zBild, FBalken *zF ) // DateienEditor: Bild laden
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    Bild *retB = 0;
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x3", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char län = (char)zDatei->getLength();
-                klient->sendeEncrypted( &län, 1 );
-                if( län )
-                    klient->sendeEncrypted( zDatei->getText(), län );
-                län = (char)zBild->getLength();
-                klient->sendeEncrypted( &län, 1 );
-                if( län )
-                    klient->sendeEncrypted( zBild->getText(), län );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int br = 0;
-                    int hö = 0;
-                    klient->getNachrichtEncrypted( (char*)&br, 4 );
-                    klient->getNachrichtEncrypted( (char*)&hö, 4 );
-                    retB = new Bild();
-                    retB->neuBild( br, hö, 0 );
-                    char *buffer = (char*)retB->getBuffer();
-                    __int64 län = br * hö * 4;
-                    zF->setAktionAnzahl( län );
-                    for( int i = 0, l = län > 2048 ? 2048 : (int)län; län > 0; l = län > 2048 ? 2048 : (int)län )
-                    {
-                        klient->getNachricht( &( buffer[ i ] ), l );
-                        i += l;
-                        län -= l;
-                        zF->aktionPlus( l );
-                    }
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    if( !ret && retB )
-        retB = retB->release();
-    return retB;
-}
-
-bool EditorKlient::deDateiLöschen( Text *zName ) // DateienEditor: Löscht Datei
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x4", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char län = (char)zName->getLength();
-                klient->sendeEncrypted( &län, 1 );
-                if( län )
-                    klient->sendeEncrypted( zName->getText(), län );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::deBildLöschen( Text *zDatei, Text *zBild ) // DateienEditor: Löscht Bild aus Datei
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x5", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( zDatei->getText(), l );
-                l = (char)zBild->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                if( l )
-                    klient->sendeEncrypted( zBild->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::deBildSpeichern( Text *zDatei, Text *zName, Bild *zBild, FBalken *zF ) // DateienEditor: Speichert Bild
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x6", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char län = (char)zDatei->getLength();
-                klient->sendeEncrypted( &län, 1 );
-                if( län )
-                    klient->sendeEncrypted( zDatei->getText(), län );
-                län = (char)zName->getLength();
-                klient->sendeEncrypted( &län, 1 );
-                if( län )
-                    klient->sendeEncrypted( zName->getText(), län );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int br = zBild->getBreite();
-                    int hö = zBild->getHeight();
-                    klient->sendeEncrypted( (char*)&br, 4 );
-                    klient->sendeEncrypted( (char*)&hö, 4 );
-                    char *buffer = (char*)zBild->getBuffer();
-                    __int64 gr = br * hö * 4;
-                    zF->setAktionAnzahl( gr );
-                    for( int i = 0, l = gr > 2048 ? 2048 : (int)gr; gr > 0; i += l, gr -= l, l = gr > 2048 ? 2048 : (int)gr )
-                    {
-                        klient->sende( &( buffer[ i ] ), l );
-                        zF->aktionPlus( l );
-                    }
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-int EditorKlient::deGetDateiListe( RCArray< Text > *zNamen ) // DateienEditor: Datei Liste herunterladen
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x7", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                int anz = 0;
-                klient->getNachrichtEncrypted( (char*)&anz, 4 );
-                for( int i = 0; i < anz; i++ )
-                {
-                    char l = 0;
-                    klient->getNachrichtEncrypted( &l, 1 );
-                    char *n = new char[ l + 1 ];
-                    n[ l ] = 0;
-                    if( l )
-                        klient->getNachrichtEncrypted( n, l );
-                    zNamen->add( new Text( n ) );
-                    delete[] n;
-                }
-                cs.unlock();
-                return anz;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return -1;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-int EditorKlient::deGetBildListe( Text *zDatei, RCArray< Text > *zNamen ) // DateienEditor: Liste mit in der Datei gespeicherten Bildern
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x8", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int anz = 0;
-                    klient->getNachrichtEncrypted( (char*)&anz, 4 );
-                    for( int i = 0; i < anz; i++ )
-                    {
-                        klient->getNachrichtEncrypted( &l, 1 );
-                        char *n = new char[ l + 1 ];
-                        n[ l ] = 0;
-                        if( l )
-                            klient->getNachrichtEncrypted( n, l );
-                        zNamen->add( new Text( n ) );
-                        delete[] n;
-                    }
-                    cs.unlock();
-                    return anz;
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-int EditorKlient::deGetModelListe( Text *zDatei, RCArray< Text > *zNamen ) // DateienEditor Liste mit in der Datei gespeicherten Modellen
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x9", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int anz = 0;
-                    klient->getNachrichtEncrypted( (char*)&anz, 4 );
-                    for( int i = 0; i < anz; i++ )
-                    {
-                        klient->getNachrichtEncrypted( &l, 1 );
-                        char *n = new char[ l + 1 ];
-                        n[ l ] = 0;
-                        if( l )
-                            klient->getNachrichtEncrypted( n, l );
-                        zNamen->add( new Text( n ) );
-                        delete[] n;
-                    }
-                    cs.unlock();
-                    return anz;
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-int EditorKlient::deGetSoundListe( Text *zDatei, RCArray< Text > *zNamen ) // DateienEditor: Liste mit in der Datei gespeicherten Tönen
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\xA", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    int anz = 0;
-                    klient->getNachrichtEncrypted( (char*)&anz, 4 );
-                    for( int i = 0; i < anz; i++ )
-                    {
-                        klient->getNachrichtEncrypted( &l, 1 );
-                        char *n = new char[ l + 1 ];
-                        n[ l ] = 0;
-                        if( l )
-                            klient->getNachrichtEncrypted( n, l );
-                        zNamen->add( new Text( n ) );
-                        delete[] n;
-                    }
-                    cs.unlock();
-                    return anz;
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::deModelLöschen( Text *zDatei, Text *zModel ) // DateienEditor: Löscht Modell
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\xB", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    l = (char)zModel->getLength();
-                    klient->sendeEncrypted( &l, 1 );
-                    klient->sendeEncrypted( zModel->getText(), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::deSoundLöschen( Text *zDatei, Text *zSound ) // DateienEditor: Löscht Ton
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\xC", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    l = (char)zSound->getLength();
-                    klient->sendeEncrypted( &l, 1 );
-                    klient->sendeEncrypted( zSound->getText(), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-Model2DData *EditorKlient::deModelLaden( Text *zDatei, Text *zModel, FBalken *zF ) // DateienEditor: läd ein Model herunter
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\xD", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    l = (char)zModel->getLength();
-                    klient->sendeEncrypted( &l, 1 );
-                    klient->sendeEncrypted( zModel->getText(), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                    if( ret == 1 )
-                    {
-                        int anz = 0;
-                        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-                        zF->setAktionAnzahl( anz );
-                        Array< Polygon2D > *pol = new Array< Polygon2D >();
-                        for( int i = 0; i < anz; i++ )
-                        {
-                            Polygon2D p;
-                            p.schwerpunkt = new Vertex( 0, 0 );
-                            p.vertex = new Array< Vertex >();
-                            p.tKordinaten = new Array< Vertex >();
-                            klient->getNachrichtEncrypted( (char*)&p.transparent, 1 );
-                            char nLän = 0;
-                            klient->getNachrichtEncrypted( &nLän, 1 );
-                            char *txt = new char[ nLän + 1 ];
-                            if( nLän )
-                                klient->getNachrichtEncrypted( txt, nLän );
-                            txt[ nLän ] = 0;
-                            p.name = new Text( txt );
-                            delete[] txt;
-                            int anz2 = 0;
-                            klient->getNachrichtEncrypted( (char*)&anz2, 4 );
-                            for( int j = 0; j < anz2; j++ )
-                            {
-                                Vertex v;
-                                klient->getNachrichtEncrypted( (char*)&v.x, 4 );
-                                klient->getNachrichtEncrypted( (char*)&v.y, 4 );
-                                *p.schwerpunkt += v * (float)( 1.0 / anz2 );
-                                Vertex t;
-                                klient->getNachrichtEncrypted( (char*)&t.x, 4 );
-                                klient->getNachrichtEncrypted( (char*)&t.y, 4 );
-                                p.vertex->add( v );
-                                p.tKordinaten->add( t );
-                            }
-                            pol->add( p );
-                            zF->aktionPlus();
-                        }
-                        Model2DData *data = new Model2DData();
-                        data->erstelleModell( pol );
-                        cs.unlock();
-                        return data;
-                    }
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-GSL::GSLSoundV *EditorKlient::deSoundLaden( Text *zDatei, Text *zSound, FBalken *zF ) // DateienEditor: läd Sound herunter
-{
-    HMODULE gslDll = dllDateien->ladeDLL( "GSL.dll", "data/bin/GSL.dll" );
-    if( !gslDll )
-    {
-        fehler->setText( "Die DLL Datei 'data/bin/GSL.dll' wurde nicht gefunden." );
-        return 0;
-    }
-    GetGSLDatei getGSLDatei = (GetGSLDatei)GetProcAddress( gslDll, "getGSLDatei" );
-    if( !getGSLDatei )
-    {
-        fehler->setText( "Der Einstiegspunkt 'getGSLDatei' wurde in der Datei 'data/bin/GSL.dll' nicht gefunden." );
-        return 0;
-    }
-    DateiRemove( "data/tmp/editor/dateien/sounds/tmp.gsl" );
-    DateiPfadErstellen( "data/tmp/editor/dateien/sounds/tmp.gsl" );
-    GSL::GSLDateiV *gslDatei = getGSLDatei();
-    gslDatei->setDatei( "data/tmp/editor/dateien/sounds/tmp.gsl" );
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        gslDatei->release();
-        dllDateien->releaseDLL( "GSL.dll" );
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\xE", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    l = (char)zSound->getLength();
-                    klient->sendeEncrypted( &l, 1 );
-                    klient->sendeEncrypted( zSound->getText(), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                    if( ret == 1 )
-                    {
-                        DownloadSound dws( klient, zF );
-                        gslDatei->speicherSound( &dws, zSound->getText() );
-                        GSL::GSLSoundV *s = gslDatei->getSound( zSound->getText() );
-                        gslDatei->release();
-                        dllDateien->releaseDLL( "GSL.dll" );
-                        cs.unlock();
-                        return s;
-                    }
-                }
-            }
-        }
-    }
-    gslDatei->release();
-    dllDateien->releaseDLL( "GSL.dll" );
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::deModelSpeichern( Text *zDatei, Text *zModel, Model2DData *zData, FBalken *zF ) // DateienEditor: Speichert Modell
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\xF", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    l = (char)zModel->getLength();
-                    klient->sendeEncrypted( &l, 1 );
-                    klient->sendeEncrypted( zModel->getText(), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                    if( ret == 1 )
-                    {
-                        int anz = zData->polygons ? zData->polygons->getEintragAnzahl() : 0;
-                        zF->setAktionAnzahl( anz );
-                        klient->sendeEncrypted( (char*)&anz, 4 );
-                        for( int i = 0; i < anz; i++ )
-                        {
-                            Polygon2D pol = zData->polygons->get( i );
-                            klient->sendeEncrypted( (char*)&pol.transparent, 1 );
-                            char nLän = pol.name->getLength();
-                            klient->sendeEncrypted( &nLän, 1 );
-                            if( nLän )
-                                klient->sendeEncrypted( pol.name->getText(), nLän );
-                            int anz2 = pol.vertex->getEintragAnzahl();
-                            klient->sendeEncrypted( (char*)&anz2, 4 );
-                            for( int j = 0; j < anz2; j++ )
-                            {
-                                Vertex v = pol.vertex->get( j );
-                                Vertex p;
-                                if( pol.tKordinaten )
-                                    p = pol.tKordinaten->hat( j ) ? pol.tKordinaten->get( j ) : Vertex( 0, 0 );
-                                klient->sendeEncrypted( (char*)&v.x, 4 );
-                                klient->sendeEncrypted( (char*)&v.y, 4 );
-                                klient->sendeEncrypted( (char*)&p.x, 4 );
-                                klient->sendeEncrypted( (char*)&p.y, 4 );
-                            }
-                            zF->aktionPlus();
-                        }
-                        klient->getNachrichtEncrypted( &ret, 1 );
-                    }
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::deSoundSpeichern( Text *zDatei, Text *zSound, GSL::GSLSoundV *zData, FBalken *zF ) // DateienEditor: Speichert Sound
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xD", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->sendeEncrypted( "\x10", 1 );
-            klient->getNachrichtEncrypted( &ret, 1 );
-            if( ret == 1 )
-            {
-                char l = (char)zDatei->getLength();
-                klient->sendeEncrypted( &l, 1 );
-                klient->sendeEncrypted( zDatei->getText(), l );
-                klient->getNachrichtEncrypted( &ret, 1 );
-                if( ret == 1 )
-                {
-                    l = (char)zSound->getLength();
-                    klient->sendeEncrypted( &l, 1 );
-                    klient->sendeEncrypted( zSound->getText(), l );
-                    klient->getNachrichtEncrypted( &ret, 1 );
-                    if( ret == 1 )
-                    {
-                        char channels = zData->istMono() ? 1 : 2;
-                        klient->sendeEncrypted( &channels, 1 );
-                        int sample = zData->getSampleRate();
-                        klient->sendeEncrypted( (char*)&sample, 4 );
-                        __int64 slän = zData->getDatLength();
-                        klient->sendeEncrypted( (char*)&slän, 8 );
-                        zF->setAktionAnzahl( slän );
-                        zData->open();
-                        char *buffer = new char[ 2048 ];
-                        while( slän > 0 )
-                        {
-                            int l = slän > 2048 ? 2048 : (int)slän;
-                            zData->getDaten( buffer, l );
-                            klient->sende( buffer, l );
-                            slän -= l;
-                            zF->aktionPlus( l );
-                        }
-                        delete[] buffer;
-                        zData->close();
-                    }
-                }
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-int EditorKlient::getVerkaufStatistik( Array< int > *verkauft, Array< int > *einkommen, Array< int > *gespielt ) // Gibt eine Verkaufsstatistik der letzten 30 Tage zurück
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\x10", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            int kaufAnz = 0;
-            klient->getNachrichtEncrypted( (char*)&kaufAnz, 4 );
-            char anz = 0;
-            klient->getNachrichtEncrypted( &anz, 1 );
-            for( int i = 0; i < anz; i++ )
-            {
-                int kupfer = 0;
-                int kauf = 0;
-                int games = 0;
-                klient->getNachrichtEncrypted( (char*)&kupfer, 4 );
-                klient->getNachrichtEncrypted( (char*)&kauf, 4 );
-                klient->getNachrichtEncrypted( (char*)&games, 4 );
-                einkommen->add( kupfer );
-                verkauft->add( kauf );
-                gespielt->add( games );
-            }
-            cs.unlock();
-            return kaufAnz;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool EditorKlient::initEditor() // Initialisiert den Editor auf Serverseite
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( "\xE", 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool EditorKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !cs.tryLock() )
-        return 1;
-    if( !verbunden || !klient )
-    {
-        cs.unlock();
-        return 0;
-    }
-    Framework::logLine( "Verbindungstest zum Editor Server..." );
-    char res = 0;
-    bool ok = klient->sendeEncrypted( "\x5", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-        fehler->setText( "Verbindung unterbrochen: 'Keep Alive' nicht erfolgreich." );
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool EditorKlient::trenne() // trennt sich von dem Editor Server
-{
-    cs.lock();
-    if( !klient || !verbunden )
-    {
-        if( klient )
-            klient = klient->release();
-        cs.unlock();
-        return 1;
-    }
-    Framework::logLine( "Verbindung zum Editor Server wird getrennt..." );
-    char serverReturn;
-    klient->sendeEncrypted( "\4", 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        klient->getNachrichtEncrypted( nachricht, län );
-        delete[]nachricht;
-    }
-    klient->sendeEncrypted( "\3", 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    klient->trenne();
-    klient = klient->release();
-    verbunden = 0;
-    cs.unlock();
-    return 1;
-}
-
-void EditorKlient::lock()
-{
-    cs.lock();
-}
-
-void EditorKlient::unlock()
-{
-    cs.unlock();
-}
-
-Klient *EditorKlient::zKlient() // gibt den Klient zurück
-{
-    if( cs.isLocked() && cs.zOwner() && cs.zOwner()->getThreadHandle() == GetCurrentThread() )
-        return klient;
-    return 0;
-}
-
-// constant
-bool EditorKlient::istVerbunden() const // prüft, ob mit Editor Server verbunden
-{
-    return verbunden;
-}
-
-char *EditorKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler->getText();
-}
-
-// Reference Counting
-EditorKlientV *EditorKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-EditorKlientV *EditorKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 210
KSGClient/Netzwerk/Klients/HistorieK.cpp

@@ -1,210 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include "../../Global/Variablen.h"
-#include <Datei.h>
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der HistorieKlient Klasse KSGKlient.h
-// Konstruktor
-HistorieKlient::HistorieKlient()
-{
-    klient = 0;
-    fehler = new Text( "" );
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-HistorieKlient::~HistorieKlient()
-{
-    cs.lock();
-    trenne();
-    fehler = fehler->release();
-    cs.unlock();
-}
-
-// privat
-bool HistorieKlient::verbinde( char *ip, int port ) // verbindet ich mit dem Historie Server
-{
-    if( klient && klient->getServerPort() == port && Text( ip ).istGleich( klient->getServerIp() ) )
-        return 1;
-    if( klient )
-        trenne();
-    klient = new Klient();
-    Framework::logLine( ( ( Text( "Zugeteilter Historie Server:" ) += ip ) += ":" ) += port );
-    Framework::logLine( "Verbinung mit Historie Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::HISTORIE, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::HISTORIE, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( !klient->verbinde( (unsigned short)port, ip ) )
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        klient = klient->release();
-        fehler->setText( "Fehler beim verbinden mit dem Historie Server." );
-        return 0;
-    }
-    klient->sendeEncrypted( "\1", 1 );
-    klient->sendeEncrypted( (char*)&klientId, 4 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        klient->getNachrichtEncrypted( nachricht, län );
-        fehler->setText( nachricht );
-        Framework::logLine( Text( "ERROR: " ) += nachricht );
-        delete[]nachricht;
-        trenne();
-        return 0;
-    }
-    if( ret == 1 )
-    {
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-    }
-    Framework::logLine( "Erfolgreich mit Historie Server verbunden." );
-    return 1;
-}
-
-bool HistorieKlient::trenne() // trennt sich von dem Historie Server
-{
-    if( !klient )
-        return 1;
-    Framework::logLine( "Verbindung zum Historie Server wird getrennt..." );
-    char serverReturn;
-    klient->sendeEncrypted( "\4", 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        klient->getNachrichtEncrypted( nachricht, län );
-        delete[]nachricht;
-    }
-    klient->sendeEncrypted( "\3", 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    klient->trenne();
-    klient = klient->release();
-    return 1;
-}
-
-// nicht constant
-bool HistorieKlient::downloadSpielHistorie( int spielId ) // läd Spiel Historie herunter
-{
-    if( DateiIstVerzeichnis( Text( "data/tmp/historie/" ) += spielId ) )
-        return 1;
-    cs.lock();
-    int port = 0;
-    Text *ip = new Text();
-    if( !infoKlient->getHistorieServer( spielId, &port, ip ) )
-    {
-        cs.unlock();
-        ip->release();
-        fehler->setText( infoKlient->getLetzterFehler() );
-        return 0;
-    }
-    if( !verbinde( *ip, port ) )
-    {
-        cs.unlock();
-        ip->release();
-        return 0;
-    }
-    ip->release();
-    klient->sendeEncrypted( "\6", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&spielId, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            while( län )
-            {
-                char *pf = new char[ län + 1 ];
-                pf[ län ] = 0;
-                klient->getNachrichtEncrypted( pf, län );
-                __int64 gr = 0;
-                klient->getNachrichtEncrypted( (char*)&gr, 8 );
-                Text *pfad = new Text( "data/tmp/historie/" );
-                pfad->append( spielId );
-                pfad->append( pf );
-                delete[] pf;
-                Datei *d = new Datei();
-                d->setDatei( pfad );
-                d->erstellen();
-                d->open( Datei::Style::schreiben );
-                char *bytes = new char[ 2048 ];
-                while( gr )
-                {
-                    int dLän = gr > 2048 ? 2048 : (int)gr;
-                    klient->getNachricht( bytes, dLän );
-                    d->schreibe( bytes, dLän );
-                    gr -= dLän;
-                }
-                delete[] bytes;
-                d->close();
-                d->release();
-                klient->getNachrichtEncrypted( &län, 1 );
-            }
-            trenne();
-            cs.unlock();
-            return 1;
-        }
-    }
-    if( ret == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        klient->getNachrichtEncrypted( nachricht, län );
-        fehler->setText( nachricht );
-        delete[]nachricht;
-    }
-    trenne();
-    cs.unlock();
-    return 0;
-}
-
-// constant
-bool HistorieKlient::istVerbunden() const // prüft, ob mit Historie Server verbunden
-{
-    return klient != 0;
-}
-
-char *HistorieKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return *fehler;
-}
-
-// Reference Counting
-HistorieKlient *HistorieKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-HistorieKlient *HistorieKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 2097
KSGClient/Netzwerk/Klients/InformationK.cpp

@@ -1,2097 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include "../../NachLogin/Account/Historie/AccountHistorieDaten.h"
-#include <iostream>
-#include "../Keys.h"
-#include <Globals.h>
-
-int waiting = 0;
-
-// Inhalt der InformationKlient Klasse aus KSGKlient.h
-// Konstruktor
-InformationKlient::InformationKlient()
-{
-    verbunden = 0;
-    klient = 0;
-    fehler = new Text( "" );
-    klientId = getKlientId();
-    ref = 1;
-    std::cout << "Initialize CS INF\n";
-}
-
-// Destruktor
-InformationKlient::~InformationKlient() // wenn verbunden, dann trennen
-{
-    cs.lock();
-    if( klient )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            klient->sendeEncrypted( "\4", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        else
-        {
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( klient->getServerPort(), klient->getServerIp() );
-            klient->sendeEncrypted( "\1", 1 );
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            else
-            {
-                char *sl = 0;
-                char slLän = getSchlüssel( &sl );
-                klient->setSendeKey( sl, slLän );
-                klient->setEmpfangKey( sl, slLän );
-                delete[] sl;
-                klient->sendeEncrypted( "\4", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                if( serverReturn == 3 )
-                {
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *nachricht = new char[ län + 1 ];
-                    nachricht[ län ] = 0;
-                    klient->getNachrichtEncrypted( nachricht, län );
-                    delete[]nachricht;
-                }
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        klient = klient->release();
-    }
-    fehler = fehler->release();
-    cs.unlock();
-    std::cout << "DELETE CS INF\n";
-}
-
-// nicht constant
-bool InformationKlient::verbinde() // verbindet ich mit dem Informaion Server
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    if( !klient )
-    {
-        char *msIp = getMainServerIp();
-        unsigned short msPort = getMainServerPort();
-        Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
-        klient = new Klient();
-        int keyLen = 0;
-        char *key = 0;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
-        klient->setSendeKey( key, keyLen );
-        delete[] key;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
-        klient->setEmpfangKey( key, keyLen );
-        delete[] key;
-        if( !klient->verbinde( msPort, msIp ) )
-        {
-            Framework::logLine( "ERROR: Server nicht erreichbar." );
-            fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." );
-            klient = klient->release();
-            delete[]msIp;
-            cs.unlock();
-            return 0;
-        }
-        delete[]msIp;
-        klient->sende( "\0", 1 ); // Verschlüsselung aktivieren
-        klient->sendeEncrypted( "\1", 1 );
-        klient->sendeEncrypted( (char*)&klientId, 4 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 3 )
-        {
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *nachricht = new char[ län + 1 ];
-            nachricht[ län ] = 0;
-            klient->getNachrichtEncrypted( nachricht, län );
-            fehler->setText( nachricht );
-            Framework::logLine( Text( "ERROR: " ) += nachricht );
-            delete[]nachricht;
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        klient->sendeEncrypted( "\6\4", 2 );
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        if( byte == 2 )
-        {
-            unsigned char lsIp[ 4 ];
-            klient->getNachrichtEncrypted( (char *)lsIp, 4 );
-            unsigned short lsPort = 0;
-            klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            Text *lsIpT = new Text( "" );
-            lsIpT->append( (int)lsIp[ 0 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 1 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 2 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 3 ] );
-            Framework::logLine( ( ( Text( "Zugeteilter Information Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( lsPort, lsIpT->getText() );
-            lsIpT = lsIpT->release();
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        if( byte == 3 )
-        {
-            klient->getNachrichtEncrypted( &byte, 1 );
-            char *f = new char[ byte + 1 ];
-            f[ byte ] = 0;
-            klient->getNachrichtEncrypted( f, byte );
-            fehler->setText( f );
-            Framework::logLine( Text( "ERROR: " ) += f );
-            delete[]f;
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-    }
-    Framework::logLine( "Verbinung mit Information Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::INFORMATION, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
-    {
-        if( klient->sendeEncrypted( "\1", 1 ) )
-        {
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            char serverReturn = 0;
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char byte = 0;
-                klient->getNachrichtEncrypted( &byte, 1 );
-                char *f = new char[ byte + 1 ];
-                f[ byte ] = 0;
-                klient->getNachrichtEncrypted( f, byte );
-                fehler->setText( f );
-                Framework::logLine( Text( "ERROR: " ) += f );
-                delete[]f;
-                klient->sendeEncrypted( "\3", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                klient->trenne();
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            klient->setSendeKey( sl, slLän );
-            klient->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            verbunden = 1;
-            cs.unlock();
-            Framework::logLine( "Erfolgreich mit Information Server verbunden." );
-            return 1;
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
-            fehler->setText( "Der dir zugewiesene Informations Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
-            klient = klient->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        fehler->setText( "Der dir zugewiesene Informations Server antwortet nicht. Bitte versuche es Später erneut." );
-        klient = klient->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::getInformationText( Text *txt, int *typ ) // fragt nach Informationstext
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    bool ret = 1;
-    ret = ret & klient->sendeEncrypted( "\5", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    short län = 0;
-    ret = ret & klient->getNachrichtEncrypted( (char*)&län, 2 );
-    char *text = new char[ län + 1 ];
-    text[ län ] = 0;
-    if( län )
-        ret = ret & klient->getNachrichtEncrypted( text, län );
-    txt->setText( text );
-    delete[]text;
-    char type = 0;
-    ret = ret & klient->getNachrichtEncrypted( &type, 1 );
-    *typ = type;
-    if( !ret )
-        fehler->setText( "Verbindungsfehler" );
-    cs.unlock();
-    return ret;
-}
-
-bool InformationKlient::istSpielErlaubt( int spielId ) // fragt, ob das entsprechende Spiel vom Server gesperrt wurde
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\6", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&spielId, 4 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret != 0;
-}
-
-bool InformationKlient::istKarteErlaubt( int karteId ) // fragt, ob die entsprechende Karte vom Server gesperrt wurde
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\7", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&karteId, 4 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret != 0;
-}
-
-int InformationKlient::getKarteId( char *name ) // fragt nach der Id einer Karte
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x9", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    char län = textLength( name );
-    klient->sendeEncrypted( &län, 1 );
-    klient->sendeEncrypted( name, län );
-    int id = 0;
-    klient->getNachrichtEncrypted( (char*)&id, 4 );
-    cs.unlock();
-    return id;
-}
-
-int InformationKlient::getSpielId( char *name ) // fragt nach der id eines Spiels
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x8", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    char län = textLength( name );
-    klient->sendeEncrypted( &län, 1 );
-    klient->sendeEncrypted( name, län );
-    int id = 0;
-    klient->getNachrichtEncrypted( (char*)&id, 4 );
-    cs.unlock();
-    return id;
-}
-
-Text *InformationKlient::getSpielerName( int accountId ) // fragt nach dem Namen eines Accounts
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xA", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&accountId, 4 );
-    char län = 0;
-    klient->getNachrichtEncrypted( &län, 1 );
-    char *name = new char[ län + 1 ];
-    name[ län ] = 0;
-    if( län )
-        klient->getNachrichtEncrypted( name, län );
-    Text *ret = new Text( name );
-    delete[]name;
-    cs.unlock();
-    return ret;
-}
-
-bool InformationKlient::getSpielStatistik( int accountId, int spielId, Array< int > *werte ) // fragt nach der Spiel Statistik eines Accounts
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    bool ret = 1;
-    ret = ret & klient->sendeEncrypted( "\xB", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    ret = ret & klient->sendeEncrypted( (char*)&accountId, 4 );
-    ret = ret & klient->sendeEncrypted( (char*)&spielId, 4 );
-    for( int i = 0; i < 10; i++ )
-    {
-        int tmp = 0;
-        ret = ret & klient->getNachrichtEncrypted( (char*)&tmp, 4 );
-        werte->add( tmp, i );
-    }
-    if( !ret )
-        fehler->setText( "Verbindungsfehler" );
-    cs.unlock();
-    return ret;
-}
-
-Text *InformationKlient::getKarteName( int karteId ) // fragt nach dem Namen einer Karte
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xE", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&karteId, 4 );
-    char län = 0;
-    klient->getNachrichtEncrypted( &län, 1 );
-    char *name = new char[ län + 1 ];
-    name[ län ] = 0;
-    if( län )
-        klient->getNachrichtEncrypted( name, län );
-    Text *ret = new Text( name );
-    delete[]name;
-    cs.unlock();
-    return ret;
-}
-
-Text *InformationKlient::getSpielName( int spielId ) // fragt nach dem Namen einer Spielart
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xF", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&spielId, 4 );
-    char län = 0;
-    klient->getNachrichtEncrypted( &län, 1 );
-    char *name = new char[ län + 1 ];
-    name[ län ] = 0;
-    if( län )
-        klient->getNachrichtEncrypted( name, län );
-    Text *ret = new Text( name );
-    delete[]name;
-    cs.unlock();
-    return ret;
-}
-
-Text *InformationKlient::getChatroomName( int chatroomId ) // fragt nach dem Namen eines Chatrooms
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x10", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&chatroomId, 4 );
-    char län = 0;
-    klient->getNachrichtEncrypted( &län, 1 );
-    char *name = new char[ län + 1 ];
-    name[ län ] = 0;
-    if( län )
-        klient->getNachrichtEncrypted( name, län );
-    Text *ret = new Text( name );
-    delete[]name;
-    cs.unlock();
-    return ret;
-}
-
-int InformationKlient::getSpielId( int karteId ) // fragt zu welcher Spielart die Karte gehört
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x11", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&karteId, 4 );
-    int ret = 0;
-    klient->getNachrichtEncrypted( (char*)&ret, 4 );
-    cs.unlock();
-    return ret;
-}
-
-int InformationKlient::getAccountId( char *name ) // gibt die Id des Accounts zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char län = textLength( name );
-    if( !län )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x12", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( &län, 1 );
-    klient->sendeEncrypted( name, län );
-    int ret = 0;
-    klient->getNachrichtEncrypted( (char*)&ret, 4 );
-    cs.unlock();
-    return ret;
-}
-
-int InformationKlient::getChatroomId( char *name ) // gibt die Id des Chatrooms zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char län = textLength( name );
-    if( !län )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x13", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( &län, 1 );
-    klient->sendeEncrypted( name, län );
-    int ret = 0;
-    klient->getNachrichtEncrypted( (char*)&ret, 4 );
-    cs.unlock();
-    return ret;
-}
-
-int InformationKlient::getGruppenKarteId( int gruppenId ) // gibt die karten Id der gruppe zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xD", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppenId, 4 );
-    int id = 0;
-    klient->getNachrichtEncrypted( (char*)&id, 4 );
-    cs.unlock();
-    return id;
-}
-
-bool InformationKlient::getGruppeSpielerHinzufügen( int gruppeId ) // gibt die Spieler hinzufügen Funktion der Gruppe zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x1E", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    char sh = 0;
-    klient->getNachrichtEncrypted( (char*)&sh, 1 );
-    cs.unlock();
-    return sh == 1;
-}
-
-int InformationKlient::getGruppeAdminId( int gruppeId ) // gibt den Gruppen Administrator zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x15", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&gruppeId, 4 );
-    int id = 0;
-    klient->getNachrichtEncrypted( (char*)&id, 4 );
-    cs.unlock();
-    return id;
-}
-
-int InformationKlient::getSpielerPunkte( int accountId, int spielId ) // gibt die Punkte eines Spielers zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x14", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[]f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&spielId, 4 );
-    klient->sendeEncrypted( (char*)&accountId, 4 );
-    int punkte = 0;
-    klient->getNachrichtEncrypted( (char*)&punkte, 4 );
-    cs.unlock();
-    return punkte;
-}
-
-Array< int > *InformationKlient::getAccountSpielArtListe() // gibt eine Liste mit gekauften Spielen zurück
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x16", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        Array< int > *list = new Array< int >();
-        for( int i = 0; i < anz; i++ )
-        {
-            int id = 0;
-            klient->getNachrichtEncrypted( (char*)&id, 4 );
-            list->add( id );
-        }
-        cs.unlock();
-        return list;
-    }
-    if( ref == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int InformationKlient::getSpielVersion( int spielId ) // gibt die neuste Version eines Spiels zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x17", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&spielId, 4 );
-    int version = 0;
-    klient->getNachrichtEncrypted( (char*)&version, 4 );
-    cs.unlock();
-    return version;
-}
-
-int InformationKlient::getKupfer() // gibt das Kupfer des Accounts zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x18", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    int kupfer = 0;
-    klient->getNachrichtEncrypted( (char*)&kupfer, 4 );
-    cs.unlock();
-    return kupfer;
-}
-
-int InformationKlient::getDateiGruppeIdVonSpiel( int spielId ) // Gibt die Dateigruppe eines Spieles zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x19", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&spielId, 4 );
-    int dgId = 0;
-    klient->getNachrichtEncrypted( (char*)&dgId, 4 );
-    cs.unlock();
-    return dgId;
-}
-
-Text *InformationKlient::getDateiGruppePfad( int dgId ) // Gibt den Dateigruppen Pfad zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x1A", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 1 )
-    {
-        klient->sendeEncrypted( (char*)&dgId, 4 );
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 1 )
-        {
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *pf = new char[ län + 1 ];
-            pf[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( pf, län );
-            Text *pfad = new Text( pf );
-            delete[] pf;
-            cs.unlock();
-            return pfad;
-        }
-    }
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-Array< int > *InformationKlient::getAccountKarteListe( int spielId ) // gibt eine Liste mit gekauften Karten zurück
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x1B", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&spielId, 4 );
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        Array< int > *list = new Array< int >();
-        for( int i = 0; i < anz; i++ )
-        {
-            int id = 0;
-            klient->getNachrichtEncrypted( (char*)&id, 4 );
-            list->add( id );
-        }
-        cs.unlock();
-        return list;
-    }
-    if( ref == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int InformationKlient::getDateiGruppeIdVonPfad( char *pfad ) // Gibt die Dateigruppe eines Pfades zurück
-{
-    char län = textLength( pfad );
-    if( !län )
-        return 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x2A", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&län, 1 );
-    klient->sendeEncrypted( (char*)pfad, län );
-    int dgId = 0;
-    klient->getNachrichtEncrypted( (char*)&dgId, 4 );
-    cs.unlock();
-    return dgId;
-}
-
-int InformationKlient::getDateiGruppeVersion( int dg ) // gibt die neuste Version einer Dateigruppe zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x2B", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&dg, 4 );
-    int version = 0;
-    klient->getNachrichtEncrypted( (char*)&version, 4 );
-    cs.unlock();
-    return version;
-}
-
-int InformationKlient::getSpielerListe( char *suche, int *seite, int *maxSeite, char sortSpalte, char rückwärts,
-                                        Array< int > *accounts, RCArray< Text > *name, RCArray< Text > *zuletztOnline,
-                                        RCArray< Text > *letztesSpiel, RCArray< Text > *letzteKarte, RCArray< Text > *punkte ) // sucht nach Spielern
-{
-    char län = textLength( suche );
-    if( !län )
-        return -1;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return -1;
-    }
-    char serverReturn = 0;
-    klient->sendeEncrypted( "\xC", 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 1 )
-    {
-        klient->sendeEncrypted( &län, 1 );
-        klient->sendeEncrypted( suche, län );
-        klient->sendeEncrypted( (char*)seite, 4 );
-        klient->sendeEncrypted( &sortSpalte, 1 );
-        klient->sendeEncrypted( &rückwärts, 1 );
-        klient->getNachrichtEncrypted( (char*)seite, 4 );
-        klient->getNachrichtEncrypted( (char*)maxSeite, 4 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        for( int i = 0; i < ret; i++ )
-        {
-            int accId = 0;
-            klient->getNachrichtEncrypted( (char*)&accId, 4 );
-            accounts->set( accId, i );
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            klient->getNachrichtEncrypted( txt, län );
-            name->set( new Text( txt ), i );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            klient->getNachrichtEncrypted( txt, län );
-            zuletztOnline->set( new Text( txt ), i );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            klient->getNachrichtEncrypted( txt, län );
-            letztesSpiel->set( new Text( txt ), i );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            klient->getNachrichtEncrypted( txt, län );
-            letzteKarte->set( new Text( txt ), i );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            klient->getNachrichtEncrypted( txt, län );
-            punkte->set( new Text( txt ), i );
-            delete[] txt;
-        }
-        cs.unlock();
-        return ret;
-    }
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-    }
-    cs.unlock();
-    return -1;
-}
-
-bool InformationKlient::getSpielerAktivität( int accId, RCArray< Text > *datum, Array< double > *stOnline, Array< double > *stGespielt,
-                                             Array< int > *anzSpiele, Array< int > *anzGewonnen ) // ermittelt die aktivität eines Spielers
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char ret = 0;
-    klient->sendeEncrypted( "\x1F", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&accId, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            klient->getNachrichtEncrypted( &ret, 1 );
-            for( int i = 0; ret; i++ )
-            {
-                char *txt = new char[ ret + 1 ];
-                txt[ ret ] = 0;
-                klient->getNachrichtEncrypted( txt, ret );
-                datum->set( new Text( txt ), i );
-                delete[] txt;
-                double sto = 0;
-                klient->getNachrichtEncrypted( (char*)&sto, 8 );
-                stOnline->set( sto, i );
-                double sts = 0;
-                klient->getNachrichtEncrypted( (char*)&sts, 8 );
-                stGespielt->set( sts, i );
-                int anzs = 0;
-                klient->getNachrichtEncrypted( (char*)&anzs, 4 );
-                anzSpiele->set( anzs, i );
-                int anzg = 0;
-                klient->getNachrichtEncrypted( (char*)&anzg, 4 );
-                anzGewonnen->set( anzg, i );
-                klient->getNachrichtEncrypted( &ret, 1 );
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-int InformationKlient::getAccountKarteSpiele( int account, int karte ) // Gibt zurück, wie oft ein Spieler eine Karte schon gespielt hat
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char ret = 0;
-    klient->sendeEncrypted( "\x20", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        klient->sendeEncrypted( (char*)&karte, 4 );
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        cs.unlock();
-        return anz;
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int InformationKlient::getAccountKarteSpieleGewonnen( int account, int karte ) // Gibt zurück, wie oft ein Spieler eine Karte schon gewonnen hat
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char ret = 0;
-    klient->sendeEncrypted( "\x21", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        klient->sendeEncrypted( (char*)&karte, 4 );
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        cs.unlock();
-        return anz;
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::hatAccountKarte( int account, int karte ) // Gibt zurück, ob ein Spieler die Karte im Besitz hat
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char ret = 0;
-    klient->sendeEncrypted( "\x22", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        klient->sendeEncrypted( (char*)&karte, 4 );
-        char status = 0;
-        klient->getNachrichtEncrypted( &status, 1 );
-        cs.unlock();
-        return status != 0;
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::hatAccountSpiel( int account, int spiel ) // Gibt zurück, ob ein Spieler ein Spiel im Besitz hat
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char ret = 0;
-    klient->sendeEncrypted( "\x23", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        klient->sendeEncrypted( (char*)&spiel, 4 );
-        char status = 0;
-        klient->getNachrichtEncrypted( &status, 1 );
-        cs.unlock();
-        return status != 0;
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-Array< int > *InformationKlient::getAccountKarteGespieltListe( int account, int spielId ) // gibt eine Liste mit Karten zurück, die von einem Spieler bereits gespielt wurden
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x24", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        klient->sendeEncrypted( (char*)&spielId, 4 );
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        Array< int > *ret = new Array< int >();
-        for( int i = 0; i < anz; i++ )
-        {
-            int val = 0;
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            ret->set( val, i );
-        }
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-Array< int > *InformationKlient::getAccountSpielGespieltListe( int account ) // gibt eine Liste mit Spielen zurück, die von einem Spieler bereits gespielt wurden
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x25", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        Array< int > *ret = new Array< int >();
-        for( int i = 0; i < anz; i++ )
-        {
-            int val = 0;
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            ret->set( val, i );
-        }
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::getSpielPartnerListe( int account, Array< int > *spieler, Array< int > *karten, Array< int > *anzahl ) // Gibt eine Liste von Spiel Partnern eines Spielers zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x26", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        for( int i = 0; i < anz; i++ )
-        {
-            int val = 0;
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            spieler->set( val, i );
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            karten->set( val, i );
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            anzahl->set( val, i );
-        }
-        cs.unlock();
-        return 1;
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::getStatistikListe( int account, int *seite, int *maxSeite, char sortSpalte, char rückwärts,
-                                           RCArray< Array< int > > *werte, RCArray< Text > *namen ) // Gibt eine Liste mit Spiel Statistiken zurück
-{
-    if( !*seite )
-        *seite = 1;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char serverReturn = 0;
-    klient->sendeEncrypted( "\x27", 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        klient->sendeEncrypted( (char*)seite, 4 );
-        klient->sendeEncrypted( &sortSpalte, 1 );
-        klient->sendeEncrypted( &rückwärts, 1 );
-        klient->getNachrichtEncrypted( (char*)seite, 4 );
-        klient->getNachrichtEncrypted( (char*)maxSeite, 4 );
-        int zAnz = 0;
-        int sAnz = 0;
-        klient->getNachrichtEncrypted( (char*)&zAnz, 4 );
-        klient->getNachrichtEncrypted( (char*)&sAnz, 4 );
-        for( int i = 0; i < zAnz; i++ )
-        {
-            Array< int > *tmp = new Array< int >();
-            for( int j = 0; j < sAnz; j++ )
-            {
-                if( j != 1 )
-                {
-                    int val = 0;
-                    klient->getNachrichtEncrypted( (char*)&val, 4 );
-                    tmp->set( val, j );
-                }
-                else
-                {
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *n = new char[ län + 1 ];
-                    n[ län ] = 0;
-                    if( län )
-                        klient->getNachrichtEncrypted( n, län );
-                    namen->set( new Text( n ), i );
-                    delete[] n;
-                }
-            }
-            werte->set( tmp, i );
-        }
-        cs.unlock();
-        return 1;
-    }
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-    }
-    cs.unlock();
-    return 0;
-}
-
-AHDaten *InformationKlient::getSpielHistorieDaten( int account ) // Gibt eine Liste mit den letzten 20 Spielen zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x28", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&account, 4 );
-        AHDaten *ret = new AHDaten();
-        char anz = 0;
-        klient->getNachrichtEncrypted( &anz, 1 );
-        for( char i = 0; i < anz; i++ )
-        {
-            AHSpielDaten *spiel = new AHSpielDaten();
-            klient->getNachrichtEncrypted( (char*)&spiel->id, 4 );
-            klient->getNachrichtEncrypted( (char*)&spiel->karteId, 4 );
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            spiel->spiel->setText( txt );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            spiel->karte->setText( txt );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            spiel->datum->setText( txt );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            spiel->status->setText( txt );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            spiel->dauer->setText( txt );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            spiel->spielStatus->setText( txt );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            spiel->gewinner->setText( txt );
-            delete[] txt;
-            klient->getNachrichtEncrypted( (char*)&spiel->sAnzahl, 4 );
-            char tAnz = 0;
-            klient->getNachrichtEncrypted( &tAnz, 1 );
-            for( char j = 0; j < tAnz; j++ )
-            {
-                AHSpielTeamDaten *team = new AHSpielTeamDaten();
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *txt = new char[ län + 1 ];
-                txt[ län ] = 0;
-                if( län )
-                    klient->getNachrichtEncrypted( txt, län );
-                team->name->setText( txt );
-                delete[] txt;
-                klient->getNachrichtEncrypted( (char*)&team->sAnzahl, 4 );
-                klient->getNachrichtEncrypted( &län, 1 );
-                txt = new char[ län + 1 ];
-                txt[ län ] = 0;
-                if( län )
-                    klient->getNachrichtEncrypted( txt, län );
-                team->status->setText( txt );
-                delete[] txt;
-                klient->getNachrichtEncrypted( (char*)&team->farbe, 4 );
-                char sAnz = 0;
-                klient->getNachrichtEncrypted( &sAnz, 1 );
-                for( char k = 0; k < sAnz; k++ )
-                {
-                    AHSpielSpielerDaten *spieler = new AHSpielSpielerDaten();
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *txt = new char[ län + 1 ];
-                    txt[ län ] = 0;
-                    if( län )
-                        klient->getNachrichtEncrypted( txt, län );
-                    spieler->name->setText( txt );
-                    delete[] txt;
-                    klient->getNachrichtEncrypted( (char*)&spieler->punkte, 4 );
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    txt = new char[ län + 1 ];
-                    txt[ län ] = 0;
-                    if( län )
-                        klient->getNachrichtEncrypted( txt, län );
-                    spieler->status->setText( txt );
-                    delete[] txt;
-                    klient->getNachrichtEncrypted( (char*)&spieler->farbe, 4 );
-                    team->spieler->set( spieler, k );
-                }
-                spiel->teams->set( team, j );
-            }
-            ret->spiele->set( spiel, i );
-        }
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::getHistorieServer( int spielId, int *port, Text *ip ) // sucht nach dem Historie Server von einem Spiel
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x29", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&spielId, 4 );
-        klient->getNachrichtEncrypted( (char*)&ret, 1 );
-        if( ret == 1 )
-        {
-            klient->getNachrichtEncrypted( (char*)port, 4 );
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            ip->fillText( ' ', län );
-            klient->getNachrichtEncrypted( ip->getText(), län );
-            cs.unlock();
-            return 1;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Information Server..." );
-    bool ok = klient->sendeEncrypted( "\x2C", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool InformationKlient::hatRecht( int recht ) // Prüft ob Berechtigung vorhanden
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x2D", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&recht, 4 );
-        klient->getNachrichtEncrypted( (char*)&ret, 1 );
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-int InformationKlient::getKartenListe( char *filter, char sortSpalte, char absteigend, Array< int > *kId, RCArray< Text > *kName, RCArray< Text > *sName,
-                                       Array< int > *kupfer, Array< int > *verkauft, Array< int > *maxSpieler ) // Gibt eine Liste mit Karten zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x2E", 1 );
-    char res = 0;
-    klient->getNachrichtEncrypted( &res, 1 );
-    int ret = 0;
-    if( res == 1 )
-    {
-        char län = textLength( filter );
-        klient->sendeEncrypted( &län, 1 );
-        klient->sendeEncrypted( filter, län );
-        klient->sendeEncrypted( &sortSpalte, 1 );
-        klient->sendeEncrypted( &absteigend, 1 );
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        for( int i = 0; i < ret; i++ )
-        {
-            int val = 0;
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            kId->set( val, i );
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            kName->set( new Text( txt ), i );
-            delete[] txt;
-            klient->getNachrichtEncrypted( &län, 1 );
-            txt = new char[ län + 1 ];
-            txt[ län ] = 0;
-            if( län )
-                klient->getNachrichtEncrypted( txt, län );
-            sName->set( new Text( txt ), i );
-            delete[] txt;
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            kupfer->set( val, i );
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            verkauft->set( val, i );
-            klient->getNachrichtEncrypted( (char*)&val, 4 );
-            maxSpieler->set( val, i );
-        }
-    }
-    if( res == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-    }
-    cs.unlock();
-    return ret;
-}
-
-bool InformationKlient::getEditorServer( int karteId, int *port, Text *ip ) // sucht nach dem Editor Server von einer Karte
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x2F", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&karteId, 4 );
-        klient->getNachrichtEncrypted( (char*)&ret, 1 );
-        if( ret == 1 )
-        {
-            klient->getNachrichtEncrypted( (char*)port, 4 );
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            ip->fillText( ' ', län );
-            klient->getNachrichtEncrypted( ip->getText(), län );
-            cs.unlock();
-            return 1;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::getKartenServer( int karteId, int *port, Text *ip ) // sucht nach dem Karten Server von einer Karte
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x30", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&karteId, 4 );
-        klient->getNachrichtEncrypted( (char*)&ret, 1 );
-        if( ret == 1 )
-        {
-            klient->getNachrichtEncrypted( (char*)port, 4 );
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            ip->fillText( ' ', län );
-            klient->getNachrichtEncrypted( ip->getText(), län );
-            cs.unlock();
-            return 1;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool InformationKlient::trenne() // trennt sich von dem Informaion Server
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    Framework::logLine( "Verbindung zum Information Server wird getrennt..." );
-    klient->sendeEncrypted( "\3", 1 );
-    Sleep( 100 );
-    klient->trenne();
-    verbunden = 0;
-    cs.unlock();
-    return 1;
-}
-
-// constant
-bool InformationKlient::istVerbunden() const // prüft, ob mit Informaion Server verbunden
-{
-    return verbunden;
-}
-
-char *InformationKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler->getText();
-}
-
-// Reference Counting
-InformationKlientV *InformationKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-InformationKlientV *InformationKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 472
KSGClient/Netzwerk/Klients/KartenK.cpp

@@ -1,472 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include <Datei.h>
-#include "../../Global/Variablen.h"
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der KartenKlient Klasse aus KSGKlient.h
-// Konstruktor
-KartenKlient::KartenKlient()
-{
-    verbunden = 0;
-    klient = 0;
-    fehler = new Text( "" );
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-KartenKlient::~KartenKlient()
-{
-    cs.lock();
-    if( verbunden )
-        trenne();
-    fehler = fehler->release();
-    cs.unlock();
-}
-
-// nicht constant
-bool KartenKlient::verbinde( unsigned short port, char *ip ) // verbindet ich mit dem Karten Server
-{
-    if( klient && verbunden && klient->getServerPort() == port && Text( ip ).istGleich( klient->getServerIp() ) )
-        return 1;
-    if( klient || verbunden )
-        trenne();
-    klient = new Klient();
-    Framework::logLine( ( ( Text( "Zugeteilter Karten Server:" ) += ip ) += ":" ) += port );
-    Framework::logLine( "Verbinung mit Karten Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::KARTEN, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::KARTEN, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( !klient->verbinde( (unsigned short)port, ip ) )
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        klient = klient->release();
-        fehler->setText( "Fehler beim verbinden mit dem Editor Server." );
-        return 0;
-    }
-    klient->sendeEncrypted( "\1", 1 );
-    klient->sendeEncrypted( (char*)&klientId, 4 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        klient->getNachrichtEncrypted( nachricht, län );
-        fehler->setText( nachricht );
-        Framework::logLine( Text( "ERROR: " ) += nachricht );
-        delete[]nachricht;
-        trenne();
-        return 0;
-    }
-    if( ret == 1 )
-    {
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        verbunden = 1;
-    }
-    Framework::logLine( "Erfolgreich mit Karten Server verbunden." );
-    return 1;
-}
-
-bool KartenKlient::downloadKarte( int id ) // läd die Karte herunter
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x6", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 2 )
-        { // update
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Karte wird momentan aktualisiert." ), new Text( "Ok" ) );
-            cs.unlock();
-            return 0;
-        }
-        else if( ret == 1 )
-        {
-            int anz = 0;
-            klient->getNachrichtEncrypted( (char*)&anz, 4 );
-            for( int i = 0; i < anz; i++ )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                if( !län )
-                    continue;
-                char *pf = new char[ län + 1 ];
-                pf[ län ] = 0;
-                klient->getNachrichtEncrypted( pf, län );
-                __int64 größe = 0;
-                klient->getNachrichtEncrypted( (char*)&größe, 8 );
-                char *buffer = new char[ 2048 ];
-                Text pfad = "data/tmp/Karten/";
-                pfad += id;
-                pfad += "/spiel";
-                pfad += pf;
-                delete[] pf;
-                Datei d;
-                d.setDatei( pfad );
-                d.erstellen();
-                d.open( Datei::Style::schreiben );
-                while( größe )
-                {
-                    int l = größe >= 2048 ? 2048 : (int)größe;
-                    klient->getNachricht( buffer, l );
-                    d.schreibe( buffer, l );
-                    größe -= l;
-                }
-                d.close();
-                delete[] buffer;
-            }
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool KartenKlient::downloadKarteTitel( int id ) // läd das Titelbild einer Karte herunter
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x8", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 2 )
-        { // update
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Karte wird momentan aktualisiert." ), new Text( "Ok" ) );
-            cs.unlock();
-            return 0;
-        }
-        else if( ret == 1 )
-        {
-            __int64 größe = 0;
-            klient->getNachrichtEncrypted( (char*)&größe, 8 );
-            char *buffer = new char[ 2048 ];
-            Text pfad = "data/tmp/Karten/";
-            pfad += id;
-            pfad += "/titel.ltdb";
-            Datei d;
-            d.setDatei( pfad );
-            d.erstellen();
-            d.open( Datei::Style::schreiben );
-            while( größe )
-            {
-                int l = größe >= 2048 ? 2048 : (int)größe;
-                klient->getNachricht( buffer, l );
-                d.schreibe( buffer, l );
-                größe -= l;
-            }
-            d.close();
-            delete[] buffer;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool KartenKlient::downloadKarteBeschreibung( int id ) // läd die Beschreibung einer Karte herunter
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x9", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 2 )
-        { // update
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Karte wird momentan aktualisiert." ), new Text( "Ok" ) );
-            cs.unlock();
-            return 0;
-        }
-        else if( ret == 1 )
-        {
-            __int64 größe = 0;
-            klient->getNachrichtEncrypted( (char*)&größe, 8 );
-            char *buffer = new char[ 2048 ];
-            Text pfad = "data/tmp/Karten/";
-            pfad += id;
-            pfad += "/beschreibung.ksgs";
-            Datei d;
-            d.setDatei( pfad );
-            d.erstellen();
-            d.open( Datei::Style::schreiben );
-            while( größe )
-            {
-                int l = größe >= 2048 ? 2048 : (int)größe;
-                klient->getNachricht( buffer, l );
-                d.schreibe( buffer, l );
-                größe -= l;
-            }
-            d.close();
-            delete[] buffer;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool KartenKlient::downloadKarteMinimap( int id ) // läd die Minimap einer Karte herunter
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xA", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 2 )
-        { // update
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Karte wird momentan aktualisiert." ), new Text( "Ok" ) );
-            cs.unlock();
-            return 0;
-        }
-        else if( ret == 1 )
-        {
-            __int64 größe = 0;
-            klient->getNachrichtEncrypted( (char*)&größe, 8 );
-            char *buffer = new char[ 2048 ];
-            Text pfad = "data/tmp/Karten/";
-            pfad += id;
-            pfad += "/minimap.ltdb";
-            Datei d;
-            d.setDatei( pfad );
-            d.erstellen();
-            d.open( Datei::Style::schreiben );
-            while( größe )
-            {
-                int l = größe >= 2048 ? 2048 : (int)größe;
-                klient->getNachricht( buffer, l );
-                d.schreibe( buffer, l );
-                größe -= l;
-            }
-            d.close();
-            delete[] buffer;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool KartenKlient::downloadKarteLadebild( int id ) // läd das Ladebild einer Karte herunter
-{
-    cs.lock();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xB", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 2 )
-        { // update
-            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Karte wird momentan aktualisiert." ), new Text( "Ok" ) );
-            cs.unlock();
-            return 0;
-        }
-        else if( ret == 1 )
-        {
-            __int64 größe = 0;
-            klient->getNachrichtEncrypted( (char*)&größe, 8 );
-            char *buffer = new char[ 2048 ];
-            Text pfad = "data/tmp/Karten/";
-            pfad += id;
-            pfad += "/ladebild.ltdb";
-            Datei d;
-            d.setDatei( pfad );
-            d.erstellen();
-            d.open( Datei::Style::schreiben );
-            while( größe )
-            {
-                int l = größe >= 2048 ? 2048 : (int)größe;
-                klient->getNachricht( buffer, l );
-                d.schreibe( buffer, l );
-                größe -= l;
-            }
-            d.close();
-            delete[] buffer;
-        }
-    }
-    if( ret == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        char *f = new char[ byte + 1 ];
-        f[ byte ] = 0;
-        klient->getNachrichtEncrypted( f, byte );
-        fehler->setText( f );
-        delete[] f;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool KartenKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Karten Server..." );
-    bool ok = klient->sendeEncrypted( "\x5", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-        fehler->setText( "Verbindung unterbrochen: 'Keep Alive' nicht erfolgreich." );
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool KartenKlient::trenne() // trennt sich von dem Editor Server
-{
-    if( !klient || !verbunden )
-    {
-        if( klient )
-            klient = klient->release();
-        return 1;
-    }
-    Framework::logLine( "Verbindung zum Karten Server wird getrennt..." );
-    char serverReturn;
-    klient->sendeEncrypted( "\4", 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char län = 0;
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        klient->getNachrichtEncrypted( nachricht, län );
-        delete[]nachricht;
-    }
-    klient->sendeEncrypted( "\3", 1 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    klient->trenne();
-    klient = klient->release();
-    return 1;
-}
-
-// constant
-bool KartenKlient::istVerbunden() const // prüft, ob mit Editor Server verbunden
-{
-    return verbunden;
-}
-
-char *KartenKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler->getText();
-}
-
-// Reference Counting
-KartenKlient *KartenKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-KartenKlient *KartenKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 504
KSGClient/Netzwerk/Klients/LoginK.cpp

@@ -1,504 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der LoginKlient Klase aus KSGKlient.h
-// Konstruktor 
-LoginKlient::LoginKlient()
-{
-    verbunden = 0;
-    fehler = 0;
-    brauchKick = 0;
-    klient = 0;
-    klientId = getKlientId();
-    accountId = 0;
-    ref = 1;
-}
-
-// Destruktor 
-LoginKlient::~LoginKlient() // wenn verbunden, dann trennen
-{
-    cs.lock();
-    if( klient )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            if( brauchKick )
-                klient->sendeEncrypted( "\0", 1 );
-            klient->sendeEncrypted( "\4", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        else
-        {
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::LOGIN, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::LOGIN, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( klient->getServerPort(), klient->getServerIp() );
-            klient->sendeEncrypted( "\1", 1 );
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            else
-            {
-                char *sl = 0;
-                char slLän = getSchlüssel( &sl );
-                klient->setSendeKey( sl, slLän );
-                klient->setEmpfangKey( sl, slLän );
-                delete[] sl;
-                klient->sendeEncrypted( "\4", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                if( serverReturn == 3 )
-                {
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *nachricht = new char[ län + 1 ];
-                    nachricht[ län ] = 0;
-                    klient->getNachrichtEncrypted( nachricht, län );
-                    delete[]nachricht;
-                }
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        klient = klient->release();
-    }
-    delete[]fehler;
-    cs.unlock();
-}
-
-// nicht constant
-bool LoginKlient::verbinde() // verbindet sich mit dem Login Server
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    brauchKick = 0;
-    if( !klient )
-    {
-        char *msIp = getMainServerIp();
-        unsigned short msPort = getMainServerPort();
-        Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
-        klient = new Klient();
-        int keyLen = 0;
-        char *key = 0;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
-        klient->setSendeKey( key, keyLen );
-        delete[] key;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
-        klient->setEmpfangKey( key, keyLen );
-        delete[] key;
-        if( !klient->verbinde( msPort, msIp ) )
-        {
-            Framework::logLine( "ERROR: Server nicht erreichbar." );
-            char *err = "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut.";
-            delete[]fehler;
-            fehler = new char[ textLength( err ) + 1 ];
-            fehler[ textLength( err ) ] = 0;
-            memcpy( fehler, err, textLength( err ) );
-            klient = klient->release();
-            delete[]msIp;
-            cs.unlock();
-            return 0;
-        }
-        delete[]msIp;
-        klient->sende( "\0", 1 ); // verschlüsselung aktivieren
-        klient->sendeEncrypted( "\1", 1 );
-        klient->sendeEncrypted( (char*)&klientId, 4 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 3 )
-        {
-            char byte = 0;
-            klient->getNachrichtEncrypted( &byte, 1 );
-            delete[]fehler;
-            fehler = new char[ byte + 1 ];
-            fehler[ byte ] = 0;
-            klient->getNachrichtEncrypted( fehler, byte );
-            Framework::logLine( Text( "ERROR: " ) += fehler );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        klient->sendeEncrypted( "\6\3", 2 );
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        if( byte == 2 )
-        {
-            unsigned char lsIp[ 4 ];
-            klient->getNachrichtEncrypted( (char *)lsIp, 4 );
-            unsigned short lsPort = 0;
-            klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            Text *lsIpT = new Text( "" );
-            lsIpT->append( (int)lsIp[ 0 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 1 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 2 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 3 ] );
-            Framework::logLine( ( ( Text( "Zugeteilter Login Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::LOGIN, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::LOGIN, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( lsPort, lsIpT->getText() );
-            lsIpT = lsIpT->release();
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        if( byte == 3 )
-        {
-            klient->getNachrichtEncrypted( &byte, 1 );
-            delete[]fehler;
-            fehler = new char[ byte + 1 ];
-            fehler[ byte ] = 0;
-            klient->getNachrichtEncrypted( fehler, byte );
-            Framework::logLine( Text( "ERROR: " ) += fehler );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-    }
-    Framework::logLine( "Verbinung mit Login Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::LOGIN, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::LOGIN, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
-    {
-        if( klient->sendeEncrypted( "\1", 1 ) )
-        {
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            char serverReturn = 0;
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char byte = 0;
-                klient->getNachrichtEncrypted( &byte, 1 );
-                delete[]fehler;
-                fehler = new char[ byte + 1 ];
-                fehler[ byte ] = 0;
-                klient->getNachrichtEncrypted( fehler, byte );
-                Framework::logLine( Text( "ERROR: " ) += fehler );
-                klient->sendeEncrypted( "\3", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                klient->trenne();
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            klient->setSendeKey( sl, slLän );
-            klient->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            verbunden = 1;
-            cs.unlock();
-            Framework::logLine( "Erfolgreich mit Login Server verbunden." );
-            return 1;
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
-            char *err = "Der dir zugewiesene Login Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut.";
-            delete[]fehler;
-            fehler = new char[ textLength( err ) + 1 ];
-            fehler[ textLength( err ) ] = 0;
-            memcpy( fehler, err, textLength( err ) );
-            klient = klient->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        char *err = "Der dir zugewiesene Login Server antwortet nicht. Bitte versuche es Später erneut.";
-        delete[]fehler;
-        fehler = new char[ textLength( err ) + 1 ];
-        fehler[ textLength( err ) ] = 0;
-        memcpy( fehler, err, textLength( err ) );
-        klient = klient->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-int LoginKlient::login( const char *name, const char *pass ) // gibt bei Erfolg 1 zurück
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    if( brauchKick )
-        klient->sendeEncrypted( "\0", 1 );
-    brauchKick = 0;
-    klient->sendeEncrypted( "\5", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char byte = (unsigned char)textLength( name );
-    klient->sendeEncrypted( (char*)&byte, 1 );
-    klient->sendeEncrypted( name, byte );
-    byte = (unsigned char)textLength( pass );
-    klient->sendeEncrypted( (char*)&byte, 1 );
-    klient->sendeEncrypted( pass, byte );
-    klient->getNachrichtEncrypted( (char*)&byte, 1 );
-    if( byte == 1 )
-    {
-        char host[ 255 ] = "";
-        getHostName( host, 255 );
-        Text *addresse = new Text( getHostAddresse() );
-        unsigned char localIp[ 4 ];
-        localIp[ 0 ] = TextZuInt( addresse->getText(), 10 );
-        localIp[ 1 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 0 ) + 1, 10 );
-        localIp[ 2 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 1 ) + 1, 10 );
-        localIp[ 3 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 2 ) + 1, 10 );
-        addresse = addresse->release();
-        klient->sendeEncrypted( (char*)&localIp, 4 );
-        byte = textLength( host );
-        klient->sendeEncrypted( (char*)&byte, 1 );
-        klient->sendeEncrypted( host, byte );
-        klient->getNachrichtEncrypted( (char*)&accountId, 4 );
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 2 )
-    {
-        brauchKick = 1;
-        cs.unlock();
-        return 2;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( (char*)&byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool LoginKlient::kick( const char *geheim )
-{
-    if( !brauchKick )
-        return 1;
-    cs.lock();
-    brauchKick = 0;
-    unsigned char byte = (unsigned char)textLength( geheim );
-    klient->sendeEncrypted( (char*)&byte, 1 );
-    klient->sendeEncrypted( geheim, byte );
-    klient->getNachrichtEncrypted( (char*)&byte, 1 );
-    if( !byte )
-    {
-        cs.unlock();
-        return 0;
-    }
-    char host[ 255 ];
-    getHostName( host, 255 );
-    Text *addresse = new Text( getHostAddresse() );
-    unsigned char localIp[ 4 ];
-    localIp[ 0 ] = TextZuInt( addresse->getText(), 10 );
-    localIp[ 1 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 0 ) + 1, 10 );
-    localIp[ 2 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 1 ) + 1, 10 );
-    localIp[ 3 ] = TextZuInt( addresse->getText() + addresse->positionVon( '.', 2 ) + 1, 10 );
-    addresse = addresse->release();
-    klient->sendeEncrypted( (char*)&localIp, 4 );
-    byte = textLength( host );
-    klient->sendeEncrypted( (char*)&byte, 1 );
-    klient->sendeEncrypted( host, byte );
-    klient->getNachrichtEncrypted( (char*)&accountId, 4 );
-    cs.unlock();
-    return 1;
-}
-
-bool LoginKlient::logout() // logt den Account aus
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    if( brauchKick )
-        klient->sendeEncrypted( "\0", 1 );
-    brauchKick = 0;
-    klient->sendeEncrypted( "\6", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( (char*)&accountId, 4 );
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool LoginKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Login Server..." );
-    bool ok = klient->sendeEncrypted( "\x7", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool LoginKlient::trenne() // trennt sich von dem Login Server
-{
-    if( verbunden )
-    {
-        cs.lock();
-        Framework::logLine( "Verbindung zum Login Server wird getrennt..." );
-        if( brauchKick )
-            klient->sendeEncrypted( "\0", 1 );
-        brauchKick = 0;
-        klient->sendeEncrypted( "\3", 1 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        klient->trenne();
-        verbunden = 0;
-        cs.unlock();
-    }
-    return 1;
-}
-
-void LoginKlient::setLetzterFehler( char *err ) // setzt den letzten Fehler
-{
-    if( fehler )
-        delete[]fehler;
-    fehler = new char[ textLength( err ) + 1 ];
-    memcpy( fehler, err, textLength( err ) );
-    fehler[ textLength( err ) ] = 0;
-}
-
-// constant
-bool LoginKlient::istVerbunden() const // prüft, ob mit Login Server verbunden
-{
-    return verbunden;
-}
-
-int LoginKlient::getAccountId() const // gibt die AccountId zurück
-{
-    return accountId;
-}
-
-char *LoginKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler;
-}
-
-// Reference Counting
-LoginKlient *LoginKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-LoginKlient *LoginKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 640
KSGClient/Netzwerk/Klients/MinigameK.cpp

@@ -1,640 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der MinigameClient Klasse
-// Konstruktor
-MinigameClient::MinigameClient()
-{
-    verbunden = 0;
-    fehler = 0;
-    klient = 0;
-    needCapture = 0;
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-MinigameClient::~MinigameClient()
-{
-    cs.lock();
-    if( klient )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            if( needCapture )
-                klient->sendeEncrypted( "\0\0\0\0", 4 );
-            needCapture = 0;
-            klient->sendeEncrypted( "\4", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        else
-        {
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( klient->getServerPort(), klient->getServerIp() );
-            klient->sendeEncrypted( "\1", 1 );
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            else
-            {
-                char *sl = 0;
-                char slLän = getSchlüssel( &sl );
-                klient->setSendeKey( sl, slLän );
-                klient->setEmpfangKey( sl, slLän );
-                delete[] sl;
-                klient->sendeEncrypted( "\4", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                if( serverReturn == 3 )
-                {
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *nachricht = new char[ län + 1 ];
-                    nachricht[ län ] = 0;
-                    klient->getNachrichtEncrypted( nachricht, län );
-                    delete[]nachricht;
-                }
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        klient = klient->release();
-    }
-    delete[]fehler;
-    cs.unlock();
-}
-
-// verbindet ich mit dem Minigame Server
-bool MinigameClient::verbinde()
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    if( !klient )
-    {
-        char *msIp = getMainServerIp();
-        unsigned short msPort = getMainServerPort();
-        Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
-        klient = new Klient();
-        int keyLen = 0;
-        char *key = 0;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
-        klient->setSendeKey( key, keyLen );
-        delete[] key;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
-        klient->setEmpfangKey( key, keyLen );
-        delete[] key;
-        if( !klient->verbinde( msPort, msIp ) )
-        {
-            Framework::logLine( "ERROR: Server nicht erreichbar." );
-            char *err = "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut.";
-            delete[]fehler;
-            fehler = new char[ textLength( err ) + 1 ];
-            fehler[ textLength( err ) ] = 0;
-            memcpy( fehler, err, textLength( err ) );
-            klient = klient->release();
-            delete[]msIp;
-            cs.unlock();
-            return 0;
-        }
-        delete[]msIp;
-        klient->sende( "\0", 1 ); // verschlüsselung aktivieren
-        klient->sendeEncrypted( "\1", 1 );
-        klient->sendeEncrypted( (char*)&klientId, 4 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 3 )
-        {
-            char byte = 0;
-            klient->getNachrichtEncrypted( &byte, 1 );
-            delete[]fehler;
-            fehler = new char[ byte + 1 ];
-            fehler[ byte ] = 0;
-            klient->getNachrichtEncrypted( fehler, byte );
-            Framework::logLine( Text( "ERROR: " ) += fehler );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        klient->sendeEncrypted( "\6\xA", 2 );
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        if( byte == 2 )
-        {
-            unsigned char lsIp[ 4 ];
-            klient->getNachrichtEncrypted( (char *)lsIp, 4 );
-            unsigned short lsPort = 0;
-            klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            Text *lsIpT = new Text( "" );
-            lsIpT->append( (int)lsIp[ 0 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 1 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 2 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 3 ] );
-            Framework::logLine( ( ( Text( "Zugeteilter Minigame Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( lsPort, lsIpT->getText() );
-            lsIpT = lsIpT->release();
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        if( byte == 3 )
-        {
-            klient->getNachrichtEncrypted( &byte, 1 );
-            delete[]fehler;
-            fehler = new char[ byte + 1 ];
-            fehler[ byte ] = 0;
-            klient->getNachrichtEncrypted( fehler, byte );
-            Framework::logLine( Text( "ERROR: " ) += fehler );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-    }
-    Framework::logLine( "Verbinung mit Minigame Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::MINIGAME, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
-    {
-        if( klient->sendeEncrypted( "\1", 1 ) )
-        {
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            char serverReturn = 0;
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char byte = 0;
-                klient->getNachrichtEncrypted( &byte, 1 );
-                delete[]fehler;
-                fehler = new char[ byte + 1 ];
-                fehler[ byte ] = 0;
-                klient->getNachrichtEncrypted( fehler, byte );
-                Framework::logLine( Text( "ERROR: " ) += fehler );
-                klient->sendeEncrypted( "\3", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                klient->trenne();
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            klient->setSendeKey( sl, slLän );
-            klient->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            verbunden = 1;
-            cs.unlock();
-            Framework::logLine( "Erfolgreich mit Minigame Server verbunden." );
-            return 1;
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
-            char *err = "Der dir zugewiesene Minigame Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut.";
-            delete[]fehler;
-            fehler = new char[ textLength( err ) + 1 ];
-            fehler[ textLength( err ) ] = 0;
-            memcpy( fehler, err, textLength( err ) );
-            klient = klient->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        char *err = "Der dir zugewiesene Minigame Server antwortet nicht. Bitte versuche es Später erneut.";
-        delete[]fehler;
-        fehler = new char[ textLength( err ) + 1 ];
-        fehler[ textLength( err ) ] = 0;
-        memcpy( fehler, err, textLength( err ) );
-        klient = klient->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-// Gibt die liste mit allen Optionen zu einem Minigame zurück, zu denen es Welt beste Scores gibt
-//  mName: Der Name des Minigames
-//  zOptionList: Ein Zeiger auf ein Array von Texten, in denen die Optionen gespeichert werden
-//  return: Anzahl der Optionen
-int MinigameClient::getMinigameOptionList( char *mName, RCArray< Text > *zOptionList )
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    if( needCapture )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x6", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        char l = (char)textLength( mName );
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( mName, l );
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        for( int i = 0; i < anz; i++ )
-        {
-            klient->getNachrichtEncrypted( &l, 1 );
-            char *option = new char[ l + 1 ];
-            option[ l ] = 0;
-            klient->getNachrichtEncrypted( option, l );
-            zOptionList->add( new Text( option ) );
-            delete[] option;
-        }
-        cs.unlock();
-        return anz;
-    }
-    if( ret == 3 )
-    {
-        char l = 0;
-        klient->getNachrichtEncrypted( &l, 1 );
-        delete[] fehler;
-        fehler = new char[ l + 1 ];
-        fehler[ l ] = 0;
-        klient->getNachrichtEncrypted( fehler, l );
-    }
-    cs.unlock();
-    return 0;
-}
-
-// Gibt eine Liste mit den Weltbesten Scores zurück
-//  mName: Der Name des Minigames
-//  zScore: (rückgabe) Ein Array von Scores
-//  zPlayerList: (rückgabe) Ein Array von Spielernamen, die die Scores erreicht haben.
-//  zOptionList: (rückgabe) Ein Array von Optionen, die beim erreichen der Scores aktiv waren.
-//  return: Anzahl der Scores
-int MinigameClient::getMinigameBestscoreList( char *mName, Array< int > *zScore, RCArray< Text > *zPlayerList, RCArray< Text > *zOptionList )
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    if( needCapture )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x7", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        char l = (char)textLength( mName );
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( mName, l );
-        int anz = 0;
-        klient->getNachrichtEncrypted( (char*)&anz, 4 );
-        for( int i = 0; i < anz; i++ )
-        {
-            int score = 0;
-            klient->getNachrichtEncrypted( (char*)&score, 4 );
-            zScore->add( score );
-            klient->getNachrichtEncrypted( &l, 1 );
-            char *player = new char[ l + 1 ];
-            player[ l ] = 0;
-            klient->getNachrichtEncrypted( player, l );
-            zPlayerList->add( new Text( player ) );
-            delete[] player;
-            klient->getNachrichtEncrypted( &l, 1 );
-            char *option = new char[ l + 1 ];
-            option[ l ] = 0;
-            klient->getNachrichtEncrypted( option, l );
-            zOptionList->add( new Text( option ) );
-            delete[] option;
-        }
-        cs.unlock();
-        return anz;
-    }
-    if( ret == 3 )
-    {
-        char l = 0;
-        klient->getNachrichtEncrypted( &l, 1 );
-        delete[] fehler;
-        fehler = new char[ l + 1 ];
-        fehler[ l ] = 0;
-        klient->getNachrichtEncrypted( fehler, l );
-    }
-    cs.unlock();
-    return 0;
-}
-
-// Gibt den Welt bestscore zu einem Bestimmten Minigame mit bestimmten Optionen zurück.
-//  mName: Der Name des Minigames
-//  oName: Die Optionen
-//  zPlayer: (rückgabe) Der Spielername, der den Score erreicht hat
-//  return: Der Score der erreicht wurde
-int MinigameClient::getMinigameOptionBestscore( char *mName, char *oName, Text *zPlayer )
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    if( needCapture )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x8", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        char l = (char)textLength( mName );
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( mName, l );
-        l = (char)textLength( oName );
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( oName, l );
-        int score = 0;
-        klient->getNachrichtEncrypted( (char*)&score, 4 );
-        klient->getNachrichtEncrypted( &l, 1 );
-        char *player = new char[ l + 1 ];
-        player[ l ] = 0;
-        klient->getNachrichtEncrypted( player, l );
-        zPlayer->setText( player );
-        delete[] player;
-        cs.unlock();
-        return score;
-    }
-    if( ret == 3 )
-    {
-        char l = 0;
-        klient->getNachrichtEncrypted( &l, 1 );
-        delete[] fehler;
-        fehler = new char[ l + 1 ];
-        fehler[ l ] = 0;
-        klient->getNachrichtEncrypted( fehler, l );
-    }
-    cs.unlock();
-    return 0;
-}
-
-// Meldet die Beendigung eines Minigames
-//  mName: Der Name des Minigames
-//  oName: Die Optionen mit denen gespielt wurde
-//  score: Der Erreichte Score
-//  return: 0: Im Falle eines Fehlers, 1: Im Falle eines Erfolgs, 2: Falls ein Game Capture hochgeladen werden muss
-int MinigameClient::reportEndOfGame( char *mName, char *oName, int score )
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    if( needCapture )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\x9", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        char l = (char)textLength( mName );
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( mName, l );
-        l = (char)textLength( oName );
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( oName, l );
-        klient->sendeEncrypted( (char*)&score, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            cs.unlock();
-            needCapture = 1;
-            return 2;
-        }
-        cs.unlock();
-        return 1;
-    }
-    if( ret == 3 )
-    {
-        char l = 0;
-        klient->getNachrichtEncrypted( &l, 1 );
-        delete[] fehler;
-        fehler = new char[ l + 1 ];
-        fehler[ l ] = 0;
-        klient->getNachrichtEncrypted( fehler, l );
-    }
-    cs.unlock();
-    return 0;
-}
-
-// Lädt ein Game Capture hoch
-//  zCapture: Ein Zeiger auf die Capture Datei
-//  return: 1, falls erfolgreich
-bool MinigameClient::uploadGameCapture( Datei *zCapture )
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    if( !needCapture )
-        return 0;
-    cs.lock();
-    int size = (int)zCapture->getSize();
-    if( !zCapture->istOffen() )
-        zCapture->open( Datei::Style::lesen );
-    klient->sendeEncrypted( (char*)&size, 4 );
-    char *buffer = new char[ 2048 ];
-    while( size > 0 )
-    {
-        int l = size > 2048 ? 2048 : size;
-        zCapture->lese( buffer, l );
-        klient->sendeEncrypted( buffer, l );
-        size -= l;
-    }
-    delete[] buffer;
-    zCapture->close();
-    needCapture = 0;
-    cs.unlock();
-    return 1;
-}
-
-// Lädt ein Game Capture herunter
-//  mName: Der Name des Minigames
-//  oName: Die Optionen
-//  return: Ein Zeiger auf die Datei mit dem Capture
-Datei *MinigameClient::downloadGameCapture( char *mName, char *oName )
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    if( needCapture )
-        return 0;
-    cs.lock();
-    klient->sendeEncrypted( "\xA", 1 );
-    char ret = 0;
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        char l = (char)textLength( mName );
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( mName, l );
-        l = (char)textLength( oName );
-        klient->sendeEncrypted( &l, 1 );
-        klient->sendeEncrypted( oName, l );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            Datei *capture = new Datei();
-            capture->setDatei( "data/tmp/minigames/wb.mgc" );
-            capture->erstellen();
-            capture->open( Datei::Style::schreiben );
-            int size = 0;
-            klient->getNachrichtEncrypted( (char*)&size, 4 );
-            char *buffer = new char[ 2048 ];
-            while( size > 0 )
-            {
-                int l = size > 2048 ? 2048 : size;
-                klient->getNachrichtEncrypted( buffer, l );
-                capture->schreibe( buffer, l );
-                size -= l;
-            }
-            delete[] buffer;
-            capture->close();
-            cs.unlock();
-            return capture;
-        }
-        cs.unlock();
-        return 0;
-    }
-    if( ret == 3 )
-    {
-        char l = 0;
-        klient->getNachrichtEncrypted( &l, 1 );
-        delete[] fehler;
-        fehler = new char[ l + 1 ];
-        fehler[ l ] = 0;
-        klient->getNachrichtEncrypted( fehler, l );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool MinigameClient::keepAlive()
-{
-    if( needCapture )
-        return 1;
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Minigame Server..." );
-    bool ok = klient->sendeEncrypted( "\x5", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-// Erhält die Verbindung aufrecht
-bool MinigameClient::trenne()
-{
-    if( verbunden )
-    {
-        cs.lock();
-        Framework::logLine( "Verbindung zum Minigame Server wird getrennt..." );
-        if( needCapture )
-            klient->sendeEncrypted( "\0\0\0\0", 4 );
-        needCapture = 0;
-        klient->sendeEncrypted( "\3", 1 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        klient->trenne();
-        verbunden = 0;
-        cs.unlock();
-    }
-    return 1;
-}
-// trennt sich von dem Minigame Server
-bool MinigameClient::istVerbunden() const
-{
-    return verbunden;
-}
-// prüft, ob mit Editor Server verbunden
-char *MinigameClient::getLetzterFehler() const
-{
-    return fehler;
-}
-// gibt den Letzten Fehlertext zuück
-   // Reference Counting
-MinigameKlientV *MinigameClient::getThis()
-{
-    ref++;
-    return this;
-}
-
-MinigameKlientV *MinigameClient::release()
-{
-    if( !--ref )
-        delete this;
-    return 0;
-}

+ 0 - 399
KSGClient/Netzwerk/Klients/NewsK.cpp

@@ -1,399 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include <Datei.h>
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der NewsKlients Klasse aus KSGKlient.h
-// Konstruktor
-NewsKlient::NewsKlient()
-{
-    verbunden = 0;
-    klient = 0;
-    fehler = new Text( "" );
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-NewsKlient::~NewsKlient()
-{
-    cs.lock();
-    if( klient )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            klient->sendeEncrypted( "\4", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        else
-        {
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::NEWS, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::NEWS, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( klient->getServerPort(), klient->getServerIp() );
-            klient->sendeEncrypted( "\1", 1 );
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            else
-            {
-                char *sl = 0;
-                char slLän = getSchlüssel( &sl );
-                klient->setSendeKey( sl, slLän );
-                klient->setEmpfangKey( sl, slLän );
-                delete[] sl;
-                klient->sendeEncrypted( "\4", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                if( serverReturn == 3 )
-                {
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *nachricht = new char[ län + 1 ];
-                    nachricht[ län ] = 0;
-                    klient->getNachrichtEncrypted( nachricht, län );
-                    delete[]nachricht;
-                }
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        klient = klient->release();
-    }
-    fehler = fehler->release();
-    cs.unlock();
-}
-
-// nicht constant
-bool NewsKlient::verbinde() // verbindet ich mit dem News Server
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    if( !klient )
-    {
-        char *msIp = getMainServerIp();
-        unsigned short msPort = getMainServerPort();
-        Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
-        klient = new Klient();
-        int keyLen = 0;
-        char *key = 0;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
-        klient->setSendeKey( key, keyLen );
-        delete[] key;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
-        klient->setEmpfangKey( key, keyLen );
-        delete[] key;
-        if( !klient->verbinde( msPort, msIp ) )
-        {
-            Framework::logLine( "ERROR: Server nicht erreichbar." );
-            fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." );
-            klient = klient->release();
-            delete[]msIp;
-            cs.unlock();
-            return 0;
-        }
-        delete[]msIp;
-        klient->sende( "\0", 1 ); // Verschlüsselung aktivieren
-        klient->sendeEncrypted( "\1", 1 );
-        klient->sendeEncrypted( (char*)&klientId, 4 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 3 )
-        {
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *nachricht = new char[ län + 1 ];
-            nachricht[ län ] = 0;
-            klient->getNachrichtEncrypted( nachricht, län );
-            Framework::logLine( Text( "ERROR: " ) += nachricht );
-            fehler->setText( nachricht );
-            delete[]nachricht;
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        klient->sendeEncrypted( "\6\x9", 2 );
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        if( byte == 2 )
-        {
-            unsigned char lsIp[ 4 ];
-            klient->getNachrichtEncrypted( (char *)lsIp, 4 );
-            unsigned short lsPort = 0;
-            klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            Text *lsIpT = new Text( "" );
-            lsIpT->append( (int)lsIp[ 0 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 1 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 2 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 3 ] );
-            Framework::logLine( ( ( Text( "Zugeteilter News Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::NEWS, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::NEWS, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( lsPort, lsIpT->getText() );
-            lsIpT = lsIpT->release();
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        if( byte == 3 )
-        {
-            klient->getNachrichtEncrypted( &byte, 1 );
-            char *f = new char[ byte + 1 ];
-            f[ byte ] = 0;
-            klient->getNachrichtEncrypted( f, byte );
-            Framework::logLine( Text( "ERROR: " ) += f );
-            fehler->setText( f );
-            delete[]f;
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-    }
-    Framework::logLine( "Verbinung mit News Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::NEWS, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::NEWS, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
-    {
-        if( klient->sendeEncrypted( "\1", 1 ) )
-        {
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            char serverReturn = 0;
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char byte = 0;
-                klient->getNachrichtEncrypted( &byte, 1 );
-                char *f = new char[ byte + 1 ];
-                f[ byte ] = 0;
-                klient->getNachrichtEncrypted( f, byte );
-                fehler->setText( f );
-                Framework::logLine( Text( "ERROR: " ) += f );
-                delete[]f;
-                klient->sendeEncrypted( "\3", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                klient->trenne();
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            klient->setSendeKey( sl, slLän );
-            klient->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            verbunden = 1;
-            cs.unlock();
-            Framework::logLine( "Erfolgreich mit News Server verbunden." );
-            return 1;
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
-            fehler->setText( "Der dir zugewiesene News Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
-            klient = klient->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        fehler->setText( "Der dir zugewiesene News Server antwortet nicht. Bitte versuche es Später erneut." );
-        klient = klient->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool NewsKlient::ladeSeite( char *name )
-{
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.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;
-        }
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool NewsKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum News Server..." );
-    bool ok = klient->sendeEncrypted( "\x6", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool NewsKlient::trenne() // trennt sich von dem News Server
-{
-    if( !verbunden )
-        return 1;
-    cs.lock();
-    Framework::logLine( "Verbindung zum News Server wird getrennt..." );
-    klient->sendeEncrypted( "\3", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    klient->trenne();
-    verbunden = 0;
-    cs.unlock();
-    return 1;
-}
-
-// constant
-bool NewsKlient::istVerbunden() const // prüft, ob mit News Server verbunden
-{
-    return verbunden;
-}
-
-char *NewsKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler->getText();
-}
-
-// Reference Counting
-NewsKlient *NewsKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-NewsKlient *NewsKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 973
KSGClient/Netzwerk/Klients/RegisterK.cpp

@@ -1,973 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der RegisterKlient Klasse aus KSGKlient.h
-// Konstruktor 
-RegisterKlient::RegisterKlient()
-{
-    klient = 0;
-    verbunden = 0;
-    fehler = 0;
-    brauchSchlüssel = 0;
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-RegisterKlient::~RegisterKlient() // wenn verbunden, dann trennen
-{
-    cs.lock();
-    if( klient )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            if( brauchSchlüssel )
-            {
-                char byte = -1;
-                klient->sendeEncrypted( &byte, 1 );
-            }
-            klient->sendeEncrypted( "\4", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        else
-        {
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( klient->getServerPort(), klient->getServerIp() );
-            klient->sendeEncrypted( "\1", 1 );
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            else
-            {
-                char *sl = 0;
-                char slLän = getSchlüssel( &sl );
-                klient->setSendeKey( sl, slLän );
-                klient->setEmpfangKey( sl, slLän );
-                delete[] sl;
-                klient->sendeEncrypted( "\4", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                if( serverReturn == 3 )
-                {
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *nachricht = new char[ län + 1 ];
-                    nachricht[ län ] = 0;
-                    klient->getNachrichtEncrypted( nachricht, län );
-                    delete[]nachricht;
-                }
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        klient = klient->release();
-    }
-    delete[]fehler;
-    cs.unlock();
-}
-
-// nicht constant
-bool RegisterKlient::verbinde() // verbindet ich mit dem Register Server
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    brauchSchlüssel = 0;
-    if( !klient )
-    {
-        char *msIp = getMainServerIp();
-        unsigned short msPort = getMainServerPort();
-        Framework::logLine( "Verbinung mit Main Server wird hergestellt..." );
-        klient = new Klient();
-        int keyLen = 0;
-        char *key = 0;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
-        klient->setSendeKey( key, keyLen );
-        delete[] key;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
-        klient->setEmpfangKey( key, keyLen );
-        delete[] key;
-        if( !klient->verbinde( msPort, msIp ) )
-        {
-            Framework::logLine( "ERROR: Server nicht erreichbar." );
-            char *err = "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut.";
-            delete[]fehler;
-            fehler = new char[ textLength( err ) + 1 ];
-            fehler[ textLength( err ) ] = 0;
-            memcpy( fehler, err, textLength( err ) );
-            klient = klient->release();
-            delete[]msIp;
-            cs.unlock();
-            return 0;
-        }
-        delete[]msIp;
-        klient->sende( "\0", 1 ); // Verschlüsselung aktivieren
-        klient->sendeEncrypted( "\1", 1 );
-        klient->sendeEncrypted( (char*)&klientId, 4 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 3 )
-        {
-            char byte = 0;
-            klient->getNachrichtEncrypted( &byte, 1 );
-            delete[]fehler;
-            fehler = new char[ byte + 1 ];
-            fehler[ byte ] = 0;
-            klient->getNachrichtEncrypted( fehler, byte );
-            Framework::logLine( Text( "ERROR: " ) += fehler );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        klient->sendeEncrypted( "\6\1", 2 );
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        if( byte == 2 )
-        {
-            unsigned char lsIp[ 4 ];
-            klient->getNachrichtEncrypted( (char *)lsIp, 4 );
-            unsigned short lsPort = 0;
-            klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            Text *lsIpT = new Text( "" );
-            lsIpT->append( (int)lsIp[ 0 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 1 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 2 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 3 ] );
-            Framework::logLine( ( ( Text( "Zugeteilter Register Server:" ) += lsIpT->getText() ) += ":" ) += lsPort );
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( lsPort, lsIpT->getText() );
-            lsIpT = lsIpT->release();
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        if( byte == 3 )
-        {
-            klient->getNachrichtEncrypted( &byte, 1 );
-            delete[]fehler;
-            fehler = new char[ byte + 1 ];
-            fehler[ byte ] = 0;
-            klient->getNachrichtEncrypted( fehler, byte );
-            Framework::logLine( Text( "ERROR: " ) += fehler );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-    }
-    Framework::logLine( "Verbinung mit Register Server wird hergestellt..." );
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::REGISTER, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
-    {
-        if( klient->sendeEncrypted( "\1", 1 ) )
-        {
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            char serverReturn = 0;
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char byte = 0;
-                klient->getNachrichtEncrypted( &byte, 1 );
-                delete[]fehler;
-                fehler = new char[ byte + 1 ];
-                fehler[ byte ] = 0;
-                klient->getNachrichtEncrypted( fehler, byte );
-                Framework::logLine( Text( "ERROR: " ) += fehler );
-                klient->sendeEncrypted( "\3", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                klient->trenne();
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            klient->setSendeKey( sl, slLän );
-            klient->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            verbunden = 1;
-            cs.unlock();
-            Framework::logLine( "Erfolgreich mit Register Server verbunden." );
-            return 1;
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht erfolgreich." );
-            char *err = "Der dir zugewiesene Registrierungs Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut.";
-            delete[]fehler;
-            fehler = new char[ textLength( err ) + 1 ];
-            fehler[ textLength( err ) ] = 0;
-            memcpy( fehler, err, textLength( err ) );
-            klient = klient->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        char *err = "Der dir zugewiesene Registrierungs Server antwortet nicht. Bitte versuche es Später erneut.";
-        delete[]fehler;
-        fehler = new char[ textLength( err ) + 1 ];
-        fehler[ textLength( err ) ] = 0;
-        memcpy( fehler, err, textLength( err ) );
-        klient = klient->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::accountErstellen( const char *name, const char *pass, const char *geheim, const char *eMail, unsigned short jahr, char monat, char tag ) // erstellt den Account
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    klient->sendeEncrypted( "\5", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 4 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( pass ),
-        (unsigned char)textLength( geheim ),
-        (unsigned char)textLength( eMail )
-    };
-    klient->sendeEncrypted( (char*)län, 4 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( pass, län[ 1 ] );
-    klient->sendeEncrypted( geheim, län[ 2 ] );
-    klient->sendeEncrypted( eMail, län[ 3 ] );
-    klient->sendeEncrypted( (char*)&jahr, 2 );
-    klient->sendeEncrypted( &monat, 1 );
-    klient->sendeEncrypted( &tag, 1 );
-    char byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    if( byte == 1 )
-    {
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::accountLöschen( const char *name, const char *pass, const char *geheim ) // löscht den Account
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    klient->sendeEncrypted( "\6", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 3 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( pass ),
-        (unsigned char)textLength( geheim )
-    };
-    klient->sendeEncrypted( (char*)län, 3 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( pass, län[ 1 ] );
-    klient->sendeEncrypted( geheim, län[ 2 ] );
-    char byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    if( byte == 1 )
-    {
-        brauchSchlüssel = 1;
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-int RegisterKlient::accountBestätigen( const char *name, const char *pass ) // account Bestätigung fortsetzen
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    char byte = 0xE;
-    klient->sendeEncrypted( &byte, 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 2 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( pass )
-    };
-    klient->sendeEncrypted( (char*)län, 2 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( pass, län[ 1 ] );
-    byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    brauchSchlüssel = 1;
-    if( byte == 1 )
-    {
-        cs.unlock();
-        return 1;
-    }
-    if( byte == 2 )
-    {
-        cs.unlock();
-        return 2;
-    }
-    brauchSchlüssel = 0;
-    if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::bestätigen( const char *schlüssel ) // bestätigt den Vorgang mit Schüssel
-{
-    if( !brauchSchlüssel )
-        return 1;
-    cs.lock();
-    unsigned char län = textLength( schlüssel );
-    klient->sendeEncrypted( (char*)&län, 1 );
-    klient->sendeEncrypted( schlüssel, län );
-    klient->getNachrichtEncrypted( (char*)&län, 1 );
-    cs.unlock();
-    if( län )
-    {
-        brauchSchlüssel = 0;
-        return 1;
-    }
-    else
-        return 0;
-}
-
-void RegisterKlient::eMailErneutSenden() // E-Mail nochmal senden
-{
-    cs.lock();
-    char byte = -2;
-    if( brauchSchlüssel )
-        klient->sendeEncrypted( &byte, 1 );
-    cs.unlock();
-}
-
-void RegisterKlient::später() // bestätigung später abclose
-{
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    cs.unlock();
-}
-
-void RegisterKlient::abbrechen() // bricht den Vorgang ab
-{
-    cs.lock();
-    if( brauchSchlüssel )
-        klient->sendeEncrypted( "\0", 1 );
-    brauchSchlüssel = 0;
-    cs.unlock();
-}
-
-bool RegisterKlient::passwortÄndern( const char *name, const char *pass, const char *geheim, const char *nPass ) // ändert das Passwort
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    klient->sendeEncrypted( "\7", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 4 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( pass ),
-        (unsigned char)textLength( nPass ),
-        (unsigned char)textLength( geheim )
-    };
-    klient->sendeEncrypted( (char*)län, 4 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( pass, län[ 1 ] );
-    klient->sendeEncrypted( nPass, län[ 2 ] );
-    klient->sendeEncrypted( geheim, län[ 3 ] );
-    char byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    if( byte == 1 )
-    {
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::eMailÄndern( const char *name, const char *pass, const char *geheim, const char *nEMail ) // ändert die E-Mail Addresse
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    char byte = 8;
-    klient->sendeEncrypted( &byte, 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 4 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( pass ),
-        (unsigned char)textLength( geheim ),
-        (unsigned char)textLength( nEMail )
-    };
-    klient->sendeEncrypted( (char*)län, 4 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( pass, län[ 1 ] );
-    klient->sendeEncrypted( geheim, län[ 2 ] );
-    klient->sendeEncrypted( nEMail, län[ 3 ] );
-    byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    if( byte == 1 )
-    {
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::geheimnisÄndern( const char *name, const char *pass, const char *geheim, const char *nGeheim ) // ändert das Geheimnis
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    char byte = 9;
-    klient->sendeEncrypted( &byte, 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 4 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( pass ),
-        (unsigned char)textLength( geheim ),
-        (unsigned char)textLength( nGeheim )
-    };
-    klient->sendeEncrypted( (char*)län, 4 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( pass, län[ 1 ] );
-    klient->sendeEncrypted( geheim, län[ 2 ] );
-    klient->sendeEncrypted( nGeheim, län[ 3 ] );
-    byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    if( byte == 1 )
-    {
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::nameVergessen( const char *pass, const char *geheim ) // schickt den Account Namen an die Bekannte E-Mail Addresse
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    char byte = 0xA;
-    klient->sendeEncrypted( &byte, 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 2 ] = {
-        (unsigned char)textLength( pass ),
-        (unsigned char)textLength( geheim )
-    };
-    klient->sendeEncrypted( (char*)län, 2 );
-    klient->sendeEncrypted( pass, län[ 0 ] );
-    klient->sendeEncrypted( geheim, län[ 1 ] );
-    byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    if( byte == 1 )
-    {
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::passwortVergessen( const char *name, const char *geheim ) // schickt das Account Passwort an die Bekannte E-Mail Addresse
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    char byte = 0xB;
-    klient->sendeEncrypted( &byte, 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 2 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( geheim )
-    };
-    klient->sendeEncrypted( (char*)län, 2 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( geheim, län[ 1 ] );
-    byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    if( byte == 1 )
-    {
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::geheimnisVergessen( const char *name, const char *pass ) // schickt das Account Geheimnis an die Bekannte E-Mail Addresse
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    char byte = 0xC;
-    klient->sendeEncrypted( &byte, 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 2 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( pass )
-    };
-    klient->sendeEncrypted( (char*)län, 2 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( pass, län[ 1 ] );
-    byte = 0;
-    klient->getNachrichtEncrypted( &byte, 1 );
-    if( byte == 1 )
-    {
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::eMailVergessen( const char *name, const char *pass, const char *geheim, char **eMail ) // gibt die E-Mail Addresse des Accounts zurück
-{
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-        return 0;
-    cs.lock();
-    if( brauchSchlüssel )
-    {
-        char byte = -1;
-        klient->sendeEncrypted( &byte, 1 );
-    }
-    brauchSchlüssel = 0;
-    char byte2 = 0xD;
-    klient->sendeEncrypted( &byte2, 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    if( serverReturn == 3 )
-    {
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-        cs.unlock();
-        return 0;
-    }
-    unsigned char län[ 3 ] = {
-        (unsigned char)textLength( name ),
-        (unsigned char)textLength( pass ),
-        (unsigned char)textLength( geheim )
-    };
-    klient->sendeEncrypted( (char*)län, 3 );
-    klient->sendeEncrypted( name, län[ 0 ] );
-    klient->sendeEncrypted( pass, län[ 1 ] );
-    klient->sendeEncrypted( geheim, län[ 2 ] );
-    unsigned char byte = 0;
-    klient->getNachrichtEncrypted( (char*)&byte, 1 );
-    if( byte == 1 )
-    {
-        klient->getNachrichtEncrypted( (char*)&byte, 1 );
-        char *mail = new char[ byte + 1 ];
-        mail[ byte ] = 0;
-        klient->getNachrichtEncrypted( mail, byte );
-        *eMail = mail;
-        cs.unlock();
-        return 1;
-    }
-    else if( byte == 3 )
-    {
-        klient->getNachrichtEncrypted( (char*)&byte, 1 );
-        delete[]fehler;
-        fehler = new char[ byte + 1 ];
-        fehler[ byte ] = 0;
-        klient->getNachrichtEncrypted( fehler, byte );
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool RegisterKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Register Server..." );
-    bool ok = klient->sendeEncrypted( "\xF", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool RegisterKlient::trenne() // trennt sich von dem Register Server
-{
-    if( verbunden )
-    {
-        cs.lock();
-        Framework::logLine( "Verbindung zum Register Server wird getrennt..." );
-        if( brauchSchlüssel )
-        {
-            char byte = -1;
-            klient->sendeEncrypted( &byte, 1 );
-        }
-        brauchSchlüssel = 0;
-        klient->sendeEncrypted( "\3", 1 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        klient->trenne();
-        verbunden = 0;
-        cs.unlock();
-    }
-    return 1;
-}
-
-// constant
-bool RegisterKlient::istVerbunden() const // prüft, ob mit Register Server verbunden
-{
-    return verbunden;
-}
-
-bool RegisterKlient::vorgangBrauchBestätigung() const // prüft, ob eine Bestätigung notwendig ist
-{
-    return brauchSchlüssel;
-}
-
-char *RegisterKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler;
-}
-
-// Reference Counting
-RegisterKlient *RegisterKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-RegisterKlient *RegisterKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 1164
KSGClient/Netzwerk/Klients/ShopK.cpp

@@ -1,1164 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include <Datei.h>
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der ShopKlient Klasse aus KSGKtient.h
-// Konstruktor
-ShopKlient::ShopKlient()
-{
-    verbunden = 0;
-    klient = 0;
-    fehler = new Text( "" );
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-ShopKlient::~ShopKlient()
-{
-    cs.lock();
-    if( klient )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            klient->sendeEncrypted( "\4", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        else
-        {
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::SHOP, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::SHOP, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( klient->getServerPort(), klient->getServerIp() );
-            klient->sendeEncrypted( "\1", 1 );
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                klient->getNachrichtEncrypted( nachricht, län );
-                delete[]nachricht;
-            }
-            else
-            {
-                char *sl = 0;
-                char slLän = getSchlüssel( &sl );
-                klient->setSendeKey( sl, slLän );
-                klient->setEmpfangKey( sl, slLän );
-                delete[] sl;
-                klient->sendeEncrypted( "\4", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                if( serverReturn == 3 )
-                {
-                    char län = 0;
-                    klient->getNachrichtEncrypted( &län, 1 );
-                    char *nachricht = new char[ län + 1 ];
-                    nachricht[ län ] = 0;
-                    klient->getNachrichtEncrypted( nachricht, län );
-                    delete[]nachricht;
-                }
-            }
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        klient = klient->release();
-    }
-    fehler = fehler->release();
-    cs.unlock();
-}
-
-// privat
-bool ShopKlient::verbinde( int port, char *ip ) // verbindet sich mit vorgegebenem Server
-{
-    int keyLen = 0;
-    char *key = 0;
-    Framework::logLine( ( ( Text( "Zugeteilter Shop Server:" ) += ip ) += ":" ) += port );
-    Framework::logLine( "Verbinung mit Shop Server wird hergestellt..." );
-    Keys::getServerKey( &key, keyLen, Keys::SHOP, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::SHOP, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( klient->verbinde( port, ip ) )
-    {
-        if( klient->sendeEncrypted( "\1", 1 ) )
-        {
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            char serverReturn = 0;
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char byte = 0;
-                klient->getNachrichtEncrypted( &byte, 1 );
-                char *f = new char[ byte + 1 ];
-                f[ byte ] = 0;
-                klient->getNachrichtEncrypted( f, byte );
-                Framework::logLine( Text( "ERROR: " ) += f );
-                fehler->setText( f );
-                delete[]f;
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            klient->setSendeKey( sl, slLän );
-            klient->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            Framework::logLine( "Erfolgreich mit Shop Server verbunden." );
-            return 1;
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht moeglich." );
-            fehler->setText( "Der dir zugewiesene Shop Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
-            klient = klient->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        fehler->setText( "Der dir zugewiesene Shop Server antwortet nicht. Bitte versuche es Später erneut." );
-        klient = klient->release();
-    }
-    return 0;
-}
-
-// nicht constant
-bool ShopKlient::verbinde() // verbindet ich mit dem Shop Server
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    if( !klient )
-    {
-        char *msIp = getMainServerIp();
-        unsigned short msPort = getMainServerPort();
-        klient = new Klient();
-        int keyLen = 0;
-        char *key = 0;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::SENDEN );
-        klient->setSendeKey( key, keyLen );
-        delete[] key;
-        Keys::getServerKey( &key, keyLen, Keys::MAIN, Keys::EMPFANGEN );
-        klient->setEmpfangKey( key, keyLen );
-        delete[] key;
-        if( !klient->verbinde( msPort, msIp ) )
-        {
-            fehler->setText( "Fehler beim verbinden mit dem Main Server. Bitte versuche es Später erneut." );
-            klient = klient->release();
-            delete[]msIp;
-            cs.unlock();
-            return 0;
-        }
-        delete[]msIp;
-        klient->sende( "\0", 1 ); // Verschlüsselung aktivieren
-        klient->sendeEncrypted( "\1", 1 );
-        klient->sendeEncrypted( (char*)&klientId, 4 );
-        char serverReturn = 0;
-        klient->getNachrichtEncrypted( &serverReturn, 1 );
-        if( serverReturn == 3 )
-        {
-            char län = 0;
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *nachricht = new char[ län + 1 ];
-            nachricht[ län ] = 0;
-            klient->getNachrichtEncrypted( nachricht, län );
-            fehler->setText( nachricht );
-            delete[]nachricht;
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        klient->setSendeKey( sl, slLän );
-        klient->setEmpfangKey( sl, slLän );
-        delete[] sl;
-        klient->sendeEncrypted( "\6\7", 2 );
-        char byte = 0;
-        klient->getNachrichtEncrypted( &byte, 1 );
-        if( byte == 2 )
-        {
-            unsigned char lsIp[ 4 ];
-            klient->getNachrichtEncrypted( (char *)lsIp, 4 );
-            unsigned short lsPort = 0;
-            klient->getNachrichtEncrypted( (char*)&lsPort, 2 );
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            Text *lsIpT = new Text( "" );
-            lsIpT->append( (int)lsIp[ 0 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 1 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 2 ] );
-            lsIpT->append( "." );
-            lsIpT->append( (int)lsIp[ 3 ] );
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::SHOP, Keys::SENDEN );
-            klient->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::SHOP, Keys::EMPFANGEN );
-            klient->setEmpfangKey( key, keyLen );
-            delete[] key;
-            klient->verbinde( lsPort, lsIpT->getText() );
-            lsIpT = lsIpT->release();
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-        }
-        if( byte == 3 )
-        {
-            klient->getNachrichtEncrypted( &byte, 1 );
-            char *f = new char[ byte + 1 ];
-            f[ byte ] = 0;
-            klient->getNachrichtEncrypted( f, byte );
-            fehler->setText( f );
-            delete[]f;
-            klient->sendeEncrypted( "\3", 1 );
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            klient->trenne();
-            klient = klient->release();
-            cs.unlock();
-            return 0;
-        }
-    }
-    int keyLen = 0;
-    char *key = 0;
-    Keys::getServerKey( &key, keyLen, Keys::SHOP, Keys::SENDEN );
-    klient->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::SHOP, Keys::EMPFANGEN );
-    klient->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( klient->verbinde( klient->getServerPort(), klient->getServerIp() ) )
-    {
-        if( klient->sendeEncrypted( "\1", 1 ) )
-        {
-            klient->sendeEncrypted( (char*)&klientId, 4 );
-            char serverReturn = 0;
-            klient->getNachrichtEncrypted( &serverReturn, 1 );
-            if( serverReturn == 3 )
-            {
-                char byte = 0;
-                klient->getNachrichtEncrypted( &byte, 1 );
-                char *f = new char[ byte + 1 ];
-                f[ byte ] = 0;
-                klient->getNachrichtEncrypted( f, byte );
-                fehler->setText( f );
-                delete[]f;
-                klient->sendeEncrypted( "\3", 1 );
-                klient->getNachrichtEncrypted( &serverReturn, 1 );
-                klient->trenne();
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            klient->setSendeKey( sl, slLän );
-            klient->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            verbunden = 1;
-            cs.unlock();
-            return 1;
-        }
-        else
-        {
-            fehler->setText( "Der dir zugewiesene Shop Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
-            klient = klient->release();
-        }
-    }
-    else
-    {
-        fehler->setText( "Der dir zugewiesene Shop Server antwortet nicht. Bitte versuche es Später erneut." );
-        klient = klient->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-Array< int > *ShopKlient::suchSpiele( const char *suche ) // sucht nach Spielen
-{
-    char län = (char)textLength( suche );
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\5", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( &län, 1 );
-        if( län )
-            klient->sendeEncrypted( suche, län );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            int anz = 0;
-            klient->getNachrichtEncrypted( (char*)&anz, 4 );
-            Array< int > *ret = new Array< int >();
-            for( int i = 0; i < anz; i++ )
-            {
-                int w = 0;
-                klient->getNachrichtEncrypted( (char*)&w, 4 );
-                ret->add( w );
-            }
-            cs.unlock();
-            return ret;
-        }
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *err = new char[ län + 1 ];
-        err[ län ] = 0;
-        if( län )
-            klient->getNachrichtEncrypted( err, län );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool ShopKlient::ladeSpielTitel( int id ) // läd Titelbild des Spieles herunter
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\6", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            Text *pf = new Text( "data/tmp/shop/kaufen/spiele/" );
-            pf->append( id );
-            pf->append( "/titelbg.ltdb" );
-            Datei *dat = new Datei();
-            dat->setDatei( pf );
-            dat->erstellen();
-            dat->open( Datei::Style::schreiben );
-            __int64 gr = 0;
-            klient->getNachrichtEncrypted( (char*)&gr, 8 );
-            char bytes[ 2048 ];
-            while( gr > 0 )
-            {
-                int län = gr > 2048 ? 2048 : (int)gr;
-                klient->getNachricht( bytes, län );
-                dat->schreibe( bytes, län );
-                gr -= län;
-            }
-            dat->close();
-            dat->release();
-        }
-        if( ret == 2 )
-        { // Verweis auf anderen ShopServer
-            int port = 0;
-            char län = 0;
-            klient->getNachrichtEncrypted( (char*)&port, 4 );
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *ip = new char[ län + 1 ];
-            klient->getNachrichtEncrypted( ip, län );
-            ip[ län ] = 0;
-            klient->trenne();
-            if( !verbinde( port, ip ) )
-            {
-                delete[] ip;
-                trenne();
-                cs.unlock();
-                return 0;
-            }
-            delete[] ip;
-            cs.unlock();
-            return ladeSpielTitel( id );
-        }
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool ShopKlient::ladeSpielSeite( int id ) // läd Seite des Spieles herunter
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\7", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            Text *pf = new Text( "data/tmp/shop/kaufen/spiele/" );
-            pf->append( id );
-            pf->append( "/" );
-            int anz = 0;
-            klient->getNachrichtEncrypted( (char*)&anz, 4 );
-            for( int i = 0; i < anz; i++ )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *name = new char[ län + 1 ];
-                name[ län ] = 0;
-                klient->getNachrichtEncrypted( name, län );
-                Text *pfad = new Text( pf->getText() );
-                pfad->append( name );
-                delete[] name;
-                Datei *d = new Datei();
-                d->setDatei( pfad );
-                d->erstellen();
-                d->open( Datei::Style::schreiben );
-                __int64 gr = 0;
-                klient->getNachrichtEncrypted( (char*)&gr, 8 );
-                char bytes[ 2048 ];
-                while( gr > 0 )
-                {
-                    int län = gr > 2048 ? 2048 : (int)gr;
-                    klient->getNachricht( bytes, län );
-                    d->schreibe( bytes, län );
-                    gr -= län;
-                }
-                d->close();
-                d->release();
-            }
-            pf->release();
-        }
-        if( ret == 2 )
-        { // Verweis auf anderen ShopServer
-            int port = 0;
-            char län = 0;
-            klient->getNachrichtEncrypted( (char*)&port, 4 );
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *ip = new char[ län + 1 ];
-            klient->getNachrichtEncrypted( ip, län );
-            ip[ län ] = 0;
-            klient->trenne();
-            if( !verbinde( port, ip ) )
-            {
-                delete[] ip;
-                trenne();
-                cs.unlock();
-                return 0;
-            }
-            delete[] ip;
-            cs.unlock();
-            return ladeSpielSeite( id );
-        }
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-int ShopKlient::getSpielBesitzStatus( int id ) // 0 = nicht im Besitz, 1 = Testversion, 2 = gekauft
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x8", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int ShopKlient::getSpielTestversion( int id ) // gibt die Anzahl der verbleibenden Spiele zurück
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x9", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int ShopKlient::istSpielErwerbbar( int id ) // prüft, ob das Spiel erworben werden kann
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xA", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int ShopKlient::getSpielPreis( int id, bool testVersion ) // gibt den Preis eines Spieles zurück
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xB", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->sendeEncrypted( (char*)&testVersion, 1 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool ShopKlient::spielErwerben( int spielId, bool testVersion ) // Spiel kaufen
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xC", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&spielId, 4 );
-        klient->sendeEncrypted( (char*)&testVersion, 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            cs.unlock();
-            return 1;
-        }
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-Array< int > *ShopKlient::suchKarten( const char *suche, int spielId ) // sucht nach Karten
-{
-    char län = (char)textLength( suche );
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xD", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&spielId, 4 );
-        klient->sendeEncrypted( &län, 1 );
-        if( län )
-            klient->sendeEncrypted( suche, län );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            int anz = 0;
-            klient->getNachrichtEncrypted( (char*)&anz, 4 );
-            Array< int > *ret = new Array< int >();
-            for( int i = 0; i < anz; i++ )
-            {
-                int w = 0;
-                klient->getNachrichtEncrypted( (char*)&w, 4 );
-                ret->add( w );
-            }
-            cs.unlock();
-            return ret;
-        }
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &län, 1 );
-        char *err = new char[ län + 1 ];
-        err[ län ] = 0;
-        if( län )
-            klient->getNachrichtEncrypted( err, län );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool ShopKlient::ladeKarteTitel( int id ) // läd Titelbild der Karte herunter
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xE", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            Text *pf = new Text( "data/tmp/shop/kaufen/karten/" );
-            pf->append( id );
-            pf->append( "/titelbg.ltdb" );
-            Datei *dat = new Datei();
-            dat->setDatei( pf );
-            dat->erstellen();
-            dat->open( Datei::Style::schreiben );
-            __int64 gr = 0;
-            klient->getNachrichtEncrypted( (char*)&gr, 8 );
-            char bytes[ 2048 ];
-            while( gr > 0 )
-            {
-                int län = gr > 2048 ? 2048 : (int)gr;
-                klient->getNachricht( bytes, län );
-                dat->schreibe( bytes, län );
-                gr -= län;
-            }
-            dat->close();
-            dat->release();
-        }
-        if( ret == 2 )
-        { // Verweis auf anderen ShopServer
-            int port = 0;
-            char län = 0;
-            klient->getNachrichtEncrypted( (char*)&port, 4 );
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *ip = new char[ län + 1 ];
-            klient->getNachrichtEncrypted( ip, län );
-            ip[ län ] = 0;
-            klient->trenne();
-            if( !verbinde( port, ip ) )
-            {
-                delete[] ip;
-                trenne();
-                cs.unlock();
-                return 0;
-            }
-            delete[] ip;
-            cs.unlock();
-            return ladeKarteTitel( id );
-        }
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-bool ShopKlient::ladeKarteSeite( int id ) // läd Seite der Karte herunter
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\xF", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            Text *pf = new Text( "data/tmp/shop/kaufen/karten/" );
-            pf->append( id );
-            pf->append( "/" );
-            int anz = 0;
-            klient->getNachrichtEncrypted( (char*)&anz, 4 );
-            for( int i = 0; i < anz; i++ )
-            {
-                char län = 0;
-                klient->getNachrichtEncrypted( &län, 1 );
-                char *name = new char[ län + 1 ];
-                name[ län ] = 0;
-                klient->getNachrichtEncrypted( name, län );
-                Text *pfad = new Text( pf->getText() );
-                pfad->append( name );
-                delete[] name;
-                Datei *d = new Datei();
-                d->setDatei( pfad );
-                d->erstellen();
-                d->open( Datei::Style::schreiben );
-                __int64 gr = 0;
-                klient->getNachrichtEncrypted( (char*)&gr, 8 );
-                char bytes[ 2048 ];
-                while( gr > 0 )
-                {
-                    int län = gr > 2048 ? 2048 : (int)gr;
-                    klient->getNachricht( bytes, län );
-                    d->schreibe( bytes, län );
-                    gr -= län;
-                }
-                d->close();
-                d->release();
-            }
-            pf->release();
-        }
-        if( ret == 2 )
-        { // Verweis auf anderen ShopServer
-            int port = 0;
-            char län = 0;
-            klient->getNachrichtEncrypted( (char*)&port, 4 );
-            klient->getNachrichtEncrypted( &län, 1 );
-            char *ip = new char[ län + 1 ];
-            klient->getNachrichtEncrypted( ip, län );
-            ip[ län ] = 0;
-            klient->trenne();
-            if( !verbinde( port, ip ) )
-            {
-                delete[] ip;
-                trenne();
-                cs.unlock();
-                return 0;
-            }
-            delete[] ip;
-            cs.unlock();
-            return ladeKarteSeite( id );
-        }
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-        cs.unlock();
-        return 0;
-    }
-    cs.unlock();
-    return 1;
-}
-
-int ShopKlient::getKarteBesitzStatus( int id ) // 0 = nicht im Besitz, 1 = Testversion, 2 = gekauft
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x10", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int ShopKlient::getKarteTestversion( int id ) // gibt die Anzahl der verbleibenden Spiele zurück
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x11", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int ShopKlient::istKarteErwerbbar( int id ) // prüft, ob die Karte erworben werden kann
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x12", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-int ShopKlient::getKartePreis( int id, bool testVersion ) // gibt den Preis einer Karte zurück
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x13", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&id, 4 );
-        klient->sendeEncrypted( (char*)&testVersion, 1 );
-        int ret = 0;
-        klient->getNachrichtEncrypted( (char*)&ret, 4 );
-        cs.unlock();
-        return ret;
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool ShopKlient::karteErwerben( int karteId, bool testVersion ) // Karte kaufen
-{
-    char ret = 0;
-    cs.lock();
-    if( !verbunden )
-        verbinde();
-    if( !verbunden )
-    {
-        cs.unlock();
-        return 0;
-    }
-    klient->sendeEncrypted( "\x14", 1 );
-    klient->getNachrichtEncrypted( &ret, 1 );
-    if( ret == 1 )
-    {
-        klient->sendeEncrypted( (char*)&karteId, 4 );
-        klient->sendeEncrypted( (char*)&testVersion, 1 );
-        klient->getNachrichtEncrypted( &ret, 1 );
-        if( ret == 1 )
-        {
-            cs.unlock();
-            return 1;
-        }
-    }
-    if( ret == 3 )
-    {
-        klient->getNachrichtEncrypted( &ret, 1 );
-        char *err = new char[ ret + 1 ];
-        err[ ret ] = 0;
-        if( ret )
-            klient->getNachrichtEncrypted( err, ret );
-        fehler->setText( err );
-        delete[] err;
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool ShopKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Shop Server..." );
-    bool ok = klient->sendeEncrypted( "\x15", 1 );
-    ok &= klient->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool ShopKlient::trenne() // trennt sich von dem Shop Server
-{
-    if( !verbunden )
-        return 1;
-    cs.lock();
-    Framework::logLine( "Verbindung zum Shop Server wird getrennt..." );
-    klient->sendeEncrypted( "\3", 1 );
-    char serverReturn = 0;
-    klient->getNachrichtEncrypted( &serverReturn, 1 );
-    klient->trenne();
-    verbunden = 0;
-    cs.unlock();
-    return 1;
-}
-
-// constant
-bool ShopKlient::istVerbunden() const // prüft, ob mit Shop Server verbunden
-{
-    return verbunden;
-}
-
-char *ShopKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler->getText();
-}
-
-// Reference Counting
-ShopKlient *ShopKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-ShopKlient *ShopKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 637
KSGClient/Netzwerk/Klients/SpielK.cpp

@@ -1,637 +0,0 @@
-#include "../KSGKlient.h"
-#include "../KSGServer.h"
-#include "../../Global/Variablen.h"
-#include "../Keys.h"
-#include <Globals.h>
-
-// Inhalt der SpielKlient Klasse aus KSGKlient.h
-// Konstruktor
-SpielKlient::SpielKlient()
-    : Thread()
-{
-    verbunden = 0;
-    senden = 0;
-    empfangen = 0;
-    fehler = new Text( "" );
-    klientId = getKlientId();
-    ref = 1;
-}
-
-// Destruktor
-SpielKlient::~SpielKlient()
-{
-    cs.lock();
-    if( senden )
-    {
-        char serverReturn = 0;
-        if( verbunden )
-        {
-            senden->sendeEncrypted( "\3", 1 );
-            senden->getNachrichtEncrypted( &serverReturn, 1 );
-            senden->trenne();
-        }
-        senden = senden->release();
-        verbunden = 0;
-        if( empfangen )
-        {
-            warteAufThread( 5000 );
-            ende();
-            empfangen->trenne();
-            empfangen = empfangen->release();
-        }
-    }
-    fehler = fehler->release();
-    cs.unlock();
-}
-
-// nicht constant
-bool SpielKlient::verbinde( unsigned short port, char *ip ) // verbindet ich mit dem Spiel Server
-{
-    cs.lock();
-    if( verbunden )
-    {
-        cs.unlock();
-        return 1;
-    }
-    if( !senden )
-        senden = new Klient();
-    int keyLen = 0;
-    char *key = 0;
-    Framework::logLine( ( ( Text( "Zugeteilter Spiel Server:" ) += ip ) += ":" ) += port );
-    Framework::logLine( "Verbinung mit Spiel Server wird hergestellt..." );
-    Keys::getServerKey( &key, keyLen, Keys::SPIEL, Keys::SENDEN );
-    senden->setSendeKey( key, keyLen );
-    delete[] key;
-    Keys::getServerKey( &key, keyLen, Keys::SPIEL, Keys::EMPFANGEN );
-    senden->setEmpfangKey( key, keyLen );
-    delete[] key;
-    if( senden->verbinde( port, ip ) )
-    {
-        if( senden->sendeEncrypted( "\1", 1 ) )
-        {
-            char serverReturn = 0;
-            senden->sendeEncrypted( (char*)&klientId, 4 );
-            char ret = 0;
-            senden->getNachrichtEncrypted( &ret, 1 );
-            if( ret != 1 )
-            {
-                if( ret == 3 )
-                {
-                    char byte = 0;
-                    senden->getNachrichtEncrypted( &byte, 1 );
-                    char *f = new char[ byte + 1 ];
-                    f[ byte ] = 0;
-                    senden->getNachrichtEncrypted( f, byte );
-                    Framework::logLine( Text( "ERROR: " ) += f );
-                    fehler->setText( f );
-                    delete[]f;
-                }
-                senden->sendeEncrypted( "\3", 1 );
-                senden->getNachrichtEncrypted( &serverReturn, 1 );
-                senden->trenne();
-                WMessageBox( 0, new Text( "Fehler" ), new Text( "Server akzeptiert den Klient nicht" ), MB_ICONERROR );
-                cs.unlock();
-                return 0;
-            }
-            char *sl = 0;
-            char slLän = getSchlüssel( &sl );
-            senden->setSendeKey( sl, slLän );
-            senden->setEmpfangKey( sl, slLän );
-            delete[] sl;
-            if( !empfangen )
-                empfangen = new Klient();
-            int keyLen = 0;
-            char *key = 0;
-            Keys::getServerKey( &key, keyLen, Keys::SPIEL, Keys::SENDEN );
-            empfangen->setSendeKey( key, keyLen );
-            delete[] key;
-            Keys::getServerKey( &key, keyLen, Keys::SPIEL, Keys::EMPFANGEN );
-            empfangen->setEmpfangKey( key, keyLen );
-            delete[] key;
-            if( empfangen->verbinde( senden->getServerPort(), senden->getServerIp() ) )
-            {
-                start();
-                verbunden = 1;
-                cs.unlock();
-                Framework::logLine( "Erfolgreich mit Spiel Server verbunden." );
-                return 1;
-            }
-            else
-            {
-                Framework::logLine( "ERROR: Empfang Server nicht erreichbar." );
-                fehler->setText( "Der dir zugewiesene Spiel Server kann dir keine Nachrichten senden." );
-                cs.unlock();
-                return 1;
-            }
-        }
-        else
-        {
-            Framework::logLine( "ERROR: Senden zum Server nicht moeglich." );
-            fehler->setText( "Der dir zugewiesene Spiel Server hat die Verbindung abgebrochen. Bitte versuche es Später erneut." );
-            senden = senden->release();
-        }
-    }
-    else
-    {
-        Framework::logLine( "ERROR: Server nicht erreichbar." );
-        fehler->setText( "Der dir zugewiesene Spiel Server antwortet nicht. Bitte versuche es Später erneut." );
-        senden = senden->release();
-    }
-    cs.unlock();
-    return 0;
-}
-
-bool SpielKlient::spielErstelltAnnehmen() // klient ist bereit dem erstellten Spiel beizutreten
-{
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\4", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::spielErstelltAblehnen() // klient ist nicht bereit dem erstellten Spiel beizutreten
-{
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\5", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::spielErstelltTeamWechseln( int team ) // wechselt das Team
-{
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\6", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    if( !ret )
-    {
-        cs.unlock();
-        return 0;
-    }
-    senden->sendeEncrypted( (char*)&team, 4 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::spielErstelltTeamFertig() // bestetigt die Team Auswahl
-{
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xE", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::spielErstelltChatNachricht( char *nachricht ) // sendet eine Chat Nachricht an die mitglieder des erstellten Spiels
-{
-    char län = textLength( nachricht );
-    if( !län )
-        return 1;
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\7", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    if( !ret )
-    {
-        cs.unlock();
-        return 0;
-    }
-    senden->sendeEncrypted( &län, 1 );
-    senden->sendeEncrypted( nachricht, län );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::bereitZumLaden() // Klient ist bereit zum Laden
-{
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\x9", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::setLadenProzent( int prozent ) // Setzt den Fortschritt des Klients
-{
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xC", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    if( ret )
-    {
-        senden->sendeEncrypted( (char*)&prozent, 4 );
-        senden->getNachrichtEncrypted( &ret, 1 );
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::bereitZumSpiel() // Klient ist bereit zum Spiel
-{
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xA", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::spielNachricht( short län, char *bytes ) // Nachricht während des Spiels
-{
-    if( !senden )
-        return 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xB", 1 );
-    senden->sende( (char*)&län, 2 );
-    senden->sende( bytes, län );
-    cs.unlock();
-    return 1;
-}
-
-bool SpielKlient::statistikNachricht( short län, char *bytes ) // Nachricht während der Statistik
-{
-    if( !senden )
-        return 0;
-    char ret = 0;
-    cs.lock();
-    senden->sendeEncrypted( "\xD", 1 );
-    senden->getNachrichtEncrypted( &ret, 1 );
-    if( ret )
-    {
-        senden->sendeEncrypted( (char*)&län, 2 );
-        senden->sendeEncrypted( bytes, län );
-        senden->getNachrichtEncrypted( &ret, 1 );
-    }
-    cs.unlock();
-    return ret == 1;
-}
-
-bool SpielKlient::keepAlive() // Erhält die Verbindung aufrecht
-{
-    if( !verbunden )
-        return 0;
-    char res = 0;
-    if( !cs.tryLock() )
-        return 1;
-    Framework::logLine( "Verbindungstest zum Spiel Server..." );
-    bool ok = senden->sendeEncrypted( "\xF", 1 );
-    ok &= senden->getNachrichtEncrypted( &res, 1 );
-    cs.unlock();
-    if( res != 1 || !ok )
-    {
-        Framework::logLine( "Verbindungsabbruch." );
-        trenne();
-    }
-    else
-        Framework::logLine( "Verbindung besteht." );
-    return res == 1;
-}
-
-bool SpielKlient::trenne() // trennt sich von dem Chat Server
-{
-    if( !verbunden )
-        return 1;
-    verbunden = 0;
-    cs.lock();
-    Framework::logLine( "Verbindung zum Spiel Server wird getrennt..." );
-    senden->sendeEncrypted( "\3", 1 );
-    char serverReturn = 0;
-    senden->getNachrichtEncrypted( &serverReturn, 1 );
-    senden->trenne();
-    warteAufThread( 2000 );
-    empfangen->trenne();
-    cs.unlock();
-    run = 0;
-    ende();
-    return 1;
-}
-
-void SpielKlient::thread() // empfangen von Nachrichten
-{
-    if( !verbunden || !empfangen || !senden )
-        return;
-    empfangen->sendeEncrypted( "\1", 1 );
-    empfangen->sendeEncrypted( (char*)&klientId, 4 );
-    char res = 0;
-    empfangen->getNachrichtEncrypted( &res, 1 );
-    if( res == 3 )
-    {
-        char län = 0;
-        empfangen->getNachrichtEncrypted( &län, 1 );
-        char *nachricht = new char[ län + 1 ];
-        nachricht[ län ] = 0;
-        empfangen->getNachrichtEncrypted( nachricht, län );
-        fehler->setText( nachricht );
-        delete[]nachricht;
-    }
-    if( res == 1 )
-    {
-        char *sl = 0;
-        char slLän = getSchlüssel( &sl );
-        empfangen->setSendeKey( sl, slLän );
-        empfangen->setEmpfangKey( sl, slLän );
-        delete[] sl;
-    }
-    else if( res != 0 )
-    {
-        WMessageBox( 0, new Text( "Fehler" ), new Text( "Server hat keine Verwendung für den Client." ), MB_ICONERROR );
-        return;
-    }
-    char befehl = 0;
-    while( verbunden )
-    {
-        if( !empfangen->getNachrichtEncrypted( &befehl, 1 ) )
-        {
-            run = 0;
-            return;
-        }
-        switch( befehl )
-        {
-        case 0: // verbindung getrennt
-            trenne();
-            run = 0;
-            return;
-        case 1: // verbleibende Zeit
-            if( 1 )
-            {
-                char sekunden = 0;
-                empfangen->getNachrichtEncrypted( &sekunden, 1 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->spielGefundenZeitVerbleibend( sekunden );
-            }
-            break;
-        case 2: // SpielErstellt abbruch
-            if( 1 )
-            {
-                char län = 0;
-                empfangen->getNachrichtEncrypted( &län, 1 );
-                char *grund = new char[ län + 1 ];
-                grund[ län ] = 0;
-                empfangen->getNachrichtEncrypted( grund, län );
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Spiel Abgebrochen" ), new Text( grund ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->spielGefundenAbbruch();
-                delete[] grund;
-            }
-            break;
-        case 3: // Fehler
-            if( 1 )
-            {
-                char länge = 0;
-                empfangen->getNachrichtEncrypted( &länge, 1 );
-                char *txt = new char[ länge + 1 ];
-                txt[ länge ] = 0;
-                empfangen->getNachrichtEncrypted( txt, länge );
-                hauptScreen->lock();
-                if( nachLogin && nachLogin->zNachrichtenListe() )
-                    nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( txt ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-                hauptScreen->unlock();
-                delete[]txt;
-            }
-            break;
-        case 4: // zurück in Warteschlange
-            if( 1 )
-            {
-                char stunden = 0;
-                char minuten = 0;
-                char sekunden = 0;
-                empfangen->getNachrichtEncrypted( &stunden, 1 );
-                empfangen->getNachrichtEncrypted( &minuten, 1 );
-                empfangen->getNachrichtEncrypted( &sekunden, 1 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->zurückInWarteschlange( stunden, minuten, sekunden );
-            }
-            break;
-        case 5: // Erstellung fortsetzen
-            if( nachLogin && nachLogin->zSpielenFenster() )
-                nachLogin->zSpielenFenster()->teamAuswahlBetreten();
-            break;
-        case 6: // SpielErstellt Initialisierung
-            if( 1 )
-            {
-                SpielerTeamStruktur *sts = new SpielerTeamStruktur();
-                empfangen->getNachrichtEncrypted( (char*)&sts->spielerAnzahl, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&sts->teamAnzahl, 4 );
-                for( int i = 0; i < sts->spielerAnzahl; i++ )
-                {
-                    int farbe = 0;
-                    empfangen->getNachrichtEncrypted( (char*)&farbe, 4 );
-                    sts->spielerFarbe->set( farbe, i );
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    int farbe = 0;
-                    empfangen->getNachrichtEncrypted( (char*)&farbe, 4 );
-                    sts->teamFarbe->set( farbe, i );
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    char län = 0;
-                    empfangen->getNachrichtEncrypted( &län, 1 );
-                    char *name = new char[ län + 1 ];
-                    name[ län ] = 0;
-                    if( län )
-                        empfangen->getNachrichtEncrypted( name, län );
-                    Text *tmp = new Text( name );
-                    delete[] name;
-                    sts->teamName->set( tmp, i );
-                }
-                for( int i = 0; i < sts->teamAnzahl; i++ )
-                {
-                    int größe = 0;
-                    empfangen->getNachrichtEncrypted( (char*)&größe, 4 );
-                    sts->teamGröße->set( größe, i );
-                }
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->teamAuswahlInit( sts );
-                else
-                    sts->release();
-            }
-            break;
-        case 7: // SpielErstellt Spieler hinzugefügt
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->teamAuswahlAddSpieler( accountId );
-            }
-            break;
-        case 8: // SpielErstellt Spieler entfernt
-            if( 1 )
-            {
-                int accountId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->teamAuswahlRemoveSpieler( accountId );
-            }
-            break;
-        case 9: // SpielErstellt Spieler wechselt Team
-            if( 1 )
-            {
-                int accountId = 0;
-                int spielerNummer = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accountId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&spielerNummer, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->teamAuswahlSpielerWehseltTeam( accountId, spielerNummer );
-            }
-            break;
-        case 0xA: // SpielErstellt Chat Nachricht
-            if( 1 )
-            {
-                char län = 0;
-                empfangen->getNachrichtEncrypted( &län, 1 );
-                char *nachricht = new char[ län + 1 ];
-                nachricht[ län ] = 0;
-                if( län )
-                    empfangen->getNachrichtEncrypted( nachricht, län );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->teamAuswahlChatNachricht( nachricht );
-                delete[] nachricht;
-            }
-            break;
-        case 0xB: // Spiel gefunden
-            if( 1 )
-            {
-                int karteId = 0;
-                empfangen->getNachrichtEncrypted( (char*)&karteId, 4 );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->spielGefunden( karteId );
-            }
-            break;
-        case 0xC: // Spiel Laden beginnen
-            aktion = 5;
-            break;
-        case 0xD: // Spiel Laden Spieler hinzufügen
-            if( 1 )
-            {
-                int accId = 0;
-                int spielerNummer = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&spielerNummer, 4 );
-                if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
-                    nachLogin->zImSpiel()->lBAddSpieler( accId, spielerNummer );
-            }
-            break;
-        case 0xE: // Spiel Laden Spieler Prozent
-            if( 1 )
-            {
-                int accId = 0;
-                int prozent = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&prozent, 4 );
-                if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
-                    nachLogin->zImSpiel()->lBSetSpielerProzent( accId, prozent );
-            }
-            break;
-        case 0xF: // Spiel Laden Spieler Ping
-            if( 1 )
-            {
-                int accId = 0;
-                int ping = 0;
-                empfangen->getNachrichtEncrypted( (char*)&accId, 4 );
-                empfangen->getNachrichtEncrypted( (char*)&ping, 4 );
-                if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
-                    nachLogin->zImSpiel()->lBSetSpielerPing( accId, ping );
-            }
-            break;
-        case 0x10: // ping
-            empfangen->sendeEncrypted( "\1", 1 );
-            break;
-        case 0x11: // Spiel Laden Fertig
-            if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
-                nachLogin->zImSpiel()->endLaden();
-            break;
-        case 0x12: // Spiel Nachricht
-            if( 1 )
-            {
-                short län = 0;
-                empfangen->getNachricht( (char*)&län, 2 );
-                char *n = new char[ län ];
-                empfangen->getNachricht( n, län );
-                if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
-                    nachLogin->zImSpiel()->spielNachricht( län, n );
-                delete[] n;
-            }
-            break;
-        case 0x13: // Statistik Nachricht
-            if( 1 )
-            {
-                short län = 0;
-                empfangen->getNachrichtEncrypted( (char*)&län, 2 );
-                char *n = new char[ län ];
-                empfangen->getNachrichtEncrypted( n, län );
-                if( nachLogin && nachLogin->zSpielenFenster() )
-                    nachLogin->zSpielenFenster()->statistikNachricht( län, n );
-                delete[] n;
-            }
-            break;
-        case 0x14: // ping
-            empfangen->sendeEncrypted( "\1", 1 );
-            break;
-        default: // Unbekannte Servernachricht
-            if( nachLogin && nachLogin->zNachrichtenListe() )
-            {
-                hauptScreen->lock();
-                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
-                                                              new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
-                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
-                hauptScreen->unlock();
-            }
-            break;
-        }
-    }
-    run = 0;
-}
-
-// constant
-bool SpielKlient::istVerbunden() const // prüft, ob mit Chat Server verbunden
-{
-    return verbunden;
-}
-
-char *SpielKlient::getLetzterFehler() const // gibt den Letzten Fehlertext zuück
-{
-    return fehler->getText();
-}
-
-// Reference Counting
-SpielKlientV *SpielKlient::getThis()
-{
-    ref++;
-    return this;
-}
-
-SpielKlientV *SpielKlient::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 128 - 0
KSGClient/Netzwerk/SpielMessageProcessor.cpp

@@ -0,0 +1,128 @@
+#include "SpielMessageProcessor.h"
+#include "../Global/Variablen.h"
+
+SpielMessageProcessor::SpielMessageProcessor()
+    : Thread()
+{
+    ref = 1;
+    start();
+}
+
+void SpielMessageProcessor::thread()
+{
+    KSGClient::SpielServerNachricht msg;
+    msg.sts = new SpielerTeamStruktur();
+    while( spielClient && spielClient->istVerbunden() && spielClient->getNextMessage( msg ) )
+    {
+        switch( msg.type )
+        {
+        case 0: // verbindung getrennt
+            msg.sts->release();
+            return;
+        case 1: // verbleibende Zeit
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->spielGefundenZeitVerbleibend( msg.sekunden );
+            break;
+        case 2: // SpielErstellt abbruch
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Spiel Abgebrochen" ), msg.message.getThis(), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->spielGefundenAbbruch();
+            break;
+        case 3: // Fehler
+            hauptScreen->lock();
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), msg.message.getThis(), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+            hauptScreen->unlock();
+            break;
+        case 4: // zurück in Warteschlange
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->zurückInWarteschlange( msg.stunden, msg.minuten, msg.sekunden );
+            break;
+        case 5: // Erstellung fortsetzen
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->teamAuswahlBetreten();
+            break;
+        case 6: // SpielErstellt Initialisierung
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->teamAuswahlInit( (SpielerTeamStruktur*)msg.sts );
+            else
+                msg.sts->release();
+            msg.sts = new SpielerTeamStruktur();
+            break;
+        case 7: // SpielErstellt Spieler hinzugefügt
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->teamAuswahlAddSpieler( msg.accountId );
+            break;
+        case 8: // SpielErstellt Spieler entfernt
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->teamAuswahlRemoveSpieler( msg.accountId );
+            break;
+        case 9: // SpielErstellt Spieler wechselt Team
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->teamAuswahlSpielerWehseltTeam( msg.accountId, msg.spielerNummer );
+            break;
+        case 0xA: // SpielErstellt Chat Nachricht
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->teamAuswahlChatNachricht( msg.message );
+            break;
+        case 0xB: // Spiel gefunden
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->spielGefunden( msg.karteId );
+            break;
+        case 0xC: // Spiel Laden beginnen
+            aktion = 5;
+            break;
+        case 0xD: // Spiel Laden Spieler hinzufügen
+            if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
+                nachLogin->zImSpiel()->lBAddSpieler( msg.accountId, msg.spielerNummer );
+            break;
+        case 0xE: // Spiel Laden Spieler Prozent
+            if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
+                nachLogin->zImSpiel()->lBSetSpielerProzent( msg.accountId, msg.prozent );
+            break;
+        case 0xF: // Spiel Laden Spieler Ping
+            if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
+                nachLogin->zImSpiel()->lBSetSpielerPing( msg.accountId, msg.ping );
+            break;
+        case 0x11: // Spiel Laden Fertig
+            if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
+                nachLogin->zImSpiel()->endLaden();
+            break;
+        case 0x12: // Spiel Nachricht
+            if( nachLogin && nachLogin->zImSpiel() && nachLogin->zImSpiel()->istSichtbar() )
+                nachLogin->zImSpiel()->spielNachricht( msg.län, msg.data );
+            delete[] msg.data;
+            break;
+        case 0x13: // Statistik Nachricht
+            if( nachLogin && nachLogin->zSpielenFenster() )
+                nachLogin->zSpielenFenster()->statistikNachricht( msg.län, msg.data );
+            delete[] msg.data;
+            break;
+        default: // Unbekannte Servernachricht
+            if( nachLogin && nachLogin->zNachrichtenListe() )
+            {
+                hauptScreen->lock();
+                nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                                                              new Text( "Unbekannte Nachricht vom Server. Eventuel ist der Client nicht mehr Aktuell." ),
+                                                              new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+                hauptScreen->unlock();
+            }
+            break;
+        }
+    }
+    msg.sts->release();
+}
+
+SpielMessageProcessor *SpielMessageProcessor::getThis()
+{
+    ref++;
+    return this;
+}
+
+SpielMessageProcessor *SpielMessageProcessor::release()
+{
+    if( !--ref )
+        delete this;
+    return 0;
+}

+ 16 - 0
KSGClient/Netzwerk/SpielMessageProcessor.h

@@ -0,0 +1,16 @@
+#pragma once
+
+#include <Thread.h>
+
+using namespace Framework;
+
+class SpielMessageProcessor : public Thread
+{
+private:
+    int ref;
+public:
+    SpielMessageProcessor();
+    void thread() override;
+    SpielMessageProcessor *getThis();
+    SpielMessageProcessor *release();
+};

+ 2 - 2
KSGClient/Strukturen/Strukturen.cpp

@@ -9,7 +9,7 @@ SpielerTeamStruktur::SpielerTeamStruktur()
 	spielerFarbe = new Array< int >();
 	teamFarbe = new Array< int >();
 	teamName = new RCArray< Text >();
-	teamGröße = new Array< int >();
+	teamSize = new Array< int >();
 	ref = 1;
 }
 
@@ -19,7 +19,7 @@ SpielerTeamStruktur::~SpielerTeamStruktur()
 	spielerFarbe->release();
 	teamFarbe->release();
 	teamName->release();
-	teamGröße->release();
+	teamSize->release();
 }
 
 // Reference Counting

+ 5 - 11
KSGClient/Strukturen/Strukturen.h

@@ -4,26 +4,20 @@
 #include <Klient.h>
 #include <Array.h>
 #include <Text.h>
+#include "../../../Include/StrukturenV.h"
 
 using namespace Framework;
 
-struct SpielerTeamStruktur
+class SpielerTeamStruktur : public SpielerTeamStrukturV
 {
+public:
 	// Konstruktor
 	SpielerTeamStruktur();
 	// Destruktor
 	~SpielerTeamStruktur();
-	// variablen
-	int spielerAnzahl;
-	int teamAnzahl;
-	Array< int > *spielerFarbe;
-	Array< int > *teamFarbe;
-	RCArray< Text > *teamName;
-	Array< int > *teamGröße;
-	int ref;
 	// Reference Counting
-	SpielerTeamStruktur *getThis();
-	SpielerTeamStruktur *release();
+	SpielerTeamStruktur *getThis() override;
+	SpielerTeamStruktur *release() override;
 };
 
 #endif

+ 0 - 414
KSGClient/VorLogin/Account verwalten/Bestätigung.cpp

@@ -1,414 +0,0 @@
-#include "..\..\Global\Variablen.h"
-#include "Bestätigung.h"
-#include "..\..\Global\Initialisierung.h"
-#include <Punkt.h>
-#include <Text.h>
-
-// Inhalt der Bestätigung Klasse aus Bestätigung.h
-// Konstruktor
-Bestätigung::Bestätigung( Schrift *zSchrift, Fenster *zVorLoginFenster )
-{
-	Punkt bildschirmGröße = BildschirmGröße();
-	bestätigung = initKnopf( 10, 450, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Bestätigung" );
-	bestätigung->setMausEreignisParameter( this );
-	bestätigung->setMausEreignis( bestätigungBestätigungME );
-	initToolTip( bestätigung, "Account aktivieren oder remove.", zSchrift->getThis(), hauptScreen );
-	zVorLoginFenster->addMember( bestätigung );
-	fenster = initFenster( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 70, 250, 140, zSchrift, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Vorgang Bestätigen" );
-	name = initTextFeld( 24, 20, 200, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
-	name->setTastaturEreignisParameter( this );
-	name->setTastaturEreignis( bestätigungNameTE );
-	initToolTip( name, "Account Name.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( name );
-	passwort = initTextFeld( 24, 50, 200, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
-	passwort->setTastaturEreignisParameter( this );
-	passwort->setTastaturEreignis( bestätigungPasswortTE );
-	initToolTip( passwort, "Account Passwort.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( passwort );
-	weiter = initKnopf( 74, 80, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Weiter" );
-	weiter->setMausEreignisParameter( this );
-	weiter->setMausEreignis( bestätigungWeiterME );
-	fenster->addMember( weiter );
-	nachricht = initTextFeld( 0, 5, 250, 150, zSchrift, TextFeld::Style::Mehrzeilig | TextFeld::Style::HCenter, "" );
-	fenster->addMember( nachricht );
-	schlüssel = initTextFeld( 24, 55, 200, 20, zSchrift, TextFeld::Style::TextFeld & ~TextFeld::Style::Sichtbar, "Schlüssel" );
-	schlüssel->setTastaturEreignisParameter( this );
-	schlüssel->setTastaturEreignis( bestätigungSchlüsselTE );
-	initToolTip( schlüssel, "Zugeschickter Schlüssel.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( schlüssel );
-	später = initKnopf( 20, 85, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Später" );
-	später->setMausEreignisParameter( this );
-	später->setMausEreignis( bestätigungSpäterME );
-	initToolTip( später, "Vorgang später fortsetzen.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( später );
-	abbruch = initKnopf( 20, 115, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Abbrechen" );
-	abbruch->setMausEreignisParameter( this );
-	abbruch->setMausEreignis( bestätigungAbbruchME );
-	initToolTip( abbruch, "Vorgang abbrechen.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( abbruch );
-	neuSenden = initKnopf( 129, 115, 100, 20, zSchrift, Knopf::Style::Sichtbar, "neu senden" );
-	neuSenden->setMausEreignisParameter( this );
-	neuSenden->setMausEreignis( bestätigungNeuSendenME );
-	initToolTip( neuSenden, "E-Mail erneut senden.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( neuSenden );
-	zVorLoginFenster->addMember( fenster );
-	ref = 1;
-}
-
-// Destruktor
-Bestätigung::~Bestätigung()
-{
-	if( bestätigung )
-		bestätigung = bestätigung->release();
-	if( fenster )
-		fenster = fenster->release();
-	if( name )
-		name = name->release();
-	if( passwort )
-		passwort = passwort->release();
-	if( weiter )
-		weiter = weiter->release();
-	if( nachricht )
-		nachricht = nachricht->release();
-	if( schlüssel )
-		schlüssel = schlüssel->release();
-	if( später )
-		später = später->release();
-	if( abbruch )
-		abbruch = abbruch->release();
-	if( neuSenden )
-		neuSenden = neuSenden->release();
-}
-
-// Privat
-void Bestätigung::zeigeNachricht( const char *txt )
-{
-	Punkt bildschirmmitte = Bildschirmmitte();
-	name->removeStyle( TextFeld::Style::Sichtbar );
-	passwort->removeStyle( TextFeld::Style::Sichtbar );
-	schlüssel->removeStyle( TextFeld::Style::Sichtbar );
-	später->removeStyle( Knopf::Style::Sichtbar );
-	abbruch->removeStyle( Knopf::Style::Sichtbar );
-	neuSenden->removeStyle( Knopf::Style::Sichtbar );
-	fenster->setSize( 250, 150 );
-	fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 75 );
-	weiter->setPosition( 139, 100 );
-	weiter->setText( "Ok" );
-	nachricht->setText( txt );
-	if( nachricht->zText()->getLength() > 30 )
-	{
-		int pos = -1;
-		bool set = 0;
-		int lastp = 0;
-		for( int i = 20; i < nachricht->zText()->getLength(); )
-		{
-			char *tmp = &nachricht->zText()->getText()[ i ];
-			while( *tmp != ' ' && i < nachricht->zText()->getLength() )
-			{
-				tmp++;
-				i++;
-				if( i - 30 >= lastp )
-				{
-					if( set )
-					{
-						lastp = pos;
-						set = 0;
-						nachricht->zText()->getText()[ pos ] = '\n';
-					}
-					else
-						lastp += 5;
-				}
-			}
-			if( i < nachricht->zText()->getLength() )
-			{
-				pos = i;
-				set = 1;
-				tmp++;
-				i++;
-			}
-		}
-	}
-	nachricht->addStyle( TextFeld::Style::Sichtbar );
-}
-
-// Knopfdruck
-void Bestätigung::druckFremdKnopf() // Ein anderer Bereich des Programms wurde ausgewählt
-{
-	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
-	bestätigung->setLinienRahmenBreite( 2 );
-	bestätigung->setAlphaFeldFarbe( 0x5500FF00 );
-	bestätigung->setAlphaFeldStrength( -5 );
-}
-
-bool Bestätigung::bestätigungME( void *obj, MausEreignis me ) // MausEreignis im Knopf bestärigung
-{
-	if( me.id == ME_RLinks )
-	{
-		vorLogin->setBestätigung();
-
-		bestätigung->setLinienRahmenBreite( 3 );
-		bestätigung->setAlphaFeldFarbe( 0xFF000000 );
-		bestätigung->setAlphaFeldStrength( 20 );
-
-		Punkt bildschirmGröße = BildschirmGröße();
-		nachricht->removeStyle( TextFeld::Style::Sichtbar );
-		schlüssel->removeStyle( TextFeld::Style::Sichtbar );
-		später->removeStyle( Knopf::Style::Sichtbar );
-		abbruch->removeStyle( Knopf::Style::Sichtbar );
-		neuSenden->removeStyle( Knopf::Style::Sichtbar );
-		fenster->setTitel( "Vorgang Bestätigen" );
-		fenster->setSize( 250, 140 );
-		fenster->setPosition( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 70 );
-		fenster->addStyle( Fenster::Style::Sichtbar );
-		weiter->setText( "Weiter" );
-		weiter->setPosition( 74, 80 );
-		name->addStyle( TextFeld::Style::Sichtbar );
-		passwort->addStyle( TextFeld::Style::Sichtbar );
-		name->addStyle( TextFeld::Style::Fokus );
-		name->setAuswahl( name->zText()->getLength(), 0 );
-	}
-	return 1;
-}
-
-bool Bestätigung::nameTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld name
-{
-	if( te.id == TE_Press && te.taste == T_Enter )
-		return 0;
-	if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) )
-	{
-		name->removeStyle( TextFeld::Style::Fokus );
-		passwort->addStyle( TextFeld::Style::Fokus );
-		passwort->setAuswahl( passwort->zText()->getLength(), 0 );
-	}
-	if( bestätigung->zText()->getLength() >= 25 && istSchreibbar( te.taste ) )
-		return 0;
-	return 1;
-}
-
-bool Bestätigung::passwortTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld passwort
-{
-	if( te.id == TE_Press && te.taste == T_Enter )
-		return 0;
-	if( te.id == TE_Press )
-		passwort->setSchowChar( '*' );
-	if( te.id == TE_Release && te.taste == T_Enter )
-	{
-		passwort->removeStyle( TextFeld::Style::Fokus );
-		MausEreignis me;
-		me.id = ME_RLinks;
-		weiterME( 0, me );
-	}
-	if( passwort->zText()->getLength() >= 25 && istSchreibbar( te.taste ) )
-		return 0;
-	return 1;
-}
-
-bool Bestätigung::weiterME( void *obj, MausEreignis me ) // MausEreignis im Knopf weiter
-{
-	if( me.id == ME_RLinks )
-	{
-		if( weiter->zText()->istGleich( "Weiter" ) )
-		{
-			if( name->zText()->getLength() <= 0 )
-				zeigeNachricht( "Bitte gebe deinen Accountnamen ein." );
-			if( passwort->zText()->getLength() == 0 )
-				zeigeNachricht( "Bitte gebe dein Accountpasswort ein." );
-			if( weiter->zText()->istGleich( "Ok" ) )
-				return 1;
-			new AktionsThread( 6, name->zText()->getText(), passwort->zText()->getText(), 0, 0, 0 );
-		}
-		else if( weiter->zText()->istGleich( "Fertig" ) )
-		{
-			if( schlüssel->zText()->getLength() <= 0 )
-			{
-				zeigeNachricht( "Bitte gebe den dir zugesendeten Schlüssel ein." );
-				return 1;
-			}
-			new AktionsThread( 7, schlüssel->zText()->getText(), 0, 0, 0, 0 );
-		}
-		else
-		{
-			if( fenster->zTitel()->istGleich( "Vorgang Bestätigen" ) )
-			{
-				MausEreignis me;
-				me.id = ME_RLinks;
-				bestätigungME( 0, me );
-			}
-			else
-			{
-				nachricht->setText( "Dir wurde eine E-Mail mit einem\nSchlüssel gesendet, den du hier\neingeben musst." );
-				schlüssel->addStyle( TextFeld::Style::Sichtbar );
-				fenster->setSize( 250, 170 );
-				Punkt bildschirmGröße = BildschirmGröße();
-				fenster->setPosition( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 85 );
-				später->addStyle( Knopf::Style::Sichtbar );
-				weiter->setText( "Fertig" );
-				weiter->setPosition( 129, 85 );
-				abbruch->addStyle( Knopf::Style::Sichtbar );
-				neuSenden->addStyle( Knopf::Style::Sichtbar );
-			}
-		}
-	}
-	return 1;
-}
-
-bool Bestätigung::schlüsselTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld schlüssel
-{
-	if( te.id == TE_Press && te.taste == T_Enter )
-		return 0;
-	if( te.id == TE_Release && te.taste == T_Enter )
-	{
-		schlüssel->removeStyle( TextFeld::Style::Fokus );
-		MausEreignis me;
-		me.id = ME_RLinks;
-		weiterME( 0, me );
-	}
-	if( schlüssel->zText()->getLength() >= 20 && istSchreibbar( te.taste ) )
-		return 0;
-	return 1;
-}
-
-bool Bestätigung::späterME( void *obj, MausEreignis me ) // MausEreignis im Knopf später
-{
-	if( me.id == ME_RLinks )
-	{
-		registerKlient->später();
-		MausEreignis me;
-		me.id = ME_RLinks;
-		bestätigungME( 0, me );
-	}
-	return 1;
-}
-
-bool Bestätigung::abbruchME( void *obj, MausEreignis me ) // MausEreignis im Knopf abbruch
-{
-	if( me.id == ME_RLinks )
-	{
-		registerKlient->abbrechen();
-		MausEreignis me;
-		me.id = ME_RLinks;
-		bestätigungME( 0, me );
-	}
-	return 1;
-}
-
-bool Bestätigung::neuSendenME( void *obj, MausEreignis me ) // MausEreignis im Knopf neuSenden
-{
-	if( me.id == ME_RLinks )
-		registerKlient->eMailErneutSenden();
-	return 1;
-}
-
-void Bestätigung::setWeiterResult( int ret ) // setzt den Returnwert des Weiter drückens
-{
-	if( !ret )
-	{
-		if( registerKlient->getLetzterFehler() )
-			zeigeNachricht( registerKlient->getLetzterFehler() );
-		else
-			zeigeNachricht( "Es ist ein unbekannter Fehler aufgetreten." );
-		return;
-	}
-	name->removeStyle( TextFeld::Style::Sichtbar );
-	passwort->removeStyle( TextFeld::Style::Sichtbar );
-	if( ret == 1 )
-		fenster->setTitel( "Account aktivieren" );
-	else
-		fenster->setTitel( "Account remove" );
-	fenster->setSize( 250, 170 );
-	Punkt bildschirmGröße = BildschirmGröße();
-	fenster->setPosition( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 85 );
-	nachricht->setText( "Dir wurde eine E-Mail mit einem\nSchlüssel gesendet, den du hier\neingeben musst." );
-	nachricht->addStyle( TextFeld::Style::Sichtbar );
-	schlüssel->addStyle( TextFeld::Style::Sichtbar );
-	später->addStyle( Knopf::Style::Sichtbar );
-	weiter->setText( "Fertig" );
-	weiter->setPosition( 129, 85 );
-	abbruch->addStyle( Knopf::Style::Sichtbar );
-	neuSenden->addStyle( Knopf::Style::Sichtbar );
-}
-
-void Bestätigung::setFertigResult( bool ret ) // setzt den Returnwert des Fertig drükens
-{
-	if( ret )
-	{
-		fenster->setTitel( "Vorgang Bestätigen" );
-		zeigeNachricht( "Der Vorgang wurde erfolgreich abgeschlossen." );
-	}
-	else
-		zeigeNachricht( "Du hast nicht den richtigen Schlüssel eingegeben." );
-}
-
-// Reference Counting
-Bestätigung *Bestätigung::getThis()
-{
-	ref++;
-	return this;
-}
-
-Bestätigung *Bestätigung::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
-}
-
-
-// messages
-bool bestätigungBestätigungME( void *p, void *obj, MausEreignis me )
-{
-	if( !p )
-		return 0;
-	return ( (Bestätigung*)p )->bestätigungME( obj, me );
-}
-
-bool bestätigungNameTE( void *p, void *obj, TastaturEreignis te )
-{
-	if( !p )
-		return 0;
-	return ( (Bestätigung*)p )->nameTE( obj, te );
-}
-
-bool bestätigungPasswortTE( void *p, void *obj, TastaturEreignis te )
-{
-	if( !p )
-		return 0;
-	return ( (Bestätigung*)p )->passwortTE( obj, te );
-}
-
-bool bestätigungWeiterME( void *p, void *obj, MausEreignis me )
-{
-	if( !p )
-		return 0;
-	return ( (Bestätigung*)p )->weiterME( obj, me );
-}
-
-bool bestätigungSchlüsselTE( void *p, void *obj, TastaturEreignis te )
-{
-	if( !p )
-		return 0;
-	return ( (Bestätigung*)p )->schlüsselTE( obj, te );
-}
-
-bool bestätigungSpäterME( void *p, void *obj, MausEreignis me )
-{
-	if( !p )
-		return 0;
-	return ( (Bestätigung*)p )->späterME( obj, me );
-}
-
-bool bestätigungAbbruchME( void *p, void *obj, MausEreignis me )
-{
-	if( !p )
-		return 0;
-	return ( (Bestätigung*)p )->abbruchME( obj, me );
-}
-
-bool bestätigungNeuSendenME( void *p, void *obj, MausEreignis me )
-{
-	if( !p )
-		return 0;
-	return ( (Bestätigung*)p )->neuSendenME( obj, me );
-}

+ 0 - 63
KSGClient/VorLogin/Account verwalten/Bestätigung.h

@@ -1,63 +0,0 @@
-#ifndef Bestätigung_H
-#define Bestätigung_H
-
-#include <Fenster.h>
-#include <TextFeld.h>
-#include <Knopf.h>
-#include <MausEreignis.h>
-#include <TastaturEreignis.h>
-#include <Schrift.h>
-#include <Bildschirm.h>
-#include "..\..\Aktionen\AktionsThread.h"
-
-using namespace Framework;
-
-class Bestätigung
-{
-private:
-	Knopf *bestätigung;
-	Fenster *fenster;
-	TextFeld *name;
-	TextFeld *passwort;
-	Knopf *weiter;
-	TextFeld *schlüssel;
-	Knopf *später;
-	Knopf *abbruch;
-	Knopf *neuSenden;
-	TextFeld *nachricht;
-	int ref;
-	void zeigeNachricht( const char *txt );
-
-public:
-	// Konstruktor
-	Bestätigung( Schrift *zSchrift, Fenster *zVorLoginFenster );
-	// Destruktor
-	~Bestätigung();
-	// Knopfdruck
-	void druckFremdKnopf(); // Ein anderer Bereich des Programms wurde ausgewählt
-	bool bestätigungME( void *obj, MausEreignis me ); // MausEreignis im Knopf bestärigung
-	bool nameTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld name
-	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
-	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	bool schlüsselTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld schlüssel
-	bool späterME( void *obj, MausEreignis me ); // MausEreignis im Knopf später
-	bool abbruchME( void *obj, MausEreignis me ); // MausEreignis im Knopf abbruch
-	bool neuSendenME( void *obj, MausEreignis me ); // MausEreignis im Knopf neuSenden
-	void setWeiterResult( int ret ); // setzt den Returnwert des Weiter drückens
-	void setFertigResult( bool ret ); // setzt den Returnwert des Fertig drükens
-	// Reference Counting
-	Bestätigung *getThis();
-	Bestätigung *release();
-};
-
-// messages
-bool bestätigungBestätigungME( void *p, void *obj, MausEreignis me );
-bool bestätigungNameTE( void *p, void *obj, TastaturEreignis te );
-bool bestätigungPasswortTE( void *p, void *obj, TastaturEreignis te );
-bool bestätigungWeiterME( void *p, void *obj, MausEreignis me );
-bool bestätigungSchlüsselTE( void *p, void *obj, TastaturEreignis te );
-bool bestätigungSpäterME( void *p, void *obj, MausEreignis me );
-bool bestätigungAbbruchME( void *p, void *obj, MausEreignis me );
-bool bestätigungNeuSendenME( void *p, void *obj, MausEreignis me );
-
-#endif

+ 4 - 6
KSGClient/VorLogin/Account verwalten/EMail.cpp

@@ -119,7 +119,6 @@ void EMail
 void EMailÄndern::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	eMailÄndern->setLinienRahmenBreite( 2 );
 	eMailÄndern->setAlphaFeldFarbe( 0x5500FF00 );
 	eMailÄndern->setAlphaFeldStrength( -5 );
@@ -260,8 +259,8 @@ void EMail
 {
 	if( ret )
 		zeigeNachricht( "E-Mail erfolgreich geändert." );
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 	else
 		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
@@ -389,7 +388,6 @@ void EMailVergessen::zeigeNachricht( const char *txt )
 void EMailVergessen::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	eMailVergessen->setLinienRahmenBreite( 2 );
 	eMailVergessen->setAlphaFeldFarbe( 0x5500FF00 );
 	eMailVergessen->setAlphaFeldStrength( -5 );
@@ -515,8 +513,8 @@ void EMailVergessen::setReturn( bool ret, char *eMail ) // Setzt den Returnwert
 		zeigeNachricht( nachricht->getText() );
 		nachricht = nachricht->release();
 	}
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 	else
 		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 	delete eMail;

+ 4 - 6
KSGClient/VorLogin/Account verwalten/Geheimnis.cpp

@@ -119,7 +119,6 @@ void Geheimnis
 void GeheimnisÄndern::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	geheimnisÄndern->setLinienRahmenBreite( 2 );
 	geheimnisÄndern->setAlphaFeldFarbe( 0x5500FF00 );
 	geheimnisÄndern->setAlphaFeldStrength( -5 );
@@ -258,8 +257,8 @@ void Geheimnis
 {
 	if( ret )
 		zeigeNachricht( "Geheimnis erfolgreich geändert." );
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 	else
 		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
@@ -379,7 +378,6 @@ void GeheimnisVergessen::zeigeNachricht( const char *txt )
 void GeheimnisVergessen::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	geheimnisVergessen->setLinienRahmenBreite( 2 );
 	geheimnisVergessen->setAlphaFeldFarbe( 0x5500FF00 );
 	geheimnisVergessen->setAlphaFeldStrength( -5 );
@@ -478,8 +476,8 @@ void GeheimnisVergessen::setResult( bool ret ) // Setzt den Returnwert
 {
 	if( ret )
 		zeigeNachricht( "Dir wurde eine E-Mail mit deinem Accountgeheimnis gesendet." );
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 	else
 		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }

+ 2 - 3
KSGClient/VorLogin/Account verwalten/Name.cpp

@@ -103,7 +103,6 @@ void NameVergessen::zeigeNachricht( const char *txt )
 void NameVergessen::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	nameVergessen->setLinienRahmenBreite( 2 );
 	nameVergessen->setAlphaFeldFarbe( 0x5500FF00 );
 	nameVergessen->setAlphaFeldStrength( -5 );
@@ -202,8 +201,8 @@ void NameVergessen::setResult( bool ret ) // Setzt den Returnwert
 {
 	if( ret )
 		zeigeNachricht( "Dir wurde eine E-Mail mit deinem Accountnamen geschickt." );
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 	else
 		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }

+ 4 - 6
KSGClient/VorLogin/Account verwalten/Passwort.cpp

@@ -127,7 +127,6 @@ void Passwort
 void PasswortÄndern::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	passwortÄndern->setLinienRahmenBreite( 2 );
 	passwortÄndern->setAlphaFeldFarbe( 0x5500FF00 );
 	passwortÄndern->setAlphaFeldStrength( -5 );
@@ -289,8 +288,8 @@ void Passwort
 {
 	if( ret )
 		zeigeNachricht( "Passwort erfolgreich geändert." );
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 	else
 		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }
@@ -410,7 +409,6 @@ void PasswortVergessen::zeigeNachricht( const char *txt )
 void PasswortVergessen::druckFremdKnopf() // Ein anderer Knopf wurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	passwortVergessen->setLinienRahmenBreite( 2 );
 	passwortVergessen->setAlphaFeldFarbe( 0x5500FF00 );
 	passwortVergessen->setAlphaFeldStrength( -5 );
@@ -509,8 +507,8 @@ void PasswortVergessen::setResult( bool ret ) // Setzt den Returnwert
 {
 	if( ret )
 		zeigeNachricht( "Dir wurde eine E-Mail mit deinem Accountpasswort gesendet." );
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 	else
 		zeigeNachricht( "Es ist ein Unbekannter Fehler aufgetreten." );
 }

+ 2 - 4
KSGClient/VorLogin/Account verwalten/Registrierung.cpp

@@ -193,7 +193,6 @@ void Registrierung::zeigeNachricht( const char *txt )
 void Registrierung::druckFremdKnopf() // Ein anderer Knopfwurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	registrierung->setLinienRahmenBreite( 2 );
 	registrierung->setAlphaFeldFarbe( 0x5500FF00 );
 	registrierung->setAlphaFeldStrength( -5 );
@@ -299,7 +298,6 @@ bool Registrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im Kn
 			gbdTag->addStyle( TextFeld::Style::Sichtbar );
 			gbdMonat->addStyle( TextFeld::Style::Sichtbar );
 			gbdJahr->addStyle( TextFeld::Style::Sichtbar );
-			registerKlient->abbrechen();
 			name->addStyle( TextFeld::Style::Fokus );
 			name->setAuswahl( name->zText()->getLength(), 0 );
 		}
@@ -429,8 +427,8 @@ void Registrierung::setWeiterReturn( bool ret ) // setzt den Weiter Returnwert
 		text->setText( "Dir wurde eine E-Mail mit einem\naktivierungslink zugeschickt,\nden du in den nächsten 12 Stunden\nbenutzen musst." );
 		text->addStyle( TextFeld::Style::Sichtbar );
 	}
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 }
 
 // Reference Counting

+ 11 - 134
KSGClient/VorLogin/Account verwalten/Unregistrierung.cpp

@@ -36,25 +36,6 @@ Unregistrierung::Unregistrierung( Schrift *zSchrift, Fenster *zVorLoginFenster )
 	fenster->addMember( weiter );
 	text = initTextFeld( 0, 5, 250, 170, zSchrift, TextFeld::Style::Mehrzeilig | TextFeld::Style::HCenter, "" );
 	fenster->addMember( text );
-	schlüssel = initTextFeld( 25, 85, 200, 20, zSchrift, TextFeld::Style::TextFeld & ~TextFeld::Style::Sichtbar, "Schlüssel" );
-	schlüssel->setTastaturEreignisParameter( this );
-	schlüssel->setTastaturEreignis( unregistrierungSchlüsselTE );
-	initToolTip( schlüssel, "Zugeschickter Bestätigungsschlüssel.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( schlüssel );
-	später = initKnopf( 20, 145, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Später" );
-	später->setMausEreignisParameter( this );
-	später->setMausEreignis( unregistrierungSpäterME );
-	initToolTip( später, "Vorgang später unter 'Bestätigung' beenden.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( später );
-	neuSenden = initKnopf( 129, 145, 100, 20, zSchrift, Knopf::Style::Sichtbar, "neu senden" );
-	neuSenden->setMausEreignisParameter( this );
-	neuSenden->setMausEreignis( unregistrierungNeuSendenME );
-	initToolTip( neuSenden, "E-Mail erneut senden.", zSchrift->getThis(), hauptScreen );
-	fenster->addMember( neuSenden );
-	fertig = initKnopf( 129, 115, 100, 20, zSchrift, 0, "Fertig" );
-	fertig->setMausEreignisParameter( this );
-	fertig->setMausEreignis( unregistrierungFertigME );
-	fenster->addMember( fertig );
 	zVorLoginFenster->addMember( fenster );
 	ref = 1;
 }
@@ -74,14 +55,6 @@ Unregistrierung::~Unregistrierung()
 		weiter = weiter->release();
 	if( text )
 		text = text->release();
-	if( schlüssel )
-		schlüssel = schlüssel->release();
-	if( später )
-		später = später->release();
-	if( neuSenden )
-		neuSenden = neuSenden->release();
-	if( fertig )
-		fertig = fertig->release();
 	if( unregistrierung )
 		unregistrierung = unregistrierung->release();
 }
@@ -93,10 +66,6 @@ void Unregistrierung::zeigeNachricht( const char *txt )
 	name->removeStyle( TextFeld::Style::Sichtbar );
 	passwort->removeStyle( TextFeld::Style::Sichtbar );
 	geheimnis->removeStyle( TextFeld::Style::Sichtbar );
-	schlüssel->removeStyle( TextFeld::Style::Sichtbar );
-	später->removeStyle( Knopf::Style::Sichtbar );
-	fertig->removeStyle( Knopf::Style::Sichtbar );
-	neuSenden->removeStyle( Knopf::Style::Sichtbar );
 	fenster->setSize( 250, 150 );
 	fenster->setPosition( bildschirmmitte.x - 125, bildschirmmitte.y - 75 );
 	weiter->setPosition( 139, 100 );
@@ -142,7 +111,6 @@ void Unregistrierung::zeigeNachricht( const char *txt )
 void Unregistrierung::druckFremdKnopf() // Ein anderer Knopfwurde gedrückt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	registerKlient->trenne();
 	unregistrierung->setLinienRahmenBreite( 2 );
 	unregistrierung->setAlphaFeldFarbe( 0x5500FF00 );
 	unregistrierung->setAlphaFeldStrength( -5 );
@@ -201,13 +169,9 @@ bool Unregistrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im
 	if( me.id == ME_RLinks )
 	{
 		Punkt bildchirmGröße = BildschirmGröße();
-		if( schlüssel->hatStyle( TextFeld::Style::Sichtbar ) )
+		if( weiter->zText()->istGleich( "Ok" ) )
 		{
 			text->removeStyle( TextFeld::Style::Sichtbar );
-			schlüssel->removeStyle( TextFeld::Style::Sichtbar );
-			fertig->removeStyle( Knopf::Style::Sichtbar );
-			später->removeStyle( Knopf::Style::Sichtbar );
-			neuSenden->removeStyle( Knopf::Style::Sichtbar );
 			weiter->setPosition( 74, 110 );
 			weiter->setText( "Weiter" );
 			fenster->setSize( 250, 170 );
@@ -216,7 +180,6 @@ bool Unregistrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im
 			name->addStyle( TextFeld::Style::Sichtbar );
 			passwort->addStyle( TextFeld::Style::Sichtbar );
 			geheimnis->addStyle( TextFeld::Style::Sichtbar );
-			registerKlient->abbrechen();
 			name->addStyle( TextFeld::Style::Fokus );
 			name->setAuswahl( name->zText()->getLength(), 0 );
 		}
@@ -239,17 +202,11 @@ bool Unregistrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im
 				}
 				else
 				{
-					fenster->setSize( 250, 200 );
-					fenster->setPosition( bildchirmGröße.x / 2 - 125, bildchirmGröße.y / 2 - 100 );
-					weiter->setPosition( 20, 115 );
-					weiter->setText( "Abbrechen" );
-					text->setText( "Dir wurde eine E-Mail mit einem\ndeaktivierungsode zugeschickt,\nden du in den nächsten 12 Stunden\nhier eingeben musst." );
-					schlüssel->addStyle( TextFeld::Style::Sichtbar );
-					später->addStyle( Knopf::Style::Sichtbar );
-					neuSenden->addStyle( Knopf::Style::Sichtbar );
-					fertig->addStyle( Knopf::Style::Sichtbar );
-					schlüssel->addStyle( TextFeld::Style::Fokus );
-					schlüssel->setAuswahl( schlüssel->zText()->getLength(), 0 );
+                    fenster->setSize( 250, 200 );
+                    fenster->setPosition( bildchirmGröße.x / 2 - 125, bildchirmGröße.y / 2 - 100 );
+                    weiter->setPosition( 20, 115 );
+                    weiter->setText( "Ok" );
+                    text->setText( "Dir wurde eine E-Mail mit einem\nLink zur Bestätigung zugeschickt,\nden du in den nächsten 12 Stunden\nbenutzen musst." );
 				}
 			}
 			else
@@ -273,46 +230,6 @@ bool Unregistrierung::weiterME( void *obj, MausEreignis me ) // MausEreignis im
 	return 1;
 }
 
-bool Unregistrierung::schlüsselTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld schlüssel
-{
-	if( te.id == TE_Press && te.taste == T_Enter )
-		return 0;
-	if( te.id == TE_Release && te.taste == T_Enter )
-	{
-		schlüssel->removeStyle( TextFeld::Style::Fokus );
-		MausEreignis me;
-		me.id = ME_RLinks;
-		fertigME( 0, me );
-	}
-	if( schlüssel->zText()->getLength() >= 20 && istSchreibbar( te.taste ) )
-		return 0;
-	return 1;
-}
-
-bool Unregistrierung::späterME( void *obj, MausEreignis me ) // MausEreignis im Knopf später
-{
-	if( me.id == ME_RLinks )
-	{
-		fenster->setTitel( "Account remove" );
-		zeigeNachricht( "Du kannst den Vorgang nun später unter 'Bestätigung' vollenden." );
-	}
-	return 1;
-}
-
-bool Unregistrierung::neuSendenME( void *obj, MausEreignis me ) // MausEreignis im Knopf neuSenden
-{
-	if( me.id == ME_RLinks )
-		registerKlient->eMailErneutSenden();
-	return 1;
-}
-
-bool Unregistrierung::fertigME( void *obj, MausEreignis me ) // MausEreignis im Knopf fertig
-{
-	if( me.id == ME_RLinks )
-		new AktionsThread( 18, schlüssel->zText()->getText(), 0, 0, 0, 0 );
-	return 1;
-}
-
 bool Unregistrierung::unregistrierungME( void *obj, MausEreignis me ) // MausEreignis im Knopf unregistrierung
 {
 	if( me.id == ME_RLinks )
@@ -324,13 +241,7 @@ bool Unregistrierung::unregistrierungME( void *obj, MausEreignis me ) // MausEre
 		unregistrierung->setAlphaFeldFarbe( 0xFF000000 );
 		unregistrierung->setAlphaFeldStrength( 20 );
 
-		if( schlüssel->hatStyle( TextFeld::Style::Sichtbar ) )
-			registerKlient->abbrechen();
 		text->removeStyle( TextFeld::Style::Sichtbar );
-		schlüssel->removeStyle( TextFeld::Style::Sichtbar );
-		fertig->removeStyle( Knopf::Style::Sichtbar );
-		später->removeStyle( Knopf::Style::Sichtbar );
-		neuSenden->removeStyle( Knopf::Style::Sichtbar );
 		weiter->setPosition( 74, 110 );
 		weiter->setText( "Weiter" );
 		fenster->setTitel( "Account remove" );
@@ -358,18 +269,12 @@ void Unregistrierung::setWeiterReturn( bool ret ) // setzt den Weiter Returnwert
 		fenster->setSize( 250, 200 );
 		fenster->setPosition( bildchirmGröße.x / 2 - 125, bildchirmGröße.y / 2 - 100 );
 		weiter->setPosition( 20, 115 );
-		weiter->setText( "Abbrechen" );
-		text->setText( "Dir wurde eine E-Mail mit einem\ndeaktivierungsode zugeschickt,\nden du in den nächsten 12 Stunden\nhier eingeben musst." );
+		weiter->setText( "Ok" );
+        text->setText( "Dir wurde eine E-Mail mit einem\nLink zur Bestätigung zugeschickt,\nden du in den nächsten 12 Stunden\nbenutzen musst." );
 		text->addStyle( TextFeld::Style::Sichtbar );
-		schlüssel->addStyle( TextFeld::Style::Sichtbar );
-		fertig->addStyle( Knopf::Style::Sichtbar );
-		später->addStyle( Knopf::Style::Sichtbar );
-		neuSenden->addStyle( Knopf::Style::Sichtbar );
-		schlüssel->addStyle( TextFeld::Style::Fokus );
-		schlüssel->setAuswahl( schlüssel->zText()->getLength(), 0 );
 	}
-	else if( registerKlient->getLetzterFehler() )
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+	else if( lastError.getLength() )
+		zeigeNachricht( lastError );
 }
 
 void Unregistrierung::setFertigReturn( bool ret ) // setzt den Fertig Returnwert
@@ -377,7 +282,7 @@ void Unregistrierung::setFertigReturn( bool ret ) // setzt den Fertig Returnwert
 	if( ret )
 		vorLogin->setLogin( 0 );
 	else
-		zeigeNachricht( registerKlient->getLetzterFehler() );
+		zeigeNachricht( lastError );
 }
 
 // Reference Counting
@@ -425,34 +330,6 @@ bool unregistrierungWeiterME( void *p, void *obj, MausEreignis me )
 	return ( (Unregistrierung*)p )->weiterME( obj, me );
 }
 
-bool unregistrierungSchlüsselTE( void *p, void *obj, TastaturEreignis te )
-{
-	if( !p )
-		return 0;
-	return ( (Unregistrierung*)p )->schlüsselTE( obj, te );
-}
-
-bool unregistrierungSpäterME( void *p, void *obj, MausEreignis me )
-{
-	if( !p )
-		return 0;
-	return ( (Unregistrierung*)p )->späterME( obj, me );
-}
-
-bool unregistrierungNeuSendenME( void *p, void *obj, MausEreignis me )
-{
-	if( !p )
-		return 0;
-	return ( (Unregistrierung*)p )->neuSendenME( obj, me );
-}
-
-bool unregistrierungFertigME( void *p, void *obj, MausEreignis me )
-{
-	if( !p )
-		return 0;
-	return ( (Unregistrierung*)p )->fertigME( obj, me );
-}
-
 bool unregistrierungUnregistrierungME( void *p, void *obj, MausEreignis me )
 {
 	if( !p )

+ 0 - 12
KSGClient/VorLogin/Account verwalten/Unregistrierung.h

@@ -21,10 +21,6 @@ private:
 	TextFeld *geheimnis;
 	Knopf *weiter;
 	TextFeld *text;
-	TextFeld *schlüssel;
-	Knopf *fertig;
-	Knopf *später;
-	Knopf *neuSenden;
 	Knopf *unregistrierung;
 	int ref;
 	void zeigeNachricht( const char *txt );
@@ -40,10 +36,6 @@ public:
 	bool passwortTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld passwort
 	bool geheimnisTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld geheimnis
 	bool weiterME( void *obj, MausEreignis me ); // MausEreignis im Knopf weiter
-	bool schlüsselTE( void *obj, TastaturEreignis te ); // Tastaturereignis im Textfeld schlüssel
-	bool späterME( void *obj, MausEreignis me ); // MausEreignis im Knopf später
-	bool neuSendenME( void *obj, MausEreignis me ); // MausEreignis im Knopf neuSenden
-	bool fertigME( void *obj, MausEreignis me ); // MausEreignis im Knopf fertig
 	bool unregistrierungME( void *obj, MausEreignis me ); // MausEreignis im Knopf unregistrierung
 	void setWeiterReturn( bool ret ); // setzt den Weiter Returnwert
 	void setFertigReturn( bool ret ); // setzt den Fertig Returnwert
@@ -57,10 +49,6 @@ bool unregistrierungNameTE( void *p, void *obj, TastaturEreignis te );
 bool unregistrierungPasswortTE( void *p, void *obj, TastaturEreignis te );
 bool unregistrierungGeheimnisTE( void *p, void *obj, TastaturEreignis te );
 bool unregistrierungWeiterME( void *p, void *obj, MausEreignis me );
-bool unregistrierungSchlüsselTE( void *p, void *obj, TastaturEreignis te );
-bool unregistrierungSpäterME( void *p, void *obj, MausEreignis me );
-bool unregistrierungNeuSendenME( void *p, void *obj, MausEreignis me );
-bool unregistrierungFertigME( void *p, void *obj, MausEreignis me );
 bool unregistrierungUnregistrierungME( void *p, void *obj, MausEreignis me );
 
 #endif

+ 4 - 5
KSGClient/VorLogin/Login/Login.cpp

@@ -79,7 +79,6 @@ Login::~Login()
 void Login::druckFremdKnopf() // Ein anderer Bereich des Programms wurde ausgewählt
 {
 	fenster->removeStyle( Fenster::Style::Sichtbar );
-	loginKlient->trenne();
 	login->setLinienRahmenBreite( 2 );
 	login->setAlphaFeldFarbe( 0x5500FF00 );
 	login->setAlphaFeldStrength( -5 );
@@ -170,7 +169,7 @@ bool Login::okME( void *obj, MausEreignis me ) // MausEreignis im Knopf ok
 	if( me.id == ME_RLinks )
 	{
 		if( geheimnis->hatStyle( TextFeld::Style::Sichtbar ) )
-			new AktionsThread( 3, geheimnis->zText()->getText(), 0, 0, 0, 0 );
+			new AktionsThread( 3, name->zText()->getText(), passwort->zText()->getText(), geheimnis->zText()->getText(), 0, 0 );
 		else
 		{
 			nachricht->removeStyle( TextFeld::Style::Sichtbar );
@@ -245,12 +244,12 @@ void Login::setLoginReturn( int ret ) // setzt den Returnwert vom login
 		geheimnis->addStyle( TextFeld::Style::Fokus );
 		geheimnis->setAuswahl( geheimnis->zText()->getLength(), 0 );
 	}
-	else if( !ret && loginKlient->getLetzterFehler() )
+	else if( !ret && lastError.getLength() )
 	{
 		name->removeStyle( TextFeld::Style::Sichtbar );
 		passwort->removeStyle( TextFeld::Style::Sichtbar );
 		weiter->removeStyle( Knopf::Style::Sichtbar );
-		nachricht->setText( loginKlient->getLetzterFehler() );
+		nachricht->setText( lastError );
 		if( nachricht->zText()->getLength() > 30 )
 		{
 			int pos = -1;
@@ -295,7 +294,7 @@ void Login::setKickReturn( int ret ) // setzt den returnwert vom kick
 		new AktionsThread( 2, 0, 0, 0, 0, 0 );
 	else if( ret == 2 )
 	{
-		nachricht->setText( loginKlient->getLetzterFehler() );
+		nachricht->setText( lastError );
 		if( nachricht->zText()->getLength() > 30 )
 		{
 			int pos = -1;

+ 0 - 58
KSGClient/VorLogin/VorLogin.cpp

@@ -12,7 +12,6 @@ VorLogin::VorLogin( Schrift *zSchrift, Bildschirm *zBildschirm )
 	fenster = 0;
 	beenden = 0;
 	login = 0;
-	bestätigung = 0;
 	eMailÄndern = 0;
 	eMailVergessen = 0;
 	geheimnisÄndern = 0;
@@ -52,7 +51,6 @@ void VorLogin::setSichtbar( bool s ) // Setzt die Sichtbarkeit der VorLogin Ober
 		initToolTip( beenden, "Beendet den Kolja-Strohm Games Client.", schrift->getThis(), bildschirm );
 		fenster->addMember( beenden );
 		login = new Login( schrift, fenster );
-		bestätigung = new Bestätigung( schrift, fenster );
 		eMailÄndern = new EMailÄndern( schrift, fenster );
 		eMailVergessen = new EMailVergessen( schrift, fenster );
 		geheimnisÄndern = new GeheimnisÄndern( schrift, fenster );
@@ -72,8 +70,6 @@ void VorLogin::setSichtbar( bool s ) // Setzt die Sichtbarkeit der VorLogin Ober
 			beenden = beenden->release();
 		if( login )
 			login = login->release();
-		if( bestätigung )
-			bestätigung = bestätigung->release();
 		if( eMailÄndern )
 			eMailÄndern = eMailÄndern->release();
 		if( eMailVergessen )
@@ -125,32 +121,6 @@ void VorLogin::setLogin( bool knopfPress ) // macht Login Oberfl
 		geheimnisVergessen->druckFremdKnopf();
 	if( nameVergessen )
 		nameVergessen->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
-}
-
-void VorLogin::setBestätigung() // macht Bestätigung Oberfläche sichtbar
-{
-	if( registrierung )
-		registrierung->druckFremdKnopf();
-	if( unregistrierung )
-		unregistrierung->druckFremdKnopf();
-	if( passwortÄndern )
-		passwortÄndern->druckFremdKnopf();
-	if( passwortVergessen )
-		passwortVergessen->druckFremdKnopf();
-	if( eMailÄndern )
-		eMailÄndern->druckFremdKnopf();
-	if( eMailVergessen )
-		eMailVergessen->druckFremdKnopf();
-	if( geheimnisÄndern )
-		geheimnisÄndern->druckFremdKnopf();
-	if( geheimnisVergessen )
-		geheimnisVergessen->druckFremdKnopf();
-	if( nameVergessen )
-		nameVergessen->druckFremdKnopf();
-	if( login )
-		login->druckFremdKnopf();
 }
 
 void VorLogin::setEMailÄndern() // macht EMailÄndern Oberfläche sichtbar
@@ -163,8 +133,6 @@ void VorLogin::setEMail
 		passwortÄndern->druckFremdKnopf();
 	if( passwortVergessen )
 		passwortVergessen->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailVergessen )
 		eMailVergessen->druckFremdKnopf();
 	if( geheimnisÄndern )
@@ -187,8 +155,6 @@ void VorLogin::setEMailVergessen() // macht EMailVergessen Oberfl
 		passwortÄndern->druckFremdKnopf();
 	if( passwortVergessen )
 		passwortVergessen->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailÄndern )
 		eMailÄndern->druckFremdKnopf();
 	if( geheimnisÄndern )
@@ -211,8 +177,6 @@ void VorLogin::setGeheimnis
 		passwortÄndern->druckFremdKnopf();
 	if( passwortVergessen )
 		passwortVergessen->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailÄndern )
 		eMailÄndern->druckFremdKnopf();
 	if( eMailVergessen )
@@ -235,8 +199,6 @@ void VorLogin::setGeheilnisVergessen() // macht GeheimnisVergessen Oberfl
 		passwortÄndern->druckFremdKnopf();
 	if( passwortVergessen )
 		passwortVergessen->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailÄndern )
 		eMailÄndern->druckFremdKnopf();
 	if( eMailVergessen )
@@ -259,8 +221,6 @@ void VorLogin::setNameVergessen() // macht NameVergessen Oberfl
 		passwortÄndern->druckFremdKnopf();
 	if( passwortVergessen )
 		passwortVergessen->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailÄndern )
 		eMailÄndern->druckFremdKnopf();
 	if( eMailVergessen )
@@ -283,8 +243,6 @@ void VorLogin::setPasswort
 		nameVergessen->druckFremdKnopf();
 	if( passwortVergessen )
 		passwortVergessen->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailÄndern )
 		eMailÄndern->druckFremdKnopf();
 	if( eMailVergessen )
@@ -307,8 +265,6 @@ void VorLogin::setPasswortVergessen() // macht passwortVergessen Oberfl
 		nameVergessen->druckFremdKnopf();
 	if( passwortÄndern )
 		passwortÄndern->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailÄndern )
 		eMailÄndern->druckFremdKnopf();
 	if( eMailVergessen )
@@ -331,8 +287,6 @@ void VorLogin::setRegistrierung() // macht Registrierung Oberfl
 		nameVergessen->druckFremdKnopf();
 	if( passwortÄndern )
 		passwortÄndern->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailÄndern )
 		eMailÄndern->druckFremdKnopf();
 	if( eMailVergessen )
@@ -355,8 +309,6 @@ void VorLogin::setUnregistrierung() // macht Unregistrierung Oberfl
 		nameVergessen->druckFremdKnopf();
 	if( passwortÄndern )
 		passwortÄndern->druckFremdKnopf();
-	if( bestätigung )
-		bestätigung->druckFremdKnopf();
 	if( eMailÄndern )
 		eMailÄndern->druckFremdKnopf();
 	if( eMailVergessen )
@@ -380,16 +332,6 @@ Login *VorLogin::zLogin() const
 	return login;
 }
 
-Bestätigung *VorLogin::getBestätigung() const // gibt die Bestätigung Oberfläche zurück
-{
-	return bestätigung ? bestätigung->getThis() : 0;
-}
-
-Bestätigung *VorLogin::zBestätigung() const
-{
-	return bestätigung;
-}
-
 EMailÄndern *VorLogin::getEMailÄndern() const // gibt die EMailÄndern Oberfläche zurück
 {
 	return eMailÄndern ? eMailÄndern->getThis() : 0;

+ 0 - 5
KSGClient/VorLogin/VorLogin.h

@@ -3,7 +3,6 @@
 
 #include <Klient.h>
 #include "Login\Login.h"
-#include "Account verwalten\Bestätigung.h"
 #include "Account verwalten\EMail.h"
 #include "Account verwalten\Geheimnis.h"
 #include "Account verwalten\Name.h"
@@ -16,7 +15,6 @@ class VorLogin
 private:
 	Knopf				*beenden;
 	Login				*login;
-	Bestätigung			*bestätigung;
 	EMailÄndern			*eMailÄndern;
 	EMailVergessen		*eMailVergessen;
 	GeheimnisÄndern		*geheimnisÄndern;
@@ -39,7 +37,6 @@ public:
 	// nicht constant
 	void setSichtbar( bool s ); // Setzt die Sichtbarkeit der VorLogin Oberfräche
 	void setLogin( bool knopfPress ); // macht Login Oberfläche sichtbar
-	void setBestätigung(); // macht Bestätigung Oberfläche sichtbar
 	void setEMailÄndern(); // macht EMailÄndern Oberfläche sichtbar
 	void setEMailVergessen(); // macht EMailVergessen Oberfläche sichtbar
 	void setGeheimnisÄndern(); // macht GeheimnisÄndern Oberfläche sichtbar
@@ -52,8 +49,6 @@ public:
 	// constant
 	Login *getLogin() const; // gibt die Login Oberfläche zurück
 	Login *zLogin() const;
-	Bestätigung *getBestätigung() const; // gibt die Bestätigung Oberfläche zurück
-	Bestätigung *zBestätigung() const;
 	EMailÄndern *getEMailÄndern() const; // gibt die EMailÄndern Oberfläche zurück
 	EMailÄndern *zEMailÄndern() const;
 	EMailVergessen *getEMailVergessen() const; // gibt die EMailVergessen Oberfläche zurück

BIN
Klient - Verknüpfung.lnk