예제 #1
0
        static public object Load(string pFile, object pValue)
        {
            LitEngine.IO.AESReader tloader = null;
            object ret = pValue;

            try
            {
                string tfullname = GameCore.AppPersistentAssetsPath + pFile;
                if (!File.Exists(tfullname))
                {
                    return(ret);
                }
                tloader = new LitEngine.IO.AESReader(tfullname);
                ret     = ReadField(tloader, pValue, null);

                tloader.Close();
                tloader = null;
            }
            catch (System.Exception pErro)
            {
                DLog.LogError(pErro.ToString());
            }

            if (tloader != null)
            {
                tloader.Close();
            }
            return(ret);
        }
예제 #2
0
 override public void Load(LitEngine.IO.AESReader _loader)
 {
     Key = _loader.ReadString();
     Attribut.Load(_loader);
     ValueType = GetValueTypeByString(_loader.ReadString());
     LoadByType(_loader);
 }
예제 #3
0
        static private object ReadList(LitEngine.IO.AESReader pReader, object pTarget)
        {
            bool thave = pReader.ReadBoolean();

            if (!thave)
            {
                return(null);
            }

            string tfullname = pReader.ReadString();
            int    tcount    = pReader.ReadInt32();

            System.Type tselftype = pTarget.GetType();

            MethodInfo tclear = tselftype.GetMethod("Clear");

            tclear.Invoke(pTarget, null);

            MethodInfo tmethod = tselftype.GetMethod("Add");

            for (int i = 0; i < tcount; i++)
            {
                object        titem           = null;
                System.Type[] genericArgTypes = tselftype.GetGenericArguments();
                if (genericArgTypes != null && genericArgTypes.Length > 0)
                {
                    titem = GetObjectByType(genericArgTypes[0], true);
                }

                object tobj = ReadField(pReader, titem, null);
                tmethod.Invoke(pTarget, new object[] { tobj });
            }

            return(pTarget);
        }
예제 #4
0
            override public void Load(LitEngine.IO.AESReader _loader)
            {
                TableName = _loader.ReadString();
                Attribut.Load(_loader);
                int trowCount = _loader.ReadInt32();

                for (int i = 0; i < trowCount; i++)
                {
                    DataRow trow = new DataRow();
                    trow.Load(_loader);
                    AddFromRow(trow);
                }
            }
예제 #5
0
            override public void Load(LitEngine.IO.AESReader _loader)
            {
                Key = _loader.ReadString();
                Attribut.Load(_loader);
                int tfieldCount = _loader.ReadInt32();

                for (int i = 0; i < tfieldCount; i++)
                {
                    DataField tfield = new DataField(null, null);
                    tfield.Load(_loader);
                    AddFromField(tfield);
                }
            }
예제 #6
0
        static private object ReadDataObject(LitEngine.IO.AESReader pReader, object pTarget)
        {
            bool thave = pReader.ReadBoolean();

            if (!thave)
            {
                return(null);
            }
            string tfullname   = pReader.ReadString();
            int    tFieldCount = pReader.ReadInt32();

            for (int i = 0; i < tFieldCount; i++)
            {
                ReadField(pReader, null, pTarget);
            }
            return(pTarget);
        }
예제 #7
0
        static private object ReadField(LitEngine.IO.AESReader pReader, object pValue, object pParent)
        {
            DataType ttype      = (DataType)pReader.ReadInt32();
            string   tFieldName = pReader.ReadString();

            FieldInfo tinfo = pParent == null ? null : pParent.GetType().GetField(tFieldName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

            if (pValue == null && tinfo != null)
            {
                pValue = tinfo.GetValue(pParent);
                if (pValue == null)
                {
                    pValue = GetObjectByType(tinfo.FieldType, true);
                }
            }
            object ret = pValue;

            switch (ttype)
            {
            case DataType.baseType:
                ret = ReadBaseType(pReader);
                break;

            case DataType.DataObject:
                ret = ReadDataObject(pReader, pValue);
                break;

            case DataType.List:
                ret = ReadList(pReader, pValue);
                break;

            case DataType.Dictionary:
                ret = ReadDictionary(pReader, pValue);
                break;
            }

            if (tinfo != null)
            {
                tinfo.SetValue(pParent, ret);
            }

            return(ret);
        }
예제 #8
0
        public void Load()
        {
            LitEngine.IO.AESReader tloader = null;
            try
            {
                string tfullname = GameCore.AppPersistentAssetsPath + cDatafile;
                if (!File.Exists(tfullname))
                {
                    return;
                }
                Clear();
                tloader = new LitEngine.IO.AESReader(tfullname);

                int ttableCount = tloader.ReadInt32();
                for (int i = 0; i < ttableCount; i++)
                {
                    DataTable ttable = new DataTable();
                    ttable.Load(tloader);
                    AddFromTable(ttable);
                }
                tloader.Close();
                tloader = null;
                Error   = null;
            }
            catch (System.Exception _e)
            {
                Error = _e.ToString();
                Clear();
                DLog.LogError(_e.ToString());
            }

            if (tloader != null)
            {
                tloader.Close();
            }
        }
예제 #9
0
            private void LoadByType(LitEngine.IO.AESReader _loader)
            {
                switch (ValueType)
                {
                case FieldType.Boolean:
                    dvalue = _loader.ReadBoolean();
                    break;

                case FieldType.Byte:
                    dvalue = _loader.ReadByte();
                    break;

                case FieldType.SByte:
                    dvalue = _loader.ReadSByte();
                    break;

                case FieldType.Int16:
                    dvalue = _loader.ReadInt16();
                    break;

                case FieldType.UInt16:
                    dvalue = _loader.ReadUInt16();
                    break;

                case FieldType.Int32:
                    dvalue = _loader.ReadInt32();
                    break;

                case FieldType.UInt32:
                    dvalue = _loader.ReadUInt32();
                    break;

                case FieldType.Int64:
                    dvalue = _loader.ReadInt64();
                    break;

                case FieldType.UInt64:
                    dvalue = _loader.ReadUInt64();
                    break;

                case FieldType.Single:
                    dvalue = _loader.ReadSingle();
                    break;

                case FieldType.Double:
                    dvalue = _loader.ReadDouble();
                    break;

                case FieldType.Decimal:
                    dvalue = _loader.ReadDecimal();
                    break;

                case FieldType.String:
                    dvalue = _loader.ReadString();
                    break;

                case FieldType.Char:
                    dvalue = _loader.ReadChar();
                    break;

                case FieldType.BigInteger:
                {
                    int    tlen   = _loader.ReadInt32();
                    byte[] tbytes = _loader.ReadBytes(tlen);
                    dvalue = new System.Numerics.BigInteger(tbytes);
                }
                break;

                case FieldType.Bytes:
                {
                    int tlen = _loader.ReadInt32();
                    dvalue = _loader.ReadBytes(tlen);
                }
                break;

                default:
                    break;
                }
            }
예제 #10
0
 public abstract void Load(LitEngine.IO.AESReader _loader);
예제 #11
0
        static public object LoadByType(LitEngine.IO.AESReader pLoader)
        {
            FieldType ttype = GetValueTypeByString(pLoader.ReadString());
            object    ret   = null;

            switch (ttype)
            {
            case FieldType.Boolean:
                ret = pLoader.ReadBoolean();
                break;

            case FieldType.Byte:
                ret = pLoader.ReadByte();
                break;

            case FieldType.SByte:
                ret = pLoader.ReadSByte();
                break;

            case FieldType.Int16:
                ret = pLoader.ReadInt16();
                break;

            case FieldType.UInt16:
                ret = pLoader.ReadUInt16();
                break;

            case FieldType.Int32:
                ret = pLoader.ReadInt32();
                break;

            case FieldType.UInt32:
                ret = pLoader.ReadUInt32();
                break;

            case FieldType.Int64:
                ret = pLoader.ReadInt64();
                break;

            case FieldType.UInt64:
                ret = pLoader.ReadUInt64();
                break;

            case FieldType.Single:
                ret = pLoader.ReadSingle();
                break;

            case FieldType.Double:
                ret = pLoader.ReadDouble();
                break;

            case FieldType.Decimal:
                ret = pLoader.ReadDecimal();
                break;

            case FieldType.String:
                ret = pLoader.ReadString();
                break;

            case FieldType.Char:
                ret = pLoader.ReadChar();
                break;

            case FieldType.BigInteger:
            {
                int    tlen   = pLoader.ReadInt32();
                byte[] tbytes = pLoader.ReadBytes(tlen);
                ret = new System.Numerics.BigInteger(tbytes);
            }
            break;

            case FieldType.Bytes:
            {
                int tlen = pLoader.ReadInt32();
                ret = pLoader.ReadBytes(tlen);
            }
            break;

            default:
                break;
            }
            return(ret);
        }
예제 #12
0
 static private object ReadBaseType(LitEngine.IO.AESReader pReader)
 {
     return(LoadByType(pReader));
 }