From a85ea1c9accd439bb8a805253979b93e7c8fe6fe Mon Sep 17 00:00:00 2001 From: "mtilden@gmail.com" Date: Mon, 26 Dec 2011 02:35:49 +0000 Subject: - Cleaned up PLI Packet and its creation/sending and fixed bug of player not being removed on scoreboard (forgot to send color in the removal packet) git-svn-id: http://mc-server.googlecode.com/svn/trunk@116 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cClientHandle.cpp | 12 ++++++------ source/cClientHandle.h | 5 +++++ source/cPlayer.cpp | 7 ++----- source/packets/cPacket_PlayerListItem.cpp | 8 ++++++++ source/packets/cPacket_PlayerListItem.h | 1 + 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/source/cClientHandle.cpp b/source/cClientHandle.cpp index c9d1de1ce..66d343784 100644 --- a/source/cClientHandle.cpp +++ b/source/cClientHandle.cpp @@ -156,7 +156,6 @@ cClientHandle::cClientHandle(const cSocket & a_Socket) m_pState->PacketMap[E_UPDATE_SIGN] = new cPacket_UpdateSign; m_pState->PacketMap[E_RESPAWN] = new cPacket_Respawn; m_pState->PacketMap[E_PING] = new cPacket_Ping; - m_pState->PacketMap[E_PLAYER_LIST_ITEM] = new cPacket_PlayerListItem; memset( m_LoadedChunks, 0x00, sizeof(cChunk*)*VIEWDISTANCE*VIEWDISTANCE ); @@ -1166,17 +1165,18 @@ void cClientHandle::HandlePacket( cPacket* a_Packet ) cWorld::PlayerList PlayerList = cRoot::Get()->GetWorld()->GetAllPlayers(); for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr ) { - cPacket_PlayerListItem PlayerList; - PlayerList.m_PlayerName = GetUsername(); - PlayerList.m_Online = false; - PlayerList.m_Ping = (short)5; - (*itr)->GetClientHandle()->Send( PlayerList ); + cPacket_PlayerListItem *PlayerList = new cPacket_PlayerListItem(m_Player->GetColor() + GetUsername(), false, (short)9999); + (*itr)->GetClientHandle()->Send( *PlayerList ); } } Destroy(); return; } break; + case E_KEEP_ALIVE: + // TODO: Handle player ping per minecraft + //cPacket_KeepAlive* PacketData = reinterpret_cast(a_Packet); + break; default: break; } diff --git a/source/cClientHandle.h b/source/cClientHandle.h index 048e46389..67ef56747 100644 --- a/source/cClientHandle.h +++ b/source/cClientHandle.h @@ -51,6 +51,8 @@ public: 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 ); @@ -66,6 +68,9 @@ private: float m_TimeLastPacket; + // TODO: ping calculation per minecraft + short m_Ping; + bool m_bLoggedIn; bool m_bSendLoginResponse; diff --git a/source/cPlayer.cpp b/source/cPlayer.cpp index fd7a09a6b..e8bdeb4ff 100644 --- a/source/cPlayer.cpp +++ b/source/cPlayer.cpp @@ -239,11 +239,8 @@ void cPlayer::Tick(float a_Dt) for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr ) { if ((*itr) && (*itr)->GetClientHandle() && !((*itr)->GetClientHandle()->IsDestroyed())) { - cPacket_PlayerListItem PlayerList; - PlayerList.m_PlayerName = GetColor() + GetName(); - PlayerList.m_Online = true; - PlayerList.m_Ping = (short)5; - (*itr)->GetClientHandle()->Send( PlayerList ); + cPacket_PlayerListItem *PlayerList = new cPacket_PlayerListItem(GetColor() + GetName(), true, (*itr)->GetClientHandle()->GetPing()); + (*itr)->GetClientHandle()->Send( *PlayerList ); } } diff --git a/source/packets/cPacket_PlayerListItem.cpp b/source/packets/cPacket_PlayerListItem.cpp index b0726dc8a..669f5705b 100644 --- a/source/packets/cPacket_PlayerListItem.cpp +++ b/source/packets/cPacket_PlayerListItem.cpp @@ -1,5 +1,13 @@ #include "cPacket_PlayerListItem.h" +cPacket_PlayerListItem::cPacket_PlayerListItem(std::string a_PlayerName, bool a_Online, short a_Ping) +{ + m_PacketID = E_PLAYER_LIST_ITEM; + m_PlayerName = a_PlayerName; + m_Online = a_Online; + m_Ping = a_Ping; +} + bool cPacket_PlayerListItem::Parse( cSocket & a_Socket ) { m_Socket = a_Socket; diff --git a/source/packets/cPacket_PlayerListItem.h b/source/packets/cPacket_PlayerListItem.h index a4e10eb74..19eee3d1f 100644 --- a/source/packets/cPacket_PlayerListItem.h +++ b/source/packets/cPacket_PlayerListItem.h @@ -7,6 +7,7 @@ class cPacket_PlayerListItem : public cPacket { public: cPacket_PlayerListItem() { m_PacketID = E_PLAYER_LIST_ITEM; } + cPacket_PlayerListItem(std::string a_PlayerName, bool a_Online, short a_Ping); bool Parse(cSocket & a_Socket); bool Send(cSocket & a_Socket); -- cgit v1.2.3