public void ProcessPacket(byte[] buffer, SocketClient sockstate)
{
int offset = 0;
pReader = new PacketReader(buffer, buffer.Length, true);
// traverse packet buffer for cached packets
while ((m_bPacketStream.Length - offset) >= m_HeaderSize)
{
// packet information
pReader.Seek(offset, System.IO.SeekOrigin.Begin);
UInt16 Size = pReader.ReadUInt16();
UInt16 Flag = pReader.ReadUInt16();
UInt16 Opcode = pReader.ReadUInt16();
if ((Flag == (UInt16)PacketFlag.Master) && (Size < m_MaxPacketSize))
{
byte[] payload = new byte[Size];
Buffer.BlockCopy(m_bPacketStream, offset, payload, 0, Size);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("[Client->Server]");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine(Utility.Conversions.Misc.HexBytes(payload));
// find request packet
if (PacketHandler.OpcodeList.ContainsKey(Opcode))
{
PacketHandler.OpcodeList[Opcode](payload, sockstate);
}
offset += Size;
}
else
{
break;
}
}
}