#ifndef Klient_H
#define Klient_H

#include "SSKlientV.h"
#include <Array.h>
#include <Vec2.h>
#include "Spieler.h"
#include "SpielerStatistik.h"
#include "TeamStatistik.h"

using namespace Framework;

class Spieler;

class Klient
{
private:
	SSKlientV *klient;
	int ref;

public:
	// Konstruktor
	Klient( SSKlientV *klient );
	// Destruktor
	~Klient();
	// nicht constant
	void offline();
	void online( SSKlientV *zKlient );
	void sendeInit( RCArray< Spieler > *zSpieler, int spielZeit );
	void sendeSpielerNummer( int sNum, int spielZeit );
	void sendeStart( int spielZeit );
	void sendeTastaturStatus( int spielerId, TastaturStatus ts, bool aktiv, int spielZeit );
	void sendeSkillNachricht( int sNum, char art, int spielZeit );
    void sendeUseSkillNachricht( int sNum, char id, int spielZeit );
    void sendeAsteroid( int id, Vertex pos, Vertex speed, float rot, float rotS, int index, int spielZeit );
	void sendeSchuss( int id, int sNum, Vertex pos, Vertex speed, double intensity, int spielZeit );
    void sendePixel( int asteroid, int pixelId, int spielZeit );
    void sendeEp( int pixelId, int spielerId, int spielZeit );
	void sendeTreffer( int id, int sNum, int spielZeit, float ep, int skillP );
    void sendeObjektTreffer( int id, int oId, int spielZeit, float ep, int skillP );
    void sendeObjektTod( int oId, int killSNum, int spielZeit );
    void sendeAsteroidTreffer( int asteroidId, int newAsteroidId, int schussId, Vertex pos, __int64 seed, int spielZeit, float ep, int skillP );
	void sendeWiederbelebung( int sNum, int spielZeit );
	void sendeTod( int sNum, int killSNum, int spielZeit );
	void sendeSpielEnde( char gewonnen, int spielZeit );
	void sendeChatNachricht( char *txt, int spielZeit );
	void sendeStatistikChatNachricht( int vonAccount, char *txt );
	void sendeStatistikSpielerOffline( int account );
	void sendeSpielerStatistik( SpielerStatistik *zS );
	void sendeTeamStatistik( TeamStatistik *zS );
	void sendeStatistikLadenFertig();
	// constant
	bool istOnline() const;
	// reference Counting
	Klient *getThis();
	Klient *release();
};

#endif