Exemplo n.º 1
0
    /// <summary>
    /// 缓存中的数据处理,收到消息后先解码
    /// </summary>
    private void OnData()
    {
        //长度解码
        byte[] result = LengthEncoding.Decode(ref cache);

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

        SocketModel messsage = (SocketModel)MessageEncoding.MessageDecode(result);

        if (messsage == null)
        {
            isReading = false;
            return;
        }

        //进行消息处理
        messages.Add(messsage);
        //尾递归 防止在消息处理过程中 有其他消息到达而没有经过处理
        OnData();
    }