コード例 #1
0
    /// <summary>
    /// 解码
    /// </summary>
    /// <returns></returns>
    public static Request Decode(ByteArray readBuff, uint conv)
    {
        //消息长度
        if (readBuff.length <= 2)
        {
            return(null);
        }
        //消息体长度
        int readIdx = readBuff.readIdx;

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

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

        if (protoName == "")
        {
            Debug.Log("OnReceiveData MsgBase.DecodeName fail");
            //Close(user);
            return(null);
        }
        readBuff.readIdx += nameCount;
        //解析协议体
        int bodyCount = bodyLength - nameCount;

        if (bodyCount < 0)
        {
            Debug.Log("OnReceiveData fail, bodyCount <0 ");
            //Close(user);
            return(null);
        }
        byte[] msg = DecodeBody(readBuff.bytes, readBuff.readIdx, bodyCount);
        readBuff.readIdx += bodyCount;
        readBuff.CheckAndMoveBytes();
        Request request = new Request();

        request.Conv = conv;
        request.Name = protoName;
        request.Msg  = msg;
        Debug.Log(request.Name);
        return(request);
    }