void OnDataReceived() { UInt32 left = mnPacketSize; while (left >= ConstDefine.AF_PACKET_HEAD_SIZE) { object structType = new MsgHead(); byte[] headBytes = new byte[Marshal.SizeOf(structType)]; Array.Copy(mPacket, mnPacketSize - left, headBytes, 0, Marshal.SizeOf(structType)); StructureTransform.ByteArrayToStructureEndian(headBytes, ref structType, 0); MsgHead head = (MsgHead)structType; if (head.unDataLen >= left) { byte[] body_head = new byte[head.unDataLen]; Array.Copy(mPacket, mnPacketSize - left, body_head, 0, head.unDataLen); left -= head.unDataLen; if (false == OnDataReceived(this, body_head, head.unDataLen)) { OnClientDisconnect(new AFTCPEventParams()); } } else { Array.Copy(mPacket, mnPacketSize - left, mPacket, 0, left); break; } } mnPacketSize = left; }
bool OnDataReceived(AFClientNet client, byte[] bytes, UInt32 bytesCount) { if (bytes.Length == bytesCount) { object structType = new MsgHead(); StructureTransform.ByteArrayToStructureEndian(bytes, ref structType, 0); MsgHead head = (MsgHead)structType; Int32 nBodyLen = (Int32)bytesCount - (Int32)ConstDefine.AF_PACKET_HEAD_SIZE; if (nBodyLen >= 0) { byte[] body = new byte[nBodyLen]; Array.Copy(bytes, ConstDefine.AF_PACKET_HEAD_SIZE, body, 0, nBodyLen); client.net.OnMessageEvent(head, body); return(true); } else { } } return(false); }
public abstract void SendMsg(MsgHead head, byte[] bodyByte);