/////////////////////////////////////////////////////////////////////
// Created by [Dennis Andersen] [2013]
/////////////////////////////////////////////////////////////////////
#ifndef DANBIASSERVER_CLIENT_OBJECT_H
#define DANBIASSERVER_CLIENT_OBJECT_H

#include <NetworkClient.h>
#include <PostBox\PostBox.h>
#include <GameAPI.h>
#include <Utilities.h>

namespace DanBias
{
	/**
	*	Container to keep logic player and network client together as a unit.
	*/
	class GameClient
	{
	public:
		GameClient(Utility::DynamicMemory::SmartPointer<Oyster::Network::NetworkClient> client, GameLogic::IPlayerData* player);
		virtual~GameClient();

		GameLogic::IPlayerData* GetPlayer();
		GameLogic::IPlayerData* ReleasePlayer();
		Utility::DynamicMemory::SmartPointer<Oyster::Network::NetworkClient> GetClient();
		Utility::DynamicMemory::SmartPointer<Oyster::Network::NetworkClient> ReleaseClient();

		float GetSinceLastResponse() const;
		bool IsReady() const;
		bool Equals(const Oyster::Network::NetworkClient* c);

		void SetReadyState(bool isReady);
		void SetSinceLastResponse(float seconds);

	private:
		GameLogic::IPlayerData* player;
		Utility::DynamicMemory::SmartPointer<Oyster::Network::NetworkClient> client;
		bool isReady;
		float secondsSinceLastResponse;
	};

}//End namespace DanBias
#endif // !DANBIASSERVER_CLIENT_OBJECT_H