#pragma once

#include <Array.h>
#include <Thread.h>

namespace Framework
{
    class Text;
    class Datei;
    class KSGTDatei;
    class FBalken;
    class Zeit;
    class Bild;
    class Model2DData;
}

namespace GSL
{
    class GSLSoundV;
}

namespace Network
{
    class Klient;
}

namespace KSGClient
{
    // Enth�lt die Daten eines Spielers zu einem vergangenen Spiel
    class SpielHistorieSpielerDaten
    {
    protected:
        int ref; // Reference Counter

    public:
        Framework::Text *name; // Der Sichtabe Name des Spielers
        int punkte; // Die Punkte, die der Spieler in dem Spiel gewonnen / verloren hat
        Framework::Text *status; // Der Status des Spielers in dem Spiel (verloren, gewonnen, nicht anwesend, beobachter, unentschieden)
        int farbe; // Die Farbe des Spielers
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual SpielHistorieSpielerDaten *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual SpielHistorieSpielerDaten *release() = 0;
    };

    // Enth�lt die Datein eines Teams zu einem vergangenen Spiel
    class SpielHistorieTeamDaten
    {
    protected:
        int ref; // Reference Counter

    public:
        Framework::Text *name; // Der Sichtabe Name des Teams
        int sAnzahl; // Die Anzahl der Spieler im Team
        Framework::Text *status; // Der Status des Teams (verloren, gewonnen, beobachter, unentschieden)
        int farbe; // Die Farbe des Teams
        Framework::RCArray< SpielHistorieSpielerDaten > *spieler; // Eine Liste mit den Spielerdaten zu den Spielern aus dem Team
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual SpielHistorieTeamDaten *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual SpielHistorieTeamDaten *release() = 0;
    };

    // Enth�lt Daten zu einem vergangenen Spiel
    class SpielHistorieDaten
    {
    protected:
        int ref; // Reference Counter

    public:
        int id; // Die Id des vergangenen Spiels
        int karteId; // Die Id der Karte, welche gespielt wurde
        Framework::Text *spiel; // Der Name des Spiels, welches gespielt wurde
        Framework::Text *karte; // Der Name der Karte, welche gespielt wurde
        Framework::Text *datum; // Der Zeitpunkt, an dem das Spiel Statfand
        Framework::Text *status; // Der Status des Spielers, �ber welchen die Statistik angefragt wurde
        Framework::Text *dauer; // Die Dater des Spiels
        Framework::Text *spielStatus; // Der Status des Spiels (beginnt, l�uft, abgebrochen, fehlerhaft, beendet, unbewertet)
        Framework::Text *gewinner; // Der Name des Gewinners
        int sAnzahl; // Die Anzahl der Spieler
        Framework::RCArray< SpielHistorieTeamDaten > *teams; // Die Daten der Teams des Spiels
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual SpielHistorieDaten *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual SpielHistorieDaten *release() = 0;
    };

    // Enth�lt eine Liste von Spiel Daten aus vergangenen Spielen
    class SpielHistorieListe
    {
    protected:
        int ref; // Reference Counter

    public:
        Framework::RCArray< SpielHistorieDaten > *spiele; // Eine Liste mit den Daten zu vergangenen Spielen
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual SpielHistorieListe *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual SpielHistorieListe *release() = 0;
    };

    // Enth�lt Informationen zu einem Account
    class AccountInfo
    {
    protected:
        int ref; // Reference Counter

    public:
        int id; // Die Id des Accounts
        Framework::Text *name; // Der angezeigte Name des Accounts
        Framework::Text zuletztOnline; // Der Zeitpunkt, zu dem der Account zuletzt online war
        Framework::Text letztesSpiel; // Der Name des zuletzt gespielten online Spiels
        Framework::Text letzteKarte; // Der Name der zuletzt gespielten Karte
        Framework::Text punkte; // Die Punkte des Spielers in dem Spiel
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual AccountInfo *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual AccountInfo *release() = 0;
    };

    // Enth�lt Informationen zur Aktivit�t eines Accounts an einem bestimmten Tag
    class AccountActivityInfo
    {
    protected:
        int ref; // Reference Counter

    public:
        Framework::Text datum; // Das Datum f�r das die Werte gillt
        double stOnline; // Die Anzahl der Stunden, die der Account Online war
        double stGespielt; // Die Anzahl der Stunden, die der Account in online Spielen verbracht hat
        int anzSpiele; // Die Anzahl der gespielten online Spiele
        int anzGewonnen; // Die Anzahl der gewonnenen online Spiele
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual AccountActivityInfo *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual AccountActivityInfo *release() = 0;
    };

    // Enth�lt eine Nachricht, die von Chat Server gesendet wurde
    struct ChatServerNachricht
    {
        char type; // Typ der Nachricht
        Framework::Text message; // Text der Nachricht
        int account; // Beteiligter Account
        int gruppe; // Beteiligte Gruppe
        int chatroom; // Beteiligter Chatraum
        Framework::Array< int > ids; // Liste mit Account Ids
    };

    // Enth�lt alle Daten zur Team - Spieler Konstalation einer Karte
    class SpielerTeamStruktur
    {
    protected:
        int ref; // Reference Counter

    public:
        int spielerAnzahl; // Die Anzahl der Spieler
        int teamAnzahl; // Die Anzahl der Teams
        Framework::Array< int > *spielerFarbe; // Eine Liste mit den Farben f�r jeden Spieler
        Framework::Array< int > *teamFarbe; // Eine Liste mit Farben f�r jedes Team
        Framework::RCArray< Framework::Text > *teamName; // Eine Liste mit namen f�r jedes Team
        Framework::Array< int > *teamGr��e; // Eine Liste Mit Spieleranzahlen f�r jedes Team
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual SpielerTeamStruktur *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual SpielerTeamStruktur *release() = 0;
    };

    // Enth�lt eine Nachricht von dem Spiel Server
    class SpielServerNachricht
    {
    protected:
        int ref; // Reference Counter

    public:
        char type; // Typ der Nachricht
        char sekunden; // Mit der Nachricht zusammenh�ngende Sekunden
        char minuten; // Mit der Nachricht zusammenh�ngende Minuten
        char stunden; // Mit der Nachricht zusammenh�ngende Stunden
        Framework::Text *message; // Text der Nachricht
        SpielerTeamStruktur *sts; // Die Spieler Team Struktur eines Spiels
        int accountId; // Id des Accounts
        int spielerNummer; // Die Spielernummer des Accounts
        int karteId; // Die Id der Karte
        int prozent; // Der Prozentuale Ladefortschritt
        int ping; // Der Ping des Accounts (1000 = 1 Sekunde)
        short l�n; // L�nge der gesendeten Daten
        char *data; // Die gesendeten Daten
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual SpielServerNachricht *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual SpielServerNachricht *release() = 0;
    };

    // Wird benutzt, um die Verbindung mit den Servern aufrecht zu erhalten. Bei einem Verbindungsabbruch wird der Client automatisch abgemeldet
    class ErhaltungServerClient : protected virtual Framework::Thread
    {
    protected:
        // DBeantwortet Ping - Anfragen des Servers. Falls diese 60 Sekunden lang unbeantwortet bleiben, wird der Client vom Serversystem abgemeldet
        virtual void thread() = 0;
    public:
        // verbindet ich mit dem Erhaltung Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // Meldet sich beim Server ab und trennt die Verbindung
        virtual void abmelden() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne() = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual ErhaltungServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual ErhaltungServerClient *release() = 0;
    };

    // Wird benutzt, um aktualisierte Spieldateien herunterzuladen
    class PatchServerClient
    {
    public:
        // verbindet ich mit dem Patch Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // Gibt eine Tabelle von Dateigruppen zur�ck.
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::KSGTDatei *getDateiGruppenListe() = 0;
        // Gibt eine Tabelle von Dateien zur�ck.
        //  gruppe: Die Id der Dateigruppe, zu der die Dateien geh�hren sollen
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::KSGTDatei *getDateiListe( int gruppe ) = 0;
        // Gibt die Gr��e einer Datei in bytes zur�ck
        //  gruppe: Die Id der Dateigruppe der Datei
        //  pfad: Der Pfad der Datei
        virtual __int64 getDateiGr��e( int gruppe, const char *pfad ) = 0;
        // L�dt eine Datei herunter
        //  gruppe: Die Dateigruppe der Datei
        //  start: Der Index des bytes, bei dem der download begonnen werden soll (Enth�lt im Falle eines Abbruchs die Position, von welcher aus als n�chstes heruntergeladen werden muss)
        //  pfad: Der Pfad der Datei
        //  zielPfad: Der Pfad, an den die Datei gespeichert werden soll
        //  zFb: Ein Fortschrittsbalken, der automatisch aktualisiert wird
        //  abbruch: Wenn diese Variable w�hrend des Vorgangs auf 1 gesetzt wird, so wird das Herunterladen abgebrochen.
        //  maxbps: Die Anzahl der bytes pro Sekunde, die maximal �bertragen werden sollen
        virtual bool downloadDatei( int gruppe, __int64 *start, const char *pfad, const char *zielPfad, Framework::FBalken *zFb, bool *abbruch, int maxbps ) = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // Gibt die Anzahl von �bertragenen Bytes seit dem letzten Aufruf zur�ck
        virtual int getDownload() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual PatchServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual PatchServerClient *release() = 0;
    };

    // Wird verwendet um News Oberfl�chen abzufragen (KSG Script Seiten)
    class NewsServerClient
    {
    public:
        // verbindet ich mit dem News Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // L�dt eine KSG-Script Seite herunter uns speichert sie unter data/tmp/news/{name}
        //  name: Der Name der Seite
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladeSeite( char *name ) = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual NewsServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual NewsServerClient *release() = 0;
    };

    // Wird benutzt, um Accounts zu erstellen zu �ndern oder zu l�schen
    class RegisterServerClient
    {
    public:
        // verbindet ich mit dem Register Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // Sendet eine Anfrage auf Erstellung eines neuen Accounts. Ein neuer Account kann erst verwendet werden, wenn ein Link in der Best�tigungsemail angeklickt wurde.
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  name: Der Login Name des Accounts
        //  pass: Das Login Passwort des Accounts
        //  geheim: Das Geheimnis des Accounts
        //  eMail: Die EMail Adresse an die die best�tigungs EMail gesendet werden soll
        //  jahr: Das Jahr des Geburtsdatums
        //  monat: Der Monat des Geburtstages
        //  tag: Der Tag des Geburtstages
        virtual bool accountErstellen( const char *name, const char *pass, const char *geheim, const char *eMail, unsigned short jahr, char monat, char tag ) = 0;
        // Sendet eine Anfrage auf L�schung eines neuen Accounts. Ein neuer Account kann erst gel�scht werden, wenn ein Link in der Best�tigungsemail angeklickt wurde.
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  name: Der Login Name des Accounts
        //  pass: Das Login Passwort des Accounts
        //  geheim: Das Geheimnis des Accounts
        virtual bool accountL�schen( const char *name, const char *pass, const char *geheim ) = 0;
        // �ndert das Passwort eines Accounts
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  name: Der Login Name des Accounts
        //  pass: Das Login Passwort des Accounts
        //  geheim: Das Geheimnis des Accounts
        //  nPass: Das neue Passwort des Accounts
        virtual bool passwort�ndern( const char *name, const char *pass, const char *geheim, const char *nPass ) = 0;
        // �ndert die EMail Adresse eines Accounts
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  name: Der Login Name des Accounts
        //  pass: Das Login Passwort des Accounts
        //  geheim: Das Geheimnis des Accounts
        //  nEMail: Die neue EMail Adresse
        virtual bool eMail�ndern( const char *name, const char *pass, const char *geheim, const char *nEMail ) = 0;
        // �ndert das Geheimnis eines Accounts
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  name: Der Login Name des Accounts
        //  pass: Das Login Passwort des Accounts
        //  geheim: Das Geheimnis des Accounts
        //  nGeheim: Das neue Geheimnis
        virtual bool geheimnis�ndern( const char *name, const char *pass, const char *geheim, const char *nGeheim ) = 0;
        // Sendet eine Anfrage auf Name Vergessen. Der Name wird an die angegebene EMail Adresse gesendet
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  pass: Das Login Passwort des Accounts
        //  geheim: Das Geheimnis des Accounts
        virtual bool nameVergessen( const char *pass, const char *geheim ) = 0;
        // Sendet eine Anfrage auf Passwort Vergessen. Es wird ein Link an die angegebene Email Adresse gesendet, �ber den ein neues Passwort vergeben werden kann
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  name: Der Login Name des Accounts
        //  geheim: Das Geheimnis des Accounts
        virtual bool passwortVergessen( const char *name, const char *geheim ) = 0;
        // Sendet eine Anfrage auf Geheimnis Vergessen. Das Geheimnis wird an die angegebene EMail Adresse gesendet
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  name: Der Login Name des Accounts
        //  pass: Das Login Passwort des Accounts
        virtual bool geheimnisVergessen( const char *name, const char *pass ) = 0;
        // Sendet eine Anfrage auf EMail Vergessen. Die EMail Adresse wird direkt vom Server zur�ckgegeben
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  name: Der Login Name des Accounts
        //  pass: Das Login Passwort des Accounts
        //  geheim: Das Geheimnis des Accounts
        //  eMail: Ein Zeiger auf eine Zeichenkette. Diese wird bei einem Erfolgreichen Aufruf auf die EMail Adresse gesetzt und muss manuell mit delete[] gel�scht werden
        virtual bool eMailVergessen( const char *name, const char *pass, const char *geheim, char **eMail ) = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual RegisterServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual RegisterServerClient *release() = 0;
    };

    // Wird verwendet um sich einzuloggen oder auszuloggen
    class LoginServerClient
    {
    public:
        // verbindet sich mit dem zugewiesenen Login Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // Der Client wird beim Serversystem in einen Account eingeloggt
        //  Gibt bei Erfolg 1 zur�ck, 2 falls en anderer Client in dem Account eingeloggt ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual int login( const char *name, const char *pass ) = 0;
        // Diese Funktion wird in der Zukunft mal implementiert werden. Mit dem Geheimnis des Accounts k�nnen so andere Clients, welche bereits in dem Account eingeloggt werden rausgeschmissen werden.
        virtual bool kick( const char *name, const char *pass, const char *geheim ) = 0;
        // logt den Account aus
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  sollte erst aufgerufen werden, nachdem ein erfolgreicher Aufruf von login erfolg ist
        virtual bool logout() = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0; 
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // Gibt die Id des Accounts zur�ck, in den sich der Client eingeloggt hat.
        //  sollte erst aufgerufen werden, nachdem ein erfolgreicher Aufruf von login erfolg ist
        virtual int getAccountId() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual LoginServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual LoginServerClient *release() = 0;
    };

    class EditorServerClient;
    class KartenServerClient;
    class HistorieServerClient;

    // Wird verwendet um informationen �ber Accounts abzufragen
    //  Kann nur von eingeloggten Clients verwendet werden
    class InformationServerClient
    {
    public:
        // verbindet ich mit dem zugewiesenen Informaion Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // fragt nach dem Informationstext
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  txt: Ein Zeiger auf ein Text Objekt, welches bei einem erfolgreichen Aufruf den Informationstext enth�lt
        //  typ: ein Zeieger auf ein Integer, welches bei einem erfolgreichen Aufruf den Typ der Information enth�lt
        virtual bool getInformationText( Framework::Text *txt, int *typ ) = 0;
        // fragt, ob das entsprechende Spiel vom Server gesperrt wurde
        //  spielId: Die Id des Spiels
        //  Gibt 1 zur�ck, falls das Spiel gespielt werden darf, 0 sonnst
        virtual bool istSpielErlaubt( int spielId ) = 0;
        // fragt, ob die entsprechende Karte vom Server gesperrt wurde
        //  karteId: Die Id der Karte
        //  Gibt 1 zur�ck, falls die Karte gespielt werden darf, 0 sonnst
        virtual bool istKarteErlaubt( int karteId ) = 0;
        // Ermittelt die Id einer Karte
        //  name: Der Name der Karte
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getKarteId( char *name ) = 0;
        // Fragt nach der Id eines Spiels
        //  name: Der Name des Spiels
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getSpielId( char *name ) = 0;
        // fragt nach dem Namen eines Accounts
        //  accountId: Die Id des Accounts
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Text *getSpielerName( int accountId ) = 0;
        // fragt nach der Spiel Statistik eines Accounts
        //  accountId: Die Id des Accounts
        //  spielId: Die Id des Spiels
        //  werte: Nach erfolgreichem Aufruf enth�lt die Liste die Statistik werte (gespielt, gewonnen, verloren, punkte, bw0, bw1, bw2, bw3, bw4, bw5)
        virtual bool getSpielStatistik( int accountId, int spielId, Framework::Array< int > *werte ) = 0;
        // fragt nach dem Namen einer Karte
        //  karteId: Die id der Karte
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Text *getKarteName( int karteId ) = 0;
        // fragt nach dem Namen eines Spiels
        //  spielId: Die id des Spiels
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Text *getSpielName( int spielId ) = 0;
        // fragt nach dem Namen eines Chatrooms
        //  chatroomId: Die id des Chatrooms
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Text *getChatroomName( int chatroomId ) = 0;
        // fragt zu welcher Spielart die Karte geh�rt
        //  karteId: Die id der Karte
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getSpielId( int karteId ) = 0;
        // gibt die Id eines Accounts zur�ck
        //  name: Der Angezeigte Name des Accounts
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getAccountId( char *name ) = 0;
        // gibt die Id des Chatrooms zur�ck
        //  name: Der name des Chatrooms
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getChatroomId( char *name ) = 0;
        // gibt die karten Id zur�ck, zu dem eine Gruppe erstellt wurde
        //  gruppenId: Die id der Gruppe
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getGruppenKarteId( int gruppenId ) = 0;
        // gibt 1 zur�ck, wenn zu einer Gruppe Spieler hinzugef�gt werden k�nnen, 0 sonnst
        //  gruppeId: Die id der Gruppe
        virtual bool getGruppeSpielerHinzuf�gen( int gruppeId ) = 0;
        // gibt die Account Id des Gruppen Administrators zur�ck
        //  gruppeId: Die Id der Gruppe
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getGruppeAdminId( int gruppeId ) = 0;
        // gibt die Punkte eines Spielers zur�ck
        //  accountId: Die Accont Id des Spielers
        //  spielId: Die Id des Spiels
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getSpielerPunkte( int accountId, int spielId ) = 0;
        // gibt eine Liste mit Ids von gekauften Spielen zur�ck
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Array< int > *getAccountSpielArtListe() = 0;
        // gibt die neuste Version eines Spiels zur�ck
        //  spielId: Die Id des Spiels
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getSpielVersion( int spielId ) = 0;
        // gibt das Kupfer des Accounts zur�ck
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getKupfer() = 0;
        // Gibt die Dateigruppem Id eines Spieles zur�ck
        //  spielId: Die Id des Spiels
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getDateiGruppeIdVonSpiel( int spielId ) = 0;
        // Gibt den Dateigruppen Pfad zur�ck
        //  dgId: Die Id der Dateigruppe
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Text *getDateiGruppePfad( int dgId ) = 0;
        // gibt eine Liste mit gekauften Karten zur�ck
        //  spielId: Die Spiel Id zu der die Karten geh�ren sollen
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Array< int > *getAccountKarteListe( int spielId ) = 0;
        // Gibt die Dateigruppen Id eines Pfades zur�ck
        //  pfad: Der Pfad der Dateigruppe
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getDateiGruppeIdVonPfad( char *pfad ) = 0;
        // gibt die neuste Version einer Dateigruppe zur�ck
        //  dg: Die Dateigruppen Id
        //  Gibt bei misserfolg 0 zur�ck
        virtual int getDateiGruppeVersion( int dg ) = 0;
        // Gibt eine Liste Mit Accounts zur�ck, die einen bestimmten Text im Namen haben und bestimmt Sortiert ist
        //  suche: Der Text, der in den Namen enthalten sein soll
        //  seite: Die gew�nschte Seite der Tabelle (enth�lt nach einem Erfolgreichen Aufruf die korrekte Seite)
        //  maxSeite: Enth�lt nach erfolgreichem Aufruf die Maximale Seite
        //  sortSpalte: Die Spalte, nach der Sortiert werden soll
        //  r�ckw�rts: 1:=R�ckw�rtzt Sortierung, 0:=Vorw�rts Sortierung
        //  accounts: Enth�lt nach erfolgreichem Aufruf die Daten der Accounts
        //  Gibt die Anzahl der gefundenen Accounts zur�ck
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual int getSpielerListe( char *suche, int *seite, int *maxSeite, char sortSpalte, char r�ckw�rts, Framework::RCArray< AccountInfo > *accounts ) = 0;
        // ermittelt die aktivit�t eines Spielers
        //  accId: Die Id des Accounts
        //  info: Enth�lt nach erfolgreichem Aufruf die Aktivit�tsinformationen der letzten 30 Tage
        virtual bool getSpielerAktivit�t( int accId, Framework::RCArray< AccountActivityInfo > *info ) = 0;
        // Gibt zur�ck, wie oft ein Spieler eine Karte schon gespielt hat
        //  account: Die Id des Accounts
        //  karte: Die Id der Karte
        virtual int getAccountKarteSpiele( int account, int karte ) = 0;
        // Gibt zur�ck, wie oft ein Spieler eine Karte schon gewonnen hat
        //  account: Die Id des Accounts
        //  karte: Die Id der Karte
        virtual int getAccountKarteSpieleGewonnen( int account, int karte ) = 0;
        // Gibt zur�ck, ob ein Spieler die Karte im Besitz hat
        //  account: Die Id des Accounts
        //  karte: Die Id der Karte
        virtual bool hatAccountKarte( int account, int karte ) = 0;
        // Gibt zur�ck, ob ein Spieler ein Spiel im Besitz hat
        //  account: Die Id des Accounts
        //  spiel: Die Id des Spiels
        virtual bool hatAccountSpiel( int account, int spiel ) = 0;
        // gibt eine Liste mit Ids von Karten zur�ck, die von einem Spieler bereits gespielt wurden
        //  account: Die Id des Accounts
        //  spiel: Die Id des Spiels 
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Array< int > *getAccountKarteGespieltListe( int account, int spielId ) = 0;
        // gibt eine Liste mit Ids von Spielen zur�ck, die von einem Spieler bereits gespielt wurden
        //  account: Die Id des Accounts
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Array< int > *getAccountSpielGespieltListe( int account ) = 0;
        // Gibt eine Liste von Spiel Partnern eines Spielers zur�ck
        //  account: Die Id des Accounts
        //  spieler: Enth�lt nach erfolgreichem Aufruf eine Liste mit Account Ids der Spiel Partner
        //  karten: Enth�lt nach erfolgreichem Aufruf eine Liste mit den Ids der gespielten Karten
        //  anzahl: Enth�lt nach erfolgreichem Aufruf eine Liste mit der Anzahl der Spiele
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool getSpielPartnerListe( int account, Framework::Array< int > *spieler, Framework::Array< int > *karten, Framework::Array< int > *anzahl ) = 0;
        // Gibt eine Liste mit Spiel Statistiken zur�ck
        //  account: Die Id des Accounts zu dem die Statistik ermittelt werden soll
        //  seite: Die gew�nschte Seite. Enth�lt nach efolgreichem Aufruf die korrekte Seite
        //  maxSeite: Enth�lt nach erfolgreichem Aufruf die Macimale Seite
        //  sortSpalte: Die Spalte, nach der Sortiert werden soll
        //  r�ckw�rts: 1:=R�ckw�rtzt Sortierung, 0:=Vorw�rts Sortierung
        //  werte: Enth�lt nach erfolgreichem Aufruf eine Liste mit Statistik Werten (gespielt, gewonnen, verloren, punkte, bw0, bw1, bw2, bw3, bw4, bw5)
        //  namen: Enth�lt nach erfolgreichem Aufruf die Namen der Spiele
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool getStatistikListe( int account, int *seite, int *maxSeite, char sortSpalte, char r�ckw�rts,
                                        Framework::RCArray< Framework::Array< int > > *werte, Framework::RCArray< Framework::Text > *namen ) = 0;
        // Gibt eine Liste mit den Daten der letzten 20 Spiele von einem Account zur�ck
        //  account: Die Id des Accounts
        //  Gibt bei misserfolg 0 zur�ck
        virtual SpielHistorieListe *getSpielHistorieDaten( int account ) = 0;
        // Erzeugt einen Client zu dem Historie Server, welcher die Aufzeichnungen und Statistiken eines Bestimmten Spiels verwaltet
        //  spielId: Die id des Spiels
        //  Gibt bei misserfolg 0 zur�ck
        virtual HistorieServerClient *createHistorieServerClient( int spielId ) = 0; // sucht nach dem Historie Server von einem Spiel
        // Pr�ft, ob der Account bestimmte Berechtigungen besitzt
        //  recht: Die Id der Berechtigungen
        virtual bool hatRecht( int recht ) = 0; // Pr�ft ob Berechtigung vorhanden
        // Gibt eine Liste mit Karten zur�ck, die einen bestimmten Text im Namen enthalten und bestimmt sortiert ist
        //  filter: Die Zeichenkette, die im Namen Auftreten soll
        //  sortSpalte: Der Index der Spalte, nach der sortiert werden soll
        //  absteigend: 1:=absteigende sortierung,0:=aufsteigende Sortierung
        //  kId: Eine Liste, welche nach einem erfolgreichen Aufruf die Ids der Karten enth�lt
        //  kName: Eine Liste, welche nach einem erfolgreichen Aufruf die Namen der Karten enth�lt
        //  sName: Eine Liste, welche nach einem erfolgreichen Aufruf die Namen der Spiele der Karten enth�lt
        //  kupfer: Eine Liste, welche nach einem erfolgreichen Aufruf die Preise der Karten in Kupfer
        //  verkauft: Eine Liste, welche nach einem erfolgreichen Aufruf die Anzahl der Verk�ufe der Karten enth�lt
        //  maxSpieler: Eine Liste, welche nach einem erfolgreichen Aufruf die Maximalen Spieleranzahlen der Karten enth�lt
        virtual int getKartenListe( char *filter, char sortSpalte, char absteigend, Framework::Array< int > *kId, Framework::RCArray< Framework::Text > *kName, Framework::RCArray< Framework::Text > *sName,
                                    Framework::Array< int > *kupfer, Framework::Array< int > *verkauft, Framework::Array< int > *maxSpieler ) = 0;
        // Erzeugt einen Client zu dem Editor Server von der Karte mit einer bestimmten Id
        //  karteId: Die Id der Karte
        //  Gibt bei misserfolg 0 zur�ck
        virtual EditorServerClient *createEditorServerClient( int karteId ) = 0;
        // Erzeugt einen Client zu dem Karten Server von der Karte mit einer bestimmten Id
        //  karteId: Die Id der Karte
        //  Gibt bei misserfolg 0 zur�ck
        virtual KartenServerClient *createKartenServerClient( int karteId ) = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual InformationServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual InformationServerClient *release() = 0;
    };

    // Wird verwendet um Chat nachrichten zu senden oder zu empfangen. Das Serversystem sendet au�erdem einiege Mitteilungen �ber den Chat (z.B. Gefundene Spiele, Gruppeneinladungen ...)
    //  Kann nur von eingeloggten Clients verwendet werden
    class ChatServerClient
    {
    public:
        // verbindet sich mit dem zugewiesenen Chat Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // sendet eine Chat Nachricht zu einem Account
        //  zuAccount: Id des Ziel Accounts
        //  nachricht: Die Nachricht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool chatNachricht( int zuAccount, const char *nachricht ) = 0;
        // �ndert den angezeigten Account Namen
        //  name: der neue Name
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool accountName�ndern( const char *name ) = 0;
        // beendet die Freundschaft mit einem Account
        //  accountId: Die Id des Accounts
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool freundschaftBeenden( int accountId ) = 0;
        // sendet eine Freundesanfragezu einem Account
        //  accountId: Die Id des Accounts
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool freundesAnfrage( int accountId ) = 0;
        // beantwortet eine Freundesanfrage
        //  accountId: Die Id des Accounts
        //  ja: 1:=annehmen,0:=ablehnen
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool freundesAnfrageBeantworten( int accountId, bool ja ) = 0;
        // erstellt ein chatroom
        //  name: Der Name des Chatrooms
        //  Gibt bei erfolg die Id des Chatrooms zur�ck, 0 sonst
        virtual int chatroomErstellen( const char *name ) = 0;
        // Sendet eine Einladung zum Chatroom
        //  accountId: Die Id des Accounts der eingeladen werden soll
        //  chatroomId: Die Id des Chatrooms
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool chatroomEinladung( int accountId, int chatroomId ) = 0;
        // Einladung zum Chatroom wird abgelehnt
        //  accountId: Die Id des Accounts
        //  chatroomId: Die Id des Chatrooms
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool chatroomEinladungAblehnen( int accountId, int chatroomId ) = 0;
        // betritt ein chatroom
        //  chatroomId: Die Id des Chatrooms
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool chatroomBetreten( int chatroomId ) = 0;
        // chatroom Nachricht senden
        //  chatroomId: Die Id des Chatrooms
        //  nachricht: Die Nachricht die gesendet werden soll
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool chatroomNachricht( int chatroomId, const char *nachricht ) = 0;
        // verl�sst chatroom
        //  chatroomId: Die Id des Chatrooms
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool chatroomVerlassen( int chatroomId ) = 0;
        // kickt Account aus Chatroom (nur wenn als admin des Chatrooms eingeloggt)
        //  chatroomId: Die Id des Chatrooms
        //  accountId: Die Id des Accounts
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool chatroomKick( int chatroomId, int accountId ) = 0;
        // fragt nach allen freunden
        //  Die Liste der Freunde kann �ber getNextMessage empfangen werden
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool freundesListeAnfragen() = 0;
        // fragt nach allen chatnachrichten, die gesendet wurden, w�hrend der Account in den der Client eingeloggt ist, offline war
        //  Die einzelnen Nachrichten k�nnen �ber getNextMessage empfangen werden
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool chatNachrichtAnfrage() = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Wartet auf eine Nachricht vom Chatserver und gibt diese zur�ck.
        //  nachricht: Eine Referenz auf die Struktur, in der die Nachricht gespeichert werden soll
        virtual bool getNextMessage( ChatServerNachricht &nachricht) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual ChatServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual ChatServerClient *release() = 0;
    };

    // Wird verwendet um Spiele oder Karten zu kaufen
    //  Kann nur von eingeloggten Clients verwendet werden
    class ShopServerClient
    {
    public:
        // verbindet sich mit dem zugewiesenen Shop Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // Gibt eine Liste mit Spiel Ids zur�ck, mit Spielen, die einen Bestimten Text im Namen haben
        //  suche: Der Text, der im Namen der Spiele vorkommen soll
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Array< int > *suchSpiele( const char *suche ) = 0;
        // l�d Titelbild des Spieles herunter und speichert es unter data/tmp/shop/kazfen/spiele/{id}/titelbg.ltdb
        //  id: Die Id des Spiels
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladeSpielTitel( int id ) = 0;
        // l�d Shop Seite des Spieles herunter und speichert es unter data/tmp/shop/kazfen/spiele/{id}/seite.ksgs
        //  id: Die Id des Spiels
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladeSpielSeite( int id ) = 0;
        // Gibt den Besitz Status eines Spiels zur�ck (0 = nicht im Besitz, 1 = Testversion, 2 = gekauft)
        //  id: Die Id des Spiels
        virtual int getSpielBesitzStatus( int id ) = 0;
        // gibt die Anzahl der verbleibenden Spiele der Testversion zur�ck
        //  id: Die Id des Spiels
        virtual int getSpielTestversion( int id ) = 0;
        // Gibt den Erwerbbarkeits Status eines Spiels zur�ck (0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides)
        //  id: Die Id des Spiels
        virtual int istSpielErwerbbar( int id ) = 0;
        // Gibt den Preis eines Spiels in Kupfer zur�ck
        //  id: Die Id des Spiels
        //  testVersion: 1:=Es wird der Preis der Testversion zur�ckgegeben, 0:=Es wird der Preis der Vollversion zur�ckgegeben
        virtual int getSpielPreis( int id, bool testVersion ) = 0; 
        // Kauft ein Spiel
        //  id: Die Id des Spiels
        //  testVersion: 1:=Es wird die Testversion erworben, 0:=Es wird die Vollversion erworben
        virtual bool spielErwerben( int spielId, bool testVersion ) = 0;
        // sucht nach Karten mit zu einem bestimmten Spiel
        //  suche: Ein Text, der im Namen der Karte vorkommen soll
        //  spielId: Die Id des Spiels
        //  Gibt eine Liste Mit den Ids der gefundenen Karten zur�ck
        virtual Framework::Array< int > *suchKarten( const char *suche, int spielId ) = 0;
        // l�dt das Titelbild der Karte herunter und speichert es unter data/tmp/shop/kaufen/karten/{id}/titelbg.ltdb
        //  id: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladeKarteTitel( int id ) = 0;
        // l�dt die Shop Seite der Karte herunter und speichert es unter data/tmp/shop/kaufen/karten/{id}/seite.ksgs
        //  id: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladeKarteSeite( int id ) = 0;
        // Gibt den Besitz Status einer Karte zur�ck (0 = nicht im Besitz, 1 = Testversion, 2 = gekauft)
        //  id: Die Id der Karte
        virtual int getKarteBesitzStatus( int id ) = 0;
        // gibt die Anzahl der verbleibenden Spiele der Testversion zur�ck
        //  id: Die Id der Karte
        virtual int getKarteTestversion( int id ) = 0;
        // Gibt den Erwerbbarkeits Status einer Karte zur�ck (0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides)
        //  id: Die Id der Karte
        virtual int istKarteErwerbbar( int id ) = 0;
        // Gibt den Preis einer Karte in Kupfer zur�ck
        //  id: Die Id der Karte
        //  testVersion: 1:=Es wird der Preis der Testversion zur�ckgegeben, 0:=Es wird der Preis der Vollversion zur�ckgegeben
        virtual int getKartePreis( int id, bool testVersion ) = 0;
        // Kauft eine Karte
        //  id: Die Id der Karte
        //  testVersion: 1:=Es wird die Testversion erworben, 0:=Es wird die Vollversion erworben
        virtual bool karteErwerben( int karteId, bool testVersion ) = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual ShopServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual ShopServerClient *release() = 0;
    };

    // Wird verwendet um sich f�r Spiele anzumelden
    //  Kann nur von eingeloggten Clients verwendet werden
    class AnmeldungServerClient
    {
    public:
        // verbindet sich mit dem zugewiesenen Anmeldung Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // erstellt eine gruppe
        //  karteId: Die Id der Karte f�r die die Gruppe erstellt werden soll
        //  Gibt bei Erfolg die Id der Gruppe zur�ck. Bei misserfolg wird 0 zur�ckgegeben
        virtual int gruppeErstellen( int karteId ) = 0;
        // Betritt eine Gruppe
        //  gruppeId: Die Id der Gruppe
        //  mitglieder: Nach erfolgreichem Aufruf enth�lt diese Liste die Lister der Account Ids der Gruppenmitglieder
        //  anzahl: Nach erfolgreichem Aufruf wird hier die Anzahl der Gruppenmitglieder gespeichert
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeBetreten( int gruppeId, Framework::Array< int > *mitglieder, int *anzahl ) = 0;
        // Verl�sst eine Gruppe
        //  gruppeId: Die Id der Gruppe
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeVerlassen( int gruppeId ) = 0;
        // Tr�gt die Gruppe in die Warteschlange f�r die Karte ein (nur f�r den Gruppen Administrator)
        //  gruppeId: Die Id der Gruppe
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeAnmelden( int gruppeId ) = 0;
        // Tr�gt die Gruppe aus der Warteschlange f�r die Karte aus (nur f�r den Gruppen Administrator)
        //  gruppeId: Die Id der Gruppe
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeAbmelden( int gruppeId ) = 0;
        // l�ht Spieler ein die Gruppe zu betreten (nur f�r den Gruppen Administrator)
        //  accountId: Die Id des Accounts
        //  gruppeId: Die Id der Gruppe
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeSpielerEinladen( int accountId, int gruppeId ) = 0;
        // Zieht die Einladung eine Gruppe zu betreten zur�ck (nur f�r den Gruppen Administrator)
        //  accountId: Die Id des Accounts
        //  gruppeId: Die Id der Gruppe
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeEinladungAbbrechen( int accountId, int gruppeId ) = 0;
        // Einladung zur Gruppe ablehnen
        //  gruppeId: Die Id der Gruppe
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeEinladungAblehnen( int gruppeId ) = 0;
        // wirft Spieler aus Gruppe (nur f�r den Gruppen Administrator)
        //  accountId: Die Id des Accounts
        //  gruppeId: Die Id der Gruppe
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool kickSpielerAusGruppe( int accountId, int gruppeId ) = 0;
        // Legt fest, ob die Spieler in der Gruppe alleine spielen wollen, oder ob weitere Spieler aus der Warteschlange hinzugef�gt werden sollen bis die Karte voll ist
        //  gruppeId: Die Id der Gruppe
        //  spielStarte: 1:=alleine spielen, 0:=auf volles Spiel warten
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeSpielStarten( int gruppeId, bool spielStarten ) = 0;
        // Sendet eine Nachricht an den Gruppen Chat
        //  gruppeId: Die Id der Gruppe
        //  nachricht: Die Nachricht, die gesendet werden soll
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool gruppeNachricht( int gruppeId, char *nachricht ) = 0;
        // Meldet den eingeloggten Account in der Warteschlange f�r eine Karte an
        //  karteId: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool anmelden( int karteId ) = 0;
        // Meldet den eingeloggten Account aus der Warteschlange ab
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool abmelden() = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual AnmeldungServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual AnmeldungServerClient *release() = 0;
    };

    // Wird verwendet um die aktuellen versionen der Karten vor dem Spiel herunterzuladen
    //  Kann nur von eingeloggten Clients verwendet werden
    class KartenServerClient
    {
    public:
        // verbindet sich mit dem zugewiesenen Karten Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // l�dt eine Karte herunter und speichert sie unter data/tmp/Karten/{id}/spiel
        //  id: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool downloadKarte( int id ) = 0;
        // l�dt das Titelbild Karte herunter und speichert es unter data/tmp/Karten/{id}/titel.ltdb
        //  id: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool downloadKarteTitel( int id ) = 0;
        // l�dt die Beschreibung Karte herunter und speichert sie unter data/tmp/Karten/{id}/beschreibung.ksgs
        //  id: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool downloadKarteBeschreibung( int id ) = 0;
        // l�dt die Minimap Karte herunter und speichert es unter data/tmp/Karten/{id}/minimap.ltdb
        //  id: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool downloadKarteMinimap( int id ) = 0;
        // l�dt das Ladebild Karte herunter und speichert es unter data/tmp/Karten/{id}/ladebild.ltdb
        //  id: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool downloadKarteLadebild( int id ) = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual KartenServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual KartenServerClient *release() = 0;
    };

    // Wird zum Online Spielen verwendet
    //  Kann nur von eingeloggten Clients verwendet werden
    class SpielServerClient
    {
    public:
        // verbindet sich mit dem zugewiesenen Karten Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // Betritt das Vorgeschlagene Spiel
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool spielErstelltAnnehmen() = 0;
        // Lehnt das Vorgeschlagene Spiel ab
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool spielErstelltAblehnen() = 0;
        // Wechselt zu einem bestimmten Team
        //  team: Die Id des teams
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool spielErstelltTeamWechseln( int team ) = 0;
        // Best�tigt die Teamauswahl so dass das Spiel fr�her beginnen kann
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool spielErstelltTeamFertig() = 0;
        // sendet eine Chat Nachricht an die mitglieder des erstellten Spiels
        //  nachricht: Die Nachricht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool spielErstelltChatNachricht( char *nachricht ) = 0;
        // Teilt dem Server mit, dass der Client bereit ist das Spiel zu laden
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool bereitZumLaden() = 0;
        // Teilt dem Server mit, zu wie viel Prozent der Client das Spiel geladen hat
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool setLadenProzent( int prozent ) = 0;
        // Teilt dem Server mit, dass das Spiel fertig geladen wurde
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool bereitZumSpiel() = 0;
        // Sendet w�hrend des Spiels eine Nachricht an den Server
        //  l�n: Die L�nge der Nachricht
        //  bytes: Ein Zeiger auf die Nachricht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool spielNachricht( short l�n, char *bytes ) = 0;
        // Sendet w�hrend der Statistik eine Nachricht an den Server
        //  l�n: Die L�nge der Nachricht
        //  bytes: Ein Zeiger auf die Nachricht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool statistikNachricht( short l�n, char *bytes ) = 0;
        // Wartet auf eine Nachricht vom Spiel Servers und gibt diese zur�ck.
        virtual SpielServerNachricht *getNextMessage() = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual SpielServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual SpielServerClient *release() = 0;
    };

    // Wird verwendet um Statistiken und Aufzeichnungen von vergangenen Spielen abzufragen
    //  Kann nur von eingeloggten Clients verwendet werden
    class HistorieServerClient
    {
    protected:
        // verbindet sich mit dem zugewiesenen Historie Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde( char *ip, int port ) = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne() = 0;

    public:
        // L�dt die Spiel Aufzeichnung eines Spiels herunter und speichert sie unter data/tmp/historie/{spielId}
        //  Die Spielid wurde dem Objekt zum Zeitpunkt der Erstellung vom Information Server mitgegeben
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Diese Funktion verbindet sich selbstst�ndig mit dem Server und trennt die Verbindung nach Beendigung des Vorgangs
        virtual bool downloadSpielHistorie() = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual HistorieServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual HistorieServerClient *release() = 0;
    };

    // Wird verwendet um Minigame Bestscores abzufragen und Minigame Spielaufzeichnungen zu laden
    //  Kann nur von eingeloggten Clients verwendet werden
    class MinigameServerClient
    {
    public:
        // verbindet sich mit dem zugewiesenen Minigame Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0; 
        // Ermittelt die liste mit allen Optionen zu einem Minigame zur�ck, zu denen es Welt beste Scores gibt
        //  mName: Der Name des Minigames
        //  zOptionList: Enth�lt nach erfolgreichem Aufruf eine Liste mit Optionen
        //  Gibt die Anzahl der Optionen zur�ck
        virtual int getMinigameOptionList( char *mName, Framework::RCArray< Framework::Text > *zOptionList ) = 0;
        // Ermittelt eine Liste mit den Weltbesten Scores zur�ck
        //  mName: Der Name des Minigames
        //  zScore: Enth�lt nach erfolgreichem Aufruf eine Liste mit Scores
        //  zPlayerList: Enth�lt nach erfolgreichem Aufruf eine Liste mit angezeigten Account Namen, die die Scores erreicht haben.
        //  zOptionList: Enth�lt nach erfolgreichem Aufruf eine Liste mit Optionen, die beim erreichen der Scores aktiv waren.
        //  Gibt die Anzahl der Bestscores zur�ck
        virtual int getMinigameBestscoreList( char *mName, Framework::Array< int > *zScore, Framework::RCArray< Framework::Text > *zPlayerList, Framework::RCArray< Framework::Text > *zOptionList ) = 0;
        // Gibt den Welt bestscore zu einem Bestimmten Minigame mit bestimmten Optionen zur�ck.
        //  mName: Der Name des Minigames
        //  oName: Die Optionen
        //  zPlayer: Enth�lt nach erfolgreichem Aufruf den Angezeigten Namen des Accounts, der den Score erreicht hat
        virtual int getMinigameOptionBestscore( char *mName, char *oName, Framework::Text *zPlayer ) = 0;
        // Meldet die Beendigung eines Minigames
        //  mName: Der Name des Minigames
        //  oName: Die Optionen mit denen gespielt wurde
        //  score: Der Erreichte Score
        //  Gibt 0 zur�ck wenn eines Fehler aufgetreten ist, 1 wenn der Forgang erfolgreich war, 2 wenn ein Game Capture hochgeladen werden muss
        virtual int reportEndOfGame( char *mName, char *oName, int score ) = 0;
        // L�dt ein Game Capture hoch
        //  zCapture: Ein Zeiger auf die Capture Datei
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool uploadGameCapture( Framework::Datei *zCapture ) = 0;
        // L�dt ein Game Capture herunter und speichert sie unter data/tmp/minigames/wb.mgc
        //  mName: Der Name des Minigames
        //  oName: Die Optionen
        //  Gibt die Datei mit dem Capture zur�ck
        virtual Framework::Datei *downloadGameCapture( char *mName, char *oName ) = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual MinigameServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual MinigameServerClient *release() = 0;
    };

    // Wird verwendet um Karten f�r Spiele zu erstellen
    //  Kann nur von eingeloggten Clients verwendet werden
    class EditorServerClient
    {
    public:
        // verbindet sich mit dem zugewiesenen Editor Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool verbinde() = 0;
        // Erstellt eine neue Karte
        //  name: Der Name der Karte
        //  spielArt: Die Id des Spiels
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool karteErstellen( char *name, int spielArt ) = 0;
        // l�dt eine bestimmte Karte
        //  id: Die Id der Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladeKarte( int id ) = 0;
        // gibt eine Liste mit Abbildern der geladenen Karte zur�ck
        //  name: Enth�lt nach erfolgreichem Aufruf eine Liste mit Namen der Abbilder
        //  datum: Enth�lt nach erfolgreichem Aufruf eine Liste mit dem Datum der Erstellung f�r jedes Abbild
        //  Gibt die Anzahl der Abbilder zur�ck
        virtual int getAbbildListe( Framework::RCArray< Framework::Text > *name, Framework::RCArray< Framework::Zeit > *datum ) = 0;
        // Erstellt ein neues Abbild der geladenen Karte
        //  name: Der Name des Abbildes
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool abbildErstellen( char *name ) = 0;
        // L�scht ein altes Abbild der geladenen Karte
        //  name: Der Name des Abbildes
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool abbildL�schen( char *name ) = 0;
        // Stellt ein altes Abbild der geladenen Karte wieder her
        //  name: Der Name des Abbildes
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool abbildHerstellen( char *name ) = 0;
        // Ver�ffentlich eine neue Version der geladenen Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ver�ffentlichen() = 0;
        // Ver�ffentlich eine neue Version der Shop Seite der geladenen Karte
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool shopSeiteVer�ffentlichen() = 0;
        // L�ht die Vorschau der Shop Seite der geladenen Karte herrunter und speichert sie unter data/tmp/ke/ssv
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladeShopSeiteVorschau() = 0;
        // Erstellt eine neue Shop Seiten Datei
        //  name: Der Name der Datei
        //  typ: 0=Ordner, 1=Bild, 2=Text
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ssDateiErstellen( char *name, int typ ) = 0;
        // �ffnet einen Ordner der Shop Seite
        //  name: Der Name des Ordners
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ssOrdner�ffnen( char *name ) = 0;
        // L�dt das ein Bild der Shop Seite und gibt es zur�ck
        //  datei: Der Name der Bilddatei
        //  bild: Der Name des Bildes
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Bild *ssBildLaden( char *datei, char *bild ) = 0;
        // L�scht eine Datei der Shop Seite
        //  name: Der Name der Datei
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ssDateiL�schen( char *name ) = 0;
        // L�d eine KSGS Datei der Shop Seite und gibt den Quellcode zur�ck
        //  datei: Der Name der Datei
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Text *ssTextLaden( char *datei ) = 0;
        // Spechert eine KSGS Datei der Shop Seite
        //  datei: Der Name der Datei
        //  zText: Ein Zeiger auf den neuen Quellcode (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ssTextSpeichern( char *datei, Framework::Text *zText ) = 0;
        // L�scht ein Bild der Shop Seite
        //  datei: Der Name der Bilddatei
        //  bild: Der Name des Bildes
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ssBildL�schen( char *datei, char *bild ) = 0;
        // Speichert ein Bild einer ShopSeite
        //  datei: Der name der Bilddatei
        //  name: Der Name des Bildes
        //  zBild: Ein Zeiger auf das Bild (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ssBildSpeichern( char *datei, char *name, Framework::Bild *zBild ) = 0;
        // L�dt eine Liste mit Dateien von der Shop Seite
        //  zList: Enth�lt nach erfolgreichem Aufruf die Liste mit Dateinamen
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual int ssGetDateiListe( Framework::RCArray< Framework::Text > *zList ) = 0;
        // L�dt die Bild Liste einer Bild Datei der Shop Seite
        //  name: Der Name der Bilddatei
        //  zList: Enth�lt nach erfolgreichem Aufruf eine Liste mit Bildnamen
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual int ssGetBildListe( char *name, Framework::RCArray< Framework::Text > *zList ) = 0;
        // L�dt die Shop Daten
        //  es: Enth�lt nach erfolgreichem aufruf den Erwerbbarkeits Status (0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides)
        //  tp: Enth�lt nach erfolgreichem Aufruf den Preis der Testversion in Kupfer
        //  vp: Enth�lt nach erfolgreichem Aufruf den Preis der Vollversion in Kupfer
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool getShopDaten( int &es, int &tp, int &vp ) = 0;
        // Setzt die Shop Daten
        //  es: der Erwerbbarkeits Status (0 = nichts, 1 = nur Testversion, 2 = nur Vollversion, 3 = beides)
        //  tp: der Preis der Testversion in Kupfer
        //  vp: der Preis der Vollversion in Kupfer
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool setShopDaten( int es, int tp, int vp ) = 0;
        // gibt die Kartenbeschreibung als KSGScript Quellcode zur�ck
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Text *beschreibungLaden() = 0;
        // gibt das Titelbild der Karte zur�ck
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Bild *titelbildLaden() = 0;
        // gibt das Minimap Bild der Karte zur�ck
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Bild *minimapLaden() = 0;
        // gibt das Ladebild der Karte zur�ck
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Bild *ladebildLaden() = 0;
        // speichert den KSGScript Quellcode der Kartenbeschreibung
        //  zText: Der KSGScript Quellcode (ohne erh�hten reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool beschreibungSpeichern( Framework::Text *zText ) = 0;
        // speichert das Titelbild der Karte
        //  zBild: das neue Titelbild
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool titelbildSpeichern( Framework::Bild *zBild ) = 0;
        // speichert das Minimapbild der Karte
        //  zBild: das neue Minimapbild
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool minimapSpeichern( Framework::Bild *zBild ) = 0;
        // speichert das Ladebild der Karte
        //  zBild: das neue Ladebild
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladebildSpeichern( Framework::Bild *zBild ) = 0;
        // l�dt die Spieler Team Daten der Karte
        //  sts: Enth�lt nach erfolgreichem Aufruf die Spieler Team Daten
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool ladeTeamDaten( SpielerTeamStruktur *sts ) = 0;
        // speichert die Team Daten
        //  sts: die neuen Spieler Team Daten
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool speicherTeamDaten( SpielerTeamStruktur *sts ) = 0;
        // Erstellt neue Datei im Datei Editor
        //  typ: 0=ordner 1=bild 2=modell2d 3=sound
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deNeueDatei( char typ, Framework::Text *zName ) = 0; 
        // �ffnet Ordner im Datei Editor
        //  zName: Der Name des Ordners
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deOrdner�ffnen( Framework::Text *zName ) = 0;
        // Gibt ein Bild aus dem Datei Editor zur�ck
        //  zDatei: Der Name der Datei (ohne erh�hten Reference Counter)
        //  zBild: Der Name des Bildes (ohne erh�hten Reference Counter)
        //  zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erh�hten Reference Counter)
        //  Gibt bei misserfolg 0 zur�ck
        virtual Framework::Bild *deBildLaden( Framework::Text *zDatei, Framework::Text *zBild, Framework::FBalken *zF ) = 0;
        // L�scht eine Datei aus dem Datei Editor
        //  zName: Der Name der Datei
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deDateiL�schen( Framework::Text *zName ) = 0;
        // L�scht Bild aus Datei im Datei Editor
        //  zDatei: Der Name der Bilddatei (ohne erh�hten Reference Counter)
        //  zBild: Der Name des Bildes (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deBildL�schen( Framework::Text *zDatei, Framework::Text *zBild ) = 0;
        // Speichert Bild in Datei im Datei Editor
        //  zDatei: Der Name der Bilddatei (ohne erh�hten Reference Counter)
        //  zName: Der Name des Bildes (ohne erh�hten Reference Counter)
        //  zBild: Das neue Bild (ohne erh�hten Reference Counter)
        //  zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deBildSpeichern( Framework::Text *zDatei, Framework::Text *zName, Framework::Bild *zBild, Framework::FBalken *zF ) = 0; // DateienEditor: Speichert Bild
        // L�dt eine Liste mit Dateien im aktuellen Ordner des Datei Editors
        //  zNamen: Enth�lt nach erfolgreichem Aufruf eine Liste mit Dateinamen (ohne erh�hten Reference Counter)
        //  Gibt die Anzahl der Dateien zur�ck
        virtual int deGetDateiListe( Framework::RCArray< Framework::Text > *zNamen ) = 0;
        // L�dt eine Liste mit Bildern aus einer Bilddatei des Datei Editors
        //  zNamen: Enth�lt nach erfolgreichem Aufruf eine Liste mit den Bildnamen (ohne erh�hten Reference Counter)
        //  Gibt die Anzahl der Bilder zur�ck
        virtual int deGetBildListe( Framework::Text *zDatei, Framework::RCArray< Framework::Text > *zNamen ) = 0;
        // L�dt eine Liste mit 2D Modellen aus einer Modeldatei im Datei Editor
        //  zDatei: Der Name der Modeldatei (ohne erh�hten Reference Counter)
        //  zNamen: Enth�lt nach erfolgreichem Aufruf eine Liste mit den Modelnamen (ohne erh�hten Reference Counter)
        //  Gibt die Anzahl der Modelle zur�ck
        virtual int deGetModelListe( Framework::Text *zDatei, Framework::RCArray< Framework::Text > *zNamen ) = 0;
        // L�dt eine Liste mit Sounds aus einer Sounddatei im Datei Editor
        //  zDatei: Der Name der Sounddatei (ohne erh�hten Reference Counter)
        //  zNamen: Enth�lt nach erfolgreichem Aufruf eine Liste mit den Soundnamen (ohne erh�hten Reference Counter)
        //  Gibt die Anzahl der Sounds zur�ck
        virtual int deGetSoundListe( Framework::Text *zDatei, Framework::RCArray<  Framework::Text > *zNamen ) = 0;
        // L�scht ein Model aus einer Modeldatei des Datei Editors
        //  zDatei: Der Name der Modeldatei (ohne erh�hten Reference Counter)
        //  zModel: Der Name des Models (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deModelL�schen( Framework::Text *zDatei, Framework::Text *zModel ) = 0;
        // L�scht einen Sound aus einer Sounddatei des Datei Editors
        //  zDatei: Der Name der Sounddatei (ohne erh�hten Reference Counter)
        //  zSound: Der Name des Sounds (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deSoundL�schen( Framework::Text *zDatei, Framework::Text *zSound ) = 0;
        // L�dt ein Model aus einer Modeldatei des Datei Editors
        //  zDatei: Der Name der Modeldatei (ohne erh�hten Reference Counter)
        //  zModel: Enth�lt nach erfolgreichem Aufruf das Model (ohne erh�hten Reference Counter)
        //  zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual Framework::Model2DData *deModelLaden( Framework::Text *zDatei, Framework::Text *zModel, Framework::FBalken *zF ) = 0;
        // L�dt einen Sound herunter und gibt ihn zur�ck
        //  zDatei: Der Name der Sounddatei (ohne erh�hten Reference Counter)
        //  zSound: Der Name des Sounds (ohne erh�hten Reference Counter)
        //  zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erh�hten Reference Counter)
        //  Gibt bei misserfolg 0 zur�ck
        virtual GSL::GSLSoundV *deSoundLaden( Framework::Text *zDatei, Framework::Text *zSound, Framework::FBalken *zF ) = 0;
        // Speichert ein Model in eine Modeldatei des Datei Editors
        //  zDatei: Der Name der Modeldatei (ohne erh�hten Reference Counter)
        //  zModel: Der Name des Models (ohne erh�hten Reference Counter)
        //  zData: Die Daten des Models (ohne erh�hten Reference Counter)
        //  zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deModelSpeichern( Framework::Text *zDatei, Framework::Text *zModel, Framework::Model2DData *zData, Framework::FBalken *zF ) = 0;
        // Speichert einen Sound in einer Sounddatei des Datei Editors
        //  zDatei: Der Name der Modeldatei (ohne erh�hten Reference Counter)
        //  zSound: Der Name des Sounds (ohne erh�hten Reference Counter)
        //  zData: Die Daten des Sounts (ohne erh�hten Reference Counter)
        //  zF: Ein Fortschrittsbalken, der automatisch aktualisiert wird (ohne erh�hten Reference Counter)
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool deSoundSpeichern( Framework::Text *zDatei, Framework::Text *zSound, GSL::GSLSoundV *zData, Framework::FBalken *zF ) = 0;
        // L�dt die Kauf Statistik der geladenen Karte
        //  verkauft: Enth�lt nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der K�ufe der Karte der letzten 30 Tage
        //  einkommen: Enth�lt nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der verdinten Kupfer in den letzten 30 Tagen
        //  gespielt: Enth�lt nach erfolgreichem Aurfuf eine Liste mit den Anzahlen der Spielen der letzten 30 Tage
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual int getVerkaufStatistik( Framework::Array< int > *verkauft, Framework::Array< int > *einkommen, Framework::Array< int > *gespielt ) = 0;
        // Startet den Editor Modus, welcher f�r jedes Spiel unterschiedlich funktioniert
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        virtual bool initEditor() = 0;
        // Erh�lt die Verbindung aufrecht
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte w�hrend einer bestehenden Verbindung etwa einmal alle 60 Sekunden aufgerufen werden, da sonst der Router die Verbindung automatisch trennt
        virtual bool keepAlive() = 0;
        // Trennt die Verbindung zum Server
        //  Gibt 1 zur�ck, falls der Vorgang erfolgreich ist, 0 sonnst
        //  Sollte erst nach einem erfolgreichen Aufruf von verbinde aufgerufen werden
        virtual bool trenne( bool abmelden ) = 0;
        // Gibt 1 zur�ck, falls der Client verbunden ist, 0 sonst
        virtual bool istVerbunden() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual EditorServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual EditorServerClient *release() = 0;
    };

    // Wird verwendet um Eine Verbindung mit dem Serversystem herzustellen
    class MainServerClient
    {
    public:
        // Meldet den neuen Client beim Serversystem an. Durch diesen Vorgang erh�lt der Client eine Id und den Port und die Ip Addresse des Main Servers
        virtual bool registerSSL( char *ip, unsigned short port ) = 0;
        // Verbindet den Client mit dem Server
        //  Wird automatisch aufgerufen, falls eine Methode aufgerufen wird, die eine Verbindung erfordert. In diesem Fall wird die Verbindung auch automatisch wieder getrennt.
        virtual bool connect() = 0;
        // Erzeugt einen Erhaltungs Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual ErhaltungServerClient *createErhaltungServerClient() = 0;
        // Erzeugt einen Patch Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual PatchServerClient *createPatchServerClient() = 0;
        // Erzeugt einen News Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual NewsServerClient *createNewsServerClient() = 0;
        // Erzeugt einen Register Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual RegisterServerClient *createRegisterServerClient() = 0;
        // Erzeugt einen Login Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual LoginServerClient *createLoginServerClient() = 0;
        // Erzeugt einen Information Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual InformationServerClient *createInformationServerClient() = 0;
        // Erzeugt einen Chat Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual ChatServerClient *createChatServerClient() = 0;
        // Erzeugt einen Shop Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual ShopServerClient *createShopServerClient() = 0;
        // Erzeugt einen Anmeldung Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual AnmeldungServerClient *createAnmeldungServerClient() = 0;
        // Erzeugt einen Minigame Server Client
        //  Gibt bei misserfolg 0 zur�ck
        virtual MinigameServerClient *createMinigameServerClient() = 0;
        // Trennt die Verbindung zum Server. Muss nur aufgerufen werden, wenn vorher manuell connect aufgerufen wurde
        virtual bool disconnect() = 0;
        // Meldet den Client vom Server ab. Alle zuvor von diesem Client erzeugten Clients werden durch diesen Vorgang unbrauchbar
        virtual bool unregister() = 0;
        // Gibt die dem Client zugewiesene Id zur�ck.
        //  sollte erst nach dem Aufruf von registerSSL verwendet werden.
        virtual int getClientId() const = 0;
        // Gibt die Ip Adresse des dem Client zugewiesenen Main Servers zur�ck.
        //  sollte erst nach dem Aufruf von registerSSL verwendet werden.
        virtual Framework::Text *getServerIp() const = 0;
        // Gibt den Port des dem Client zugewiesenen Main Servers zur�ck.
        //  sollte erst nach dem Aufruf von registerSSL verwendet werden.
        virtual unsigned short getServerPort() const = 0;
        // Gibt den Zeiger auf den Schl�ssel zur�ck
        //  sollte erst nach dem Aufruf von registerSSL verwendet werden.
        virtual char *zKey() const = 0;
        // Gibt die L�nge des Schl�ssels zur�ck
        //  sollte erst nach dem Aufruf von registerSSL verwendet werden.
        virtual unsigned char getKeyLen() const = 0;
        // gibt den Letzten Fehlertext zu�ck
        //  sollte erst aufgerufen werden, nachdem eine andere aufgerufene Methode fehlgeschlagen ist
        virtual char *getLetzterFehler() const = 0;
        // Erh�ht den Reference Counter um 1 un gibt this zur�ck
        virtual MainServerClient *getThis() = 0;
        // Verringert den Reference Counter um 1 und gibt 0 zur�ck.
        //  Falls der Reference Counter nach dem Aufruf auf 0 ist l�scht sich das Objekt selbst 
        virtual MainServerClient *release() = 0;
    };
}