Пример #1
0
        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;
        }
Пример #2
0
        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);
        }
Пример #3
0
 public abstract void SendMsg(MsgHead head, byte[] bodyByte);