public TdrError.ErrorType unpack(ref byte[] buffer, int size, ref int usedSize, uint cutVer)
        {
            if (buffer == null || buffer.GetLength(0) == 0 || size > buffer.GetLength(0))
            {
                return(TdrError.ErrorType.TDR_ERR_INVALID_BUFFER_PARAMETER);
            }
            TdrReadBuf tdrReadBuf = ClassObjPool <TdrReadBuf> .Get();

            tdrReadBuf.set(ref buffer, size);
            TdrError.ErrorType result = this.unpack(ref tdrReadBuf, cutVer);
            usedSize = tdrReadBuf.getUsedSize();
            tdrReadBuf.Release();
            return(result);
        }
Beispiel #2
0
        public TdrError.ErrorType unpack(ref byte[] buffer, int size, ref int usedSize, uint cutVer)
        {
            if (((buffer == null) || (buffer.GetLength(0) == 0)) || (size > buffer.GetLength(0)))
            {
                return(TdrError.ErrorType.TDR_ERR_INVALID_BUFFER_PARAMETER);
            }
            TdrReadBuf srcBuf = ClassObjPool <TdrReadBuf> .Get();

            srcBuf.set(ref buffer, size);
            TdrError.ErrorType type = this.unpack(ref srcBuf, cutVer);
            usedSize = srcBuf.getUsedSize();
            srcBuf.Release();
            return(type);
        }
Beispiel #3
0
    public void LoadTdrBin(TextAsset asset)
    {
        byte[] assetBuffer = asset.bytes;
        Int32  assetLength = assetBuffer.Length;

        if (asset.bytes.Length > _headsize)
        {
            Int32 slen  = (Int32)BitConverter.ToUInt32(asset.bytes, 8);
            int   nBase = _headsize;

            TdrReadBuf srcBuf = new TdrReadBuf();
            srcBuf.set(ref assetBuffer, assetLength);

            while (nBase + slen <= assetLength)
            {
                srcBuf.setposition(nBase);
                T record = new T();
                TdrError.ErrorType ret = record.load(ref srcBuf, 0);
                if (ret != TdrError.ErrorType.TDR_NO_ERROR)
                {
                    Console.WriteLine(ret);
                }
                TdrError.getErrorString(ret);

                // yee 20160118 每行配置增加ver控制,用于处理后续运营过程中可能存在的高低版本支持字段不同问题,可以使较旧版本不读取较新的配置行
                System.Reflection.FieldInfo keyType = record.GetType().GetField("chVer");
                if (null == keyType)
                {
                    lstItems.Add(record);
                }
                else
                {
                    if (keyType.FieldType.Name == "SByte")
                    {
                        sbyte bVer = (sbyte)(record.GetType().GetField("chVer").GetValue(record));
                        if (bVer <= 1)
                        {
                            lstItems.Add(record);
                        }
                    }
                }
                nBase += slen;
            }
        }
        else
        {
            Debug.Log("RecordTable<T>.LoadTdrBin:" + "read record error! file length is zero. ");
        }
    }