コード例 #1
0
        //缓存中有数据处理
        void onData()
        {
            //解码消息存储对象
            byte[] buff = null;
            //当粘包解码器存在的时候 进行粘包处理
            if (LD != null)
            {
                buff = LD(ref cache);
                //消息未接收全 退出数据处理 等待下次消息到达
                if (buff == null)
                {
                    isReading = false; return;
                }
            }
            else
            {
                //缓存区中没有数据 直接跳出数据处理 等待下次消息到达
                if (cache.Count == 0)
                {
                    isReading = false; return;
                }
                buff = cache.ToArray();
                cache.Clear();
            }
            //进行消息反序列化
            SocketModel message = MessageEncoding.Decode(buff);

            center.MessageReceive(this, message);
            onData();
        }
コード例 #2
0
    //缓存中有数据处理
    void OnData()
    {
        //长度解码
        byte[] result = LengthEncoding.Decode(ref cache);

        //长度解码返回空 说明消息体不全,等待下条消息过来补全
        if (result == null)
        {
            isReading = false;
            return;
        }

        SocketModel message = MessageEncoding.Decode(result) as SocketModel;

        if (message == null)
        {
            isReading = false;
            return;
        }
        //进行消息的处理
        messages.Add(message);
        //尾递归 防止在消息处理过程中 有其他消息到达而没有经过处理
        OnData();
    }