50a7722242
Made some funky smart pointer things for chunks. Fixed a bug where the client would override the player position on the server and back again, resulting in sending too many chunks to the client which it doesn't even need. Fixed some compiler warnings in cPickup.cpp git-svn-id: http://mc-server.googlecode.com/svn/trunk@164 0a769ca7-a7f5-676a-18bf-c427514a06d6
86 lines
2.1 KiB
C++
86 lines
2.1 KiB
C++
#pragma once
|
|
|
|
class cSocket;
|
|
class cSemaphore;
|
|
class cEvent;
|
|
class Game;
|
|
class cPacket;
|
|
class cChunk;
|
|
class cPlayer;
|
|
class cRedstone;
|
|
class cClientHandle // tolua_export
|
|
{ // tolua_export
|
|
public:
|
|
enum ENUM_PRIORITY
|
|
{
|
|
E_PRIORITY_LOW,
|
|
E_PRIORITY_NORMAL
|
|
};
|
|
|
|
static const int MAXBLOCKCHANGEINTERACTIONS = 10; // 5 didn't help, 10 seems to have done the trick
|
|
|
|
cClientHandle(const cSocket & a_Socket);
|
|
~cClientHandle();
|
|
|
|
static const int VIEWDISTANCE = 13; // MUST be odd number or CRASH!
|
|
static const int GENERATEDISTANCE = 2; // Server generates this many chunks AHEAD of player sight.
|
|
|
|
const cSocket & GetSocket();
|
|
cPlayer* GetPlayer() { return m_Player; } // tolua_export
|
|
|
|
void Kick( const char* a_Reason ); //tolua_export
|
|
|
|
void AddPacket( cPacket * a_Packet );
|
|
void HandlePendingPackets();
|
|
|
|
void StreamChunks();
|
|
void StreamChunksSmart( cChunk** a_Chunks, unsigned int a_NumChunks );
|
|
void RemoveFromAllChunks();
|
|
|
|
inline void SetLoggedIn( bool a_bLoggedIn ) { m_bLoggedIn = a_bLoggedIn; }
|
|
inline bool IsLoggedIn() { return m_bLoggedIn; }
|
|
|
|
void Tick(float a_Dt);
|
|
|
|
bool IsDestroyed() { return m_bDestroyed; }
|
|
void Destroy();
|
|
|
|
cChunk* m_LoadedChunks[VIEWDISTANCE*VIEWDISTANCE];
|
|
|
|
void Send( const cPacket & a_Packet, ENUM_PRIORITY a_Priority = E_PRIORITY_NORMAL );
|
|
|
|
static void SendThread( void *lpParam );
|
|
static void ReceiveThread( void *lpParam );
|
|
static void AuthenticateThread( void* a_Param );
|
|
|
|
const char* GetUsername();
|
|
|
|
inline short GetPing() { return m_Ping; }
|
|
private:
|
|
void HandlePacket( cPacket* a_Packet );
|
|
void RemovePacket( cPacket * a_Packet );
|
|
|
|
void SendLoginResponse();
|
|
|
|
struct sClientHandleState;
|
|
sClientHandleState* m_pState;
|
|
|
|
bool m_bDestroyed;
|
|
cPlayer* m_Player;
|
|
bool m_bKicking;
|
|
|
|
float m_TimeLastPacket;
|
|
|
|
short m_Ping;
|
|
int m_PingID;
|
|
long long m_PingStartTime;
|
|
long long m_LastPingTime;
|
|
static const unsigned short PING_TIME_MS = 1000; //minecraft sends 1 per 20 ticks (1 second or every 1000 ms)
|
|
|
|
bool m_bLoggedIn;
|
|
bool m_bPositionConfirmed;
|
|
bool m_bSendLoginResponse;
|
|
|
|
bool m_bKeepThreadGoing;
|
|
}; // tolua_export
|