Ejemplo n.º 1
0
    // 接受数据处理
    private static void OnRecieveData()
    {
        // 消息长度
        if (readBuff.length <= 2)
        {
            return;
        }
        // 获取消息体长度
        int readIdx = readBuff.readIdx;

        byte[] bytes      = readBuff.bytes;
        Int16  bodyLength = (Int16)((bytes[readIdx + 1] << 8) | bytes[readIdx]);

        if (readBuff.length < bodyLength)
        {
            return;
        }
        readBuff.readIdx += 2;
        // 解析协议名
        int    nameCount = 0;
        string protoName = JsonMsgBase.DecodeName(readBuff.bytes, readBuff.readIdx, out nameCount);

        if (protoName == "")
        {
            Debug.Log("OnRecieveData MsgBase.DecodeName Fail");
            return;
        }
        readBuff.readIdx += nameCount;
        // 解析协议体
        int         bodyCount = bodyLength - nameCount;
        JsonMsgBase msgBase   = JsonMsgBase.Decode(protoName, readBuff.bytes, readBuff.readIdx, bodyCount);

        readBuff.readIdx += bodyCount;
        readBuff.CheckAndMoveBytes();
        // 添加到消息队列
        lock (msgList) {
            msgList.Add(msgBase);
        }
        msgCount++;
        // 继续读取消息
        if (readBuff.length > 2)
        {
            OnRecieveData();
        }
    }