From b7d524423c23470cd11e720eeb48368c072838cb Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Tue, 7 Feb 2012 20:49:52 +0000 Subject: Rewritten all packets to use buffers instead of direct sockets, for future cSocketThreads compatibility. Moved data sending from cPacket into cSocket git-svn-id: http://mc-server.googlecode.com/svn/trunk@240 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/packets/cPacket_PlayerListItem.cpp | 60 +++++++++++++++++-------------- 1 file changed, 34 insertions(+), 26 deletions(-) (limited to 'source/packets/cPacket_PlayerListItem.cpp') diff --git a/source/packets/cPacket_PlayerListItem.cpp b/source/packets/cPacket_PlayerListItem.cpp index 70971dc34..3f8be2bde 100644 --- a/source/packets/cPacket_PlayerListItem.cpp +++ b/source/packets/cPacket_PlayerListItem.cpp @@ -8,7 +8,7 @@ -cPacket_PlayerListItem::cPacket_PlayerListItem(std::string a_PlayerName, bool a_Online, short a_Ping) +cPacket_PlayerListItem::cPacket_PlayerListItem(const AString & a_PlayerName, bool a_Online, short a_Ping) { m_PacketID = E_PLAYER_LIST_ITEM; m_PlayerName = a_PlayerName; @@ -16,33 +16,41 @@ cPacket_PlayerListItem::cPacket_PlayerListItem(std::string a_PlayerName, bool a_ m_Ping = a_Ping; } -bool cPacket_PlayerListItem::Parse( cSocket & a_Socket ) + + + + +int cPacket_PlayerListItem::Parse(const char * a_Data, int a_Size) { - m_Socket = a_Socket; - if (!ReadString(m_PlayerName)) return false; - if (!ReadBool(m_Online)) return false; - if (!ReadShort(m_Ping)) return false; - return true; + int TotalBytes = 0; + HANDLE_PACKET_READ(ReadString16, m_PlayerName, TotalBytes); + HANDLE_PACKET_READ(ReadBool, m_Online, TotalBytes); + HANDLE_PACKET_READ(ReadShort, m_Ping, TotalBytes); + return TotalBytes; } -bool cPacket_PlayerListItem::Send( cSocket & a_Socket ) + + + + +void cPacket_PlayerListItem::Serialize(AString & a_Data) const { - int len = m_PlayerName.length(); - int end = (len <= 16) ? len : 16; - m_PlayerName = m_PlayerName.substr(0, end); - if (len <= 14) - m_PlayerName += cChatColor::White; // mistakes happen when you code late night :P - - unsigned int TotalSize = c_Size + m_PlayerName.size()*sizeof(short); - char* Message = new char[TotalSize]; - - unsigned int i = 0; - AppendByte((char)m_PacketID, Message, i); - AppendString16(m_PlayerName, Message, i); - AppendBool(m_Online, Message, i); - AppendShort(m_Ping, Message, i); - - bool RetVal = !cSocket::IsSocketError( SendData( a_Socket, Message, TotalSize, 0 ) ); - delete [] Message; - return RetVal; + AString PlayerName(m_PlayerName); + if (PlayerName.length() > 16) + { + PlayerName.erase(16); + } + else if (PlayerName.length() <= 14) + { + PlayerName += cChatColor::White; + } + + AppendByte (a_Data, m_PacketID); + AppendString16(a_Data, PlayerName); + AppendBool (a_Data, m_Online); + AppendShort (a_Data, m_Ping); } + + + + -- cgit v1.2.3