public void ProcessNetData(byte[] data)
{
// lock (this)
//{
byte[] dedata = new byte[data.Length];
Buffer.BlockCopy(data, 0, dedata, 0, data.Length);
m_Key.DecodePacket(ref dedata, data.Length);
m_stream.Write(dedata, 0, dedata.Length);
PackIn packin = new PackIn(m_stream.GetBuffer());
int nCurPos = 0; //记录当前流位置
while (true)
{
int nLen = packin.ReadUInt16();
if (nLen > m_stream.Length - nCurPos) //封包不是完整的
{
m_stream.SetLength(0);
nLen = 0;
break;
}
if (nLen <= 0) break;
nCurPos += nLen;
//2016.1.25 non-negative number required.
if (nLen - sizeof(ushort) <= 0)
{
m_stream.SetLength(0);
nLen = 0;
break;
}
byte[] reData = packin.ReadBuff(nLen - sizeof(ushort));
m_ListData.Add(reData);
if (nCurPos == m_stream.Length) break;
}
int rema_Len = (int)m_stream.Length - nCurPos;
if (rema_Len > 0)
{
dedata = new byte[rema_Len];
Buffer.BlockCopy(m_stream.GetBuffer(), nCurPos, dedata, 0, rema_Len);
}
m_stream.SetLength(0);
if (rema_Len > 0) m_stream.Write(dedata, 0, dedata.Length);
// }
}