diff options
Diffstat (limited to 'source/packets/cPacket_PlayerListItem.cpp')
-rw-r--r-- | source/packets/cPacket_PlayerListItem.cpp | 60 |
1 files changed, 34 insertions, 26 deletions
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);
}
+
+
+
+
|