#ifndef ICLIENTNETWORKABLE_H
#define ICLIENTNETWORKABLE_H
#ifdef _WIN32
#pragma once
#endif


#include "iclientunknown.h"
#include "bitbuf.h"


class IClientEntity;
class ClientClass;


enum ShouldTransmitState_t
{
	SHOULDTRANSMIT_START = 0,	            

	SHOULDTRANSMIT_END		          
};

enum DataUpdateType_t
{
	DATA_UPDATE_CREATED = 0,	        
DATA_UPDATE_DATATABLE_CHANGED,
};

abstract_class IClientNetworkable
{
public:
	virtual IClientUnknown * GetIClientUnknown() = 0;

	virtual void			Release() = 0;

	virtual ClientClass* GetClientClass() = 0;

	virtual void			NotifyShouldTransmit(ShouldTransmitState_t state) = 0;



	virtual void			OnPreDataChanged(DataUpdateType_t updateType) = 0;
	virtual void			OnDataChanged(DataUpdateType_t updateType) = 0;

	virtual void			PreDataUpdate(DataUpdateType_t updateType) = 0;
	virtual void			PostDataUpdate(DataUpdateType_t updateType) = 0;

	virtual void             __unkn(void) = 0; 
	virtual bool			IsDormant(void) = 0;

	virtual int				entindex(void) const = 0;

	virtual void			ReceiveMessage(int classID, bf_read& msg) = 0;

	virtual void* GetDataTableBasePtr() = 0;

	virtual void			SetDestroyedOnRecreateEntities(void) = 0;

	virtual void			OnDataUnchangedInPVS() = 0;
};


#endif  