Exemple #1
0
		public static VirtualFile OpenAsFormat(Stream baseStream, string filename, int offset = 0, int length = -1, FileFormat format = FileFormat.None, CacheMethod m = CacheMethod.Default) {
			if (length == -1) length = (int)baseStream.Length;
			if (format == FileFormat.None) {
				format = GuessFormat(filename);
				logger.Debug("Guessed format: {0}", format);
			}
		
			switch (format) {
				case FileFormat.Csf:
					return new CsfFile(baseStream, filename, offset, length, m != CacheMethod.NoCache); // defaults to cache
				case FileFormat.Hva:
					return new HvaFile(baseStream, filename, offset, length, m != CacheMethod.NoCache); // defaults to not cache
				case FileFormat.Ini:
					return new IniFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
				case FileFormat.Missions:
					return new MissionsFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
				case FileFormat.Mix:
					return new MixFile(baseStream, filename, offset, length, m == CacheMethod.Cache);
				case FileFormat.Pal:
					return new PalFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
				case FileFormat.Pkt:
					return new PktFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
				case FileFormat.Shp:
					return new ShpFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
				case FileFormat.Tmp:
					return new TmpFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
				case FileFormat.Vpl:
					return new VplFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
				case FileFormat.Vxl:
					return new VxlFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
				case FileFormat.Ukn:
				default:
					return new VirtualFile(baseStream, filename, offset, length, m != CacheMethod.NoCache);
			}
		}
Exemple #2
0
        public virtual CLS_Content.Value MemberValueGet(CLS_Content content, object object_this, string valuename, bool isBaseCall = false)
        {
#if UNITY_EDITOR
            if (object_this == null)
            {
                throw new NotImplementedException("MemberValueGet实例 = null:" + type.ToString() + "." + valuename);
            }
#endif
            CacheMethod cache;
            if (!s_cacheGet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.field = type.GetField(valuename);
                if (cache.field == null)
                {
                    cache.method = type.GetMethod("get_" + valuename);
                    if (cache.method == null)
                    {
                        Type baseType = type.BaseType;
                        while (baseType != null)
                        {
                            cache.field = baseType.GetField(valuename);
                            if (cache.field == null)
                            {
                                cache.method = baseType.GetMethod("get_" + valuename);
                                if (cache.method != null)
                                {
                                    break;
                                }
                            }
                            else
                            {
                                break;
                            }
                            baseType = baseType.BaseType;
                        }
                        if (cache.field == null && cache.method == null)
                        {
                            throw new NotImplementedException("实例属性不存在:" + type.ToString() + "." + valuename);
                        }
                    }
                }

                s_cacheGet[content.CallExpression] = cache;
            }

            CLS_Content.Value retVal = new CLS_Content.Value();
            if (cache.field != null)
            {
                retVal.value = cache.field.GetValue(object_this);
                retVal.type  = cache.field.FieldType;
            }
            else
            {
                retVal.value = cache.method.Invoke(object_this, null);
                retVal.type  = cache.method.ReturnType;
            }
            return(retVal);
        }
 public bool AddItem(string path, CacheMethod m = CacheMethod.Default)
 {
     // directory
     if (Directory.Exists(path))
     {
         AllArchives.Add(new DirArchive(path));
         Logger.Trace("Added <DirArchive> {0} to VFS", path);
         return(true);
     }
     // regular file
     else if (File.Exists(path))
     {
         var fi = new FileInfo(path);
         // mix file
         if (FormatHelper.MixArchiveExtensions.Contains(fi.Extension, StringComparer.InvariantCultureIgnoreCase))
         {
             var mf = new MixFile(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read));
             mf.FileName = path;
             AllArchives.Add(mf);
             Logger.Trace("Added <MixFile> {0} to VFS", path);
             return(true);
         }
     }
     // virtual mix file
     else if (FileExists(path))
     {
         var mx = Open(path, FileFormat.Mix) as MixFile;
         AllArchives.Add(mx);
         Logger.Trace("Added <VirtualMixFile> {0} to VFS", path);
         return(true);
     }
     return(false);
 }
        private void SetDefaultArguments(CacheMethod defaultMethod, double defaultMinimumAgeInMilliseconds)
        {
            DefaultMethod = defaultMethod;
            DefaultMinimumAgeInMilliseconds = defaultMinimumAgeInMilliseconds;

            Arguments = new Object[] { defaultMethod, defaultMinimumAgeInMilliseconds };
        }
Exemple #5
0
        public static void AddCacheMethod(CacheMethod method)
        {
            #if UNITY_ANDROID && !UNITY_EDITOR
            switch (method)
            {
            case CacheMethod.getActivityMetaValue:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getActivityMetaValue, string2StringSign);
                break;

            case CacheMethod.getApplicationMetaValue:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getApplicationMetaValue, string2StringSign);
                break;

            case CacheMethod.getLayoutId:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getLayoutId, string2IntSign);
                break;

            case CacheMethod.getStringId:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getStringId, string2IntSign);
                break;

            case CacheMethod.getDrawableId:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getDrawableId, string2IntSign);
                break;

            case CacheMethod.getStyleId:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getStyleId, string2IntSign);
                break;

            case CacheMethod.getId:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getId, string2IntSign);
                break;

            case CacheMethod.getColorId:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getColorId, string2IntSign);
                break;

            case CacheMethod.getStringValue:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getStringValue, string2StringSign);
                break;

            case CacheMethod.getAppMemory:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getAppMemory, void2IntSign);
                break;

            case CacheMethod.getAvailMemory:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getAvailMemory, void2IntSign);
                break;

            case CacheMethod.getCpuRate:
                _androidCall.RegisterStaticMethod(ANDROID_INFO_JAVA_CLASS, getCpuRate, void2IntSign);
                break;
            }
            #else
            Debug.LogError("AndroidInfo.AddCacheMethod : Please use AndroidInfo in Android platform!");
            #endif
        }
Exemple #6
0
        public static CacheMember GetCacheObject(MemberInfo member, object declaringInstance)
        {
            CacheMember ret;

            if (member is MethodInfo mi && CanProcessArgs(mi.GetParameters()))
            {
                ret = new CacheMethod();
                ret.InitMember(mi, declaringInstance);
            }
Exemple #7
0
        public virtual CLS_Content.Value StaticValueGet(CLS_Content content, string valuename)
        {
            CacheMethod cache;

            if (!s_cacheGet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.field = type.GetField(valuename);
                if (cache.field == null)
                {
                    cache.method = type.GetMethod("get_" + valuename);
                    if (cache.method == null)
                    {
                        Type baseType = type.BaseType;
                        while (baseType != null)
                        {
                            cache.field = baseType.GetField(valuename);
                            if (cache.field == null)
                            {
                                cache.method = baseType.GetMethod("get_" + valuename);
                                if (cache.method != null)
                                {
                                    break;
                                }
                            }
                            else
                            {
                                break;
                            }
                            baseType = baseType.BaseType;
                        }
                        if (cache.field == null && cache.method == null)
                        {
                            throw new NotImplementedException("静态属性不存在:" + type.ToString() + "." + valuename);
                        }
                    }
                }

                s_cacheGet[content.CallExpression] = cache;
            }

            CLS_Content.Value retVal = new CLS_Content.Value();
            if (cache.field != null)
            {
                retVal.value = cache.field.GetValue(null);
                retVal.type  = cache.field.FieldType;
            }
            else
            {
                retVal.value = cache.method.Invoke(null, null);
                retVal.type  = cache.method.ReturnType;
            }
            return(retVal);
        }
Exemple #8
0
        public VirtualFile OpenFile(string filename, FileFormat f = FileFormat.None, CacheMethod m = CacheMethod.Default)
        {
            MixEntry e;

            if (!Index.TryGetValue(MixEntry.HashFilename(filename), out e))
            {
                return(null);
            }
            else
            {
                return(FormatHelper.OpenAsFormat(BaseStream, filename, (int)(BaseOffset + dataStart + e.Offset), (int)e.Length, f, m));
            }
        }
Exemple #9
0
        public virtual CLS_Content.Value New(CLS_Content content, BetterList <CLS_Content.Value> _params)
        {
            Type[]            pts = CLS_Content.ParamTypesArray[_params.size];
            object[]          ps  = CLS_Content.ParamObjsArray[_params.size];
            CLS_Content.Value tempValue;
            for (int i = 0; i < _params.size; i++)
            {
                tempValue = _params[i];
                if (tempValue.type == null)
                {
                    pts[i] = typeof(object);
                }
                else if ((SType)tempValue.type != null)
                {
                    pts[i] = typeof(SInstance);
                }
                else if ((Type)tempValue.type != null)
                {
                    pts[i] = tempValue.type;
                }
                else
                {
                    pts[i] = typeof(object);
                }
                ps[i] = tempValue.value;
            }

            CacheMethod cache;

            if (!s_cacheMethod.TryGetValue(content.CallExpression, out cache))
            {
                cache             = new CacheMethod();
                cache.constructor = this.type.GetConstructor(pts);
                s_cacheMethod[content.CallExpression] = cache;
            }

            CLS_Content.Value retVal = new CLS_Content.Value();
            if (cache.constructor != null)
            {
                retVal.value = cache.constructor.Invoke(ps);
                retVal.type  = this.type;
            }
            else
            {
                retVal.value = Activator.CreateInstance(this.type);
                retVal.type  = this.type;
            }
            return(retVal);
        }
Exemple #10
0
        String GetKeyParam(CacheMethod cacheMethod, IParameterCollection inputs)
        {
            StringBuilder sb = new StringBuilder();

            sb.ToString();
            sb.Append(cacheMethod.ToString());
            if (inputs != null && inputs.Count > 0)
            {
                foreach (var item in inputs)
                {
                    sb.Append("-");
                    sb.Append(item.ToString());
                }
            }
            return(sb.ToString());
        }
Exemple #11
0
        public virtual CLS_Content.Value IndexGet(CLS_Content content, object object_this, object key)
        {
            CacheMethod cache;

            if (!s_cacheGet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.method = type.GetMethod("get_Item");
                if (cache.method == null)
                {
                    cache.method = type.GetMethod("GetValue", new Type[] { typeof(int) });
                    if (cache.method == null)
                    {
                        throw new NotImplementedException("IndexGet不存在:" + type.ToString() + "." + key);
                    }
                }

                cache.defaultParamStart            = (sbyte)(cache.method.Name == "get_Item" ? 0 : -1);
                s_cacheGet[content.CallExpression] = cache;
            }

            CLS_Content.Value retVal = new CLS_Content.Value();
            if (cache.defaultParamStart == 0)
            {
                object[] ps = CLS_Content.ParamObjsArray[1];
                ps[0]        = key;
                retVal.value = cache.method.Invoke(object_this, ps);
                retVal.type  = cache.method.ReturnType;
            }
            else
            {
                object[] ps = CLS_Content.ParamObjsArray[1];
                ps[0]        = key;
                retVal.value = cache.method.Invoke(object_this, ps);
                retVal.type  = type.GetElementType();
            }
            return(retVal);
        }
Exemple #12
0
        public virtual void IndexSet(CLS_Content content, object object_this, object key, object value)
        {
            CacheMethod cache;

            if (!s_cacheSet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.method = type.GetMethod("set_Item");
                if (cache.method == null)
                {
                    cache.method = type.GetMethod("SetValue", new Type[] { typeof(object), typeof(int) });
                    if (cache.method == null)
                    {
                        throw new NotImplementedException("IndexSet不存在:" + type.ToString() + "." + key);
                    }
                }

                cache.defaultParamStart            = (sbyte)(cache.method.Name == "set_Item" ? 0 : -1);
                s_cacheSet[content.CallExpression] = cache;
            }

            if (cache.defaultParamStart == 0)
            {
                object[] ps = CLS_Content.ParamObjsArray[2];
                ps[0] = key;
                ps[1] = value;
                cache.method.Invoke(object_this, ps);
            }
            else
            {
                object[] ps = CLS_Content.ParamObjsArray[2];
                ps[0] = value;
                ps[1] = key;
                cache.method.Invoke(object_this, ps);
            }
        }
 public T OpenFile <T>(string filename, CacheMethod m = CacheMethod.Default) where T : VirtualFile
 {
     return(Open(filename, GetFormatFromTypeclass(typeof(T)), m) as T);
 }
 public bool Add(string filename, CacheMethod cache = CacheMethod.Default)
 {
     return(AddItem(filename, cache));
 }
Exemple #15
0
 public static IDisposable SetScope(CacheMethod method, DateTimeOffset minimumValueTimestamp)
 {
     return(ScopedContext <CacheDirectives> .CreateNewScope(new CacheDirectives(method, minimumValueTimestamp)));
 }
Exemple #16
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="cacheMethod"></param>
 /// <param name="key">尽量采用实体类型名称</param>
 public CacheAttribute(CacheMethod cacheMethod, String key)
 {
     this.CacheMethod = cacheMethod;
     this.Key         = key;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="method"></param>
 public CacheMethodAttribute(CacheMethod method)
 {
     this.Method = method;
 }
Exemple #18
0
		public VirtualFile OpenFile(uint mixEntry, string filename = "", FileFormat f = FileFormat.None, CacheMethod m = CacheMethod.Default) {
			var e = Index[mixEntry];
			return FormatHelper.OpenAsFormat(BaseStream, filename, (int)(BaseOffset + dataStart + e.Offset), (int)e.Length, f, m);
		}
Exemple #19
0
		public VirtualFile OpenFile(string filename, FileFormat format = FileFormat.None, CacheMethod m = CacheMethod.Default) {
			var fs = new FileStream(Path.Combine(Directory, filename), FileMode.Open, FileAccess.Read, FileShare.Read);
			return FormatHelper.OpenAsFormat(fs, filename, 0, (int)fs.Length, format);
		}
Exemple #20
0
 public CachingAttribute(CacheMethod method)
 {
     Method = method;
 }
Exemple #21
0
        public async Task <RestClientResponse <TResult> > ExecuteAsync <TResult>(Encoding encoding, CacheMethod cacheMethod = CacheMethod.OnlyOnline)
            where TResult : IMutableModel, new()
        {
            if (encoding == null)
            {
                throw new NullReferenceException();
            }

            var restClientResponse = await ExecuteAsync(null, cacheMethod);

            return(new RestClientResponse <TResult>(restClientResponse, encoding));
        }
 /// <summary>
 /// 初始化一个新的<c>CachingAttribute</c>类型。
 /// </summary>
 /// <param name="method">缓存方式。</param>
 public CacheAttribute(CacheMethod method)
 {
     Method = method;
 }
 public CacheableActionFilterAttribute(CacheMethod defaultMethod, double defaultMinimumAgeInMilliseconds) : base(typeof(CacheableActionFilterImpl))
 {
     SetDefaultArguments(defaultMethod, defaultMinimumAgeInMilliseconds);
 }
Exemple #24
0
        public VirtualFile OpenFile(uint mixEntry, string filename = "", FileFormat f = FileFormat.None, CacheMethod m = CacheMethod.Default)
        {
            var e = Index[mixEntry];

            return(FormatHelper.OpenAsFormat(BaseStream, filename, (int)(BaseOffset + dataStart + e.Offset), (int)e.Length, f, m));
        }
Exemple #25
0
        public VirtualFile OpenFile(string filename, FileFormat format = FileFormat.None, CacheMethod m = CacheMethod.Default)
        {
            if (!_openedFiles.TryGetValue(filename, out FileStream file))
            {
                file = _openedFiles[filename] = new FileStream(Path.Combine(Directory, filename), FileMode.Open, FileAccess.Read, FileShare.Read);
            }

            return(FormatHelper.OpenAsFormat(file, filename, 0, (int)file.Length, format));
        }
Exemple #26
0
        public static VirtualFile OpenAsFormat(Stream baseStream, string filename, int offset = 0, int length = -1, FileFormat format = FileFormat.None, CacheMethod m = CacheMethod.Default)
        {
            if (length == -1)
            {
                length = (int)baseStream.Length;
            }
            if (format == FileFormat.None)
            {
                format = GuessFormat(filename);
                logger.Debug("Guessed format: {0}", format);
            }

            switch (format)
            {
            case FileFormat.Csf:
                return(new CsfFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));                        // defaults to cache

            case FileFormat.Hva:
                return(new HvaFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));                        // defaults to not cache

            case FileFormat.Ini:
                return(new IniFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));

            case FileFormat.Missions:
                return(new MissionsFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));

            case FileFormat.Mix:
                return(new MixFile(baseStream, filename, offset, length, m == CacheMethod.Cache));

            case FileFormat.Pal:
                return(new PalFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));

            case FileFormat.Pkt:
                return(new PktFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));

            case FileFormat.Shp:
                return(new ShpFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));

            case FileFormat.Tmp:
                return(new TmpFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));

            case FileFormat.Vpl:
                return(new VplFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));

            case FileFormat.Vxl:
                return(new VxlFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));

            case FileFormat.Ukn:
            default:
                return(new VirtualFile(baseStream, filename, offset, length, m != CacheMethod.NoCache));
            }
        }
        public VirtualFile Open(string filename, FileFormat format = FileFormat.None, CacheMethod m = CacheMethod.Default)
        {
            if (AllArchives == null || AllArchives.Count == 0)
            {
                return(null);
            }
            var archive = AllArchives.FirstOrDefault(v => v != null && v.ContainsFile(filename));

            if (archive == null)
            {
                return(null);
            }

            try {
                return(archive.OpenFile(filename, format, m));
            }
            catch {
                return(null);
            }
        }
Exemple #28
0
 public CachingAttribute(CacheMethod method, TimeSpan expiration)
     : this(method)
 {
     Expiration = expiration;
 }
Exemple #29
0
 public static bool Add(string filename, CacheMethod cache = CacheMethod.Default)
 {
     return(Instance.AddFile(filename, cache));
 }
 /// <summary>
 /// 初始化一个新的<c>CachingAttribute</c>类型。
 /// </summary>
 /// <param name="method">缓存方式。</param>
 /// <param name="correspondingMethodNames">与当前缓存方式相关的方法名称。注:此参数仅在缓存方式为Remove时起作用。</param>
 public CacheAttribute(CacheMethod method, params string[] correspondingMethodNames)
     : this(method)
 {
     CorrespondingMethodNames = correspondingMethodNames;
 }
        public virtual void IndexSet(CLS_Content content, object object_this, object key, object value)
        {
            CacheMethod cache;
            if (!s_cacheSet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.method = type.GetMethod("set_Item");
                if (cache.method == null)
                {
                    cache.method = type.GetMethod("SetValue", new Type[] { typeof(object), typeof(int) });
                    if (cache.method == null)
                        throw new NotImplementedException("IndexSet不存在:" + type.ToString() + "." + key);
                }

                cache.defaultParamStart = (sbyte)(cache.method.Name == "set_Item" ? 0 : -1);
                s_cacheSet[content.CallExpression] = cache;
            }

            if (cache.defaultParamStart == 0)
            {
                object[] ps = CLS_Content.ParamObjsArray[2];
                ps[0] = key;
                ps[1] = value;
                cache.method.Invoke(object_this, ps);
            }
            else
            {
                object[] ps = CLS_Content.ParamObjsArray[2];
                ps[0] = value;
                ps[1] = key;
                cache.method.Invoke(object_this, ps);
            }
        }
Exemple #32
0
        public async Task <RestClientResponse> ExecuteAsync(byte[] requestBody = null, CacheMethod cacheMethod = CacheMethod.OnlyOnline)
        {
            if (RequestMessage.Method != HttpMethod.Get && cacheMethod != CacheMethod.Default)
            {
                throw new Exception(string.Format("Http method {0} does not support CacheMethod {1}.", RequestMessage.Method.ToString(), cacheMethod.ToString()));
            }

            Log.Info("HTTP {0} {1} (CacheMethod={2})", RequestMessage.Method.ToString(), RequestMessage.RequestUri.ToString(), cacheMethod.ToString());
            if (requestBody == null)
            {
                Log.Verbose("HTTP Body: null");
            }
            else
            {
                Log.Verbose("HTTP Body: {0}", Encoding.UTF8.GetString(requestBody, 0, requestBody.Length));
            }

            byte[] responseBody = null;
            HttpResponseMessage httpResponseMessage = null;

            CacheControlHeaderValue cacheControl = new CacheControlHeaderValue();

            RequestMessage.Headers.CacheControl = cacheControl;
            switch (cacheMethod)
            {
            case CacheMethod.OnlyCached:
            {
                cacheControl.OnlyIfCached = (cacheMethod == CacheMethod.OnlyCached);
                break;
            }

            case CacheMethod.PreferCached:
            {
                cacheControl.Extensions.Add(new NameValueHeaderValue("Straaw", "PreferCached"));
                break;
            }

            case CacheMethod.Default:
            {
                break;
            }

            case CacheMethod.PreferOnline:
            {
                cacheControl.Extensions.Add(new NameValueHeaderValue("Straaw", "PreferOnline"));
                break;
            }

            case CacheMethod.OnlyOnline:
            {
                cacheControl.NoCache = (cacheMethod == CacheMethod.OnlyOnline);
                break;
            }
            }

            if (requestBody != null)
            {
                RequestMessage.Content = new ByteArrayContent(requestBody);
                RequestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            }

            using (Log.Scope(LogLevel.Verbose, "HTTP Request Timing"))
            {
                try
                {
                    httpResponseMessage = await _httpClient.SendAsync(RequestMessage, HttpCompletionOption.ResponseHeadersRead);
                }
                catch (Exception e)
                {
                    Log.Warning(e.Message);
                    throw;
                }
            }

            using (Log.Scope(LogLevel.Verbose, "HTTP Response Timing"))
            {
                if (httpResponseMessage.Content != null)
                {
                    responseBody = await httpResponseMessage.Content.ReadAsByteArrayAsync();
                }
            }

            if (responseBody != null && responseBody.Length > 0)
            {
                Log.Verbose("HTTP Response body {0} bytes: {1}", responseBody.Length, Encoding.UTF8.GetString(responseBody, 0, responseBody.Length));
            }
            else
            {
                Log.Verbose("HTTP Response body 0 bytes");
            }

            return(new RestClientResponse(httpResponseMessage, responseBody));
        }
        public virtual CLS_Content.Value New(CLS_Content content, BetterList<CLS_Content.Value> _params)
        {
            Type[] pts = CLS_Content.ParamTypesArray[_params.size];
            object[] ps = CLS_Content.ParamObjsArray[_params.size];
            CLS_Content.Value tempValue;
            for (int i = 0; i < _params.size; i++)
            {
                tempValue = _params[i];
                if (tempValue.type == null)
                {
                    pts[i] = typeof(object);
                }
                else if ((SType)tempValue.type != null)
                {
                    pts[i] = typeof(SInstance);
                }
                else if ((Type)tempValue.type != null)
                {
                    pts[i] = tempValue.type;
                }
                else
                {
                    pts[i] = typeof(object);
                }
                ps[i] = tempValue.value;
            }

            CacheMethod cache;
            if (!s_cacheMethod.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();
                cache.constructor = this.type.GetConstructor(pts);
                s_cacheMethod[content.CallExpression] = cache;
            }

            CLS_Content.Value retVal = new CLS_Content.Value();
            if (cache.constructor != null)
            {
                retVal.value = cache.constructor.Invoke(ps);
                retVal.type = this.type;
            }
            else
            {
                retVal.value = Activator.CreateInstance(this.type);
                retVal.type = this.type;
            }
            return retVal;
        }
Exemple #34
0
 /// <summary>
 /// 初始化一个新的<c>CachingAttribute</c>类型。
 /// </summary>
 /// <param name="method">缓存方式。</param>
 /// <param name="correspondingMethodNames">与当前缓存方式相关的方法名称。注:此参数仅在缓存方式为Remove时起作用。</param>
 public CachingAttribute(CacheMethod method, params string[] correspondingMethodNames)
     : this(method)
 {
     this.CorrespondingMethodNames = correspondingMethodNames;
 }
        public virtual void StaticValueSet(CLS_Content content, string valuename, object value)
        {
            CacheMethod cache;
            if (!s_cacheSet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.field = type.GetField(valuename);
                if (cache.field == null)
                {
                    cache.method = type.GetMethod("set_" + valuename);
                    if (cache.method == null)
                    {
                        Type baseType = type.BaseType;
                        while (baseType != null)
                        {
                            cache.field = baseType.GetField(valuename);
                            if (cache.field == null)
                            {
                                cache.method = baseType.GetMethod("set_" + valuename);
                                if (cache.method != null)
                                    break;
                            }
                            else
                                break;

                            baseType = baseType.BaseType;
                        }
                        if (cache.field == null && cache.method == null)
                            throw new NotImplementedException("静态属性不存在:" + type.ToString() + "." + valuename);
                    }
                }

                s_cacheSet[content.CallExpression] = cache;
            }

            if (cache.field != null)
            {
                if (value != null)
                {
                    Type vType = value.GetType();
                    if (vType != cache.field.FieldType)
                        value = content.environment.GetType(vType).ConvertTo(content, value, cache.field.FieldType);
                }
                cache.field.SetValue(null, value); ;
            }
            else
            {
                if (value != null)
                {
                    Type vType = value.GetType();
                    Type pType = cache.method.GetParameters()[0].ParameterType;
                    if (vType != pType)
                        value = content.environment.GetType(vType).ConvertTo(content, value, pType);
                }
                object[] ps = CLS_Content.ParamObjsArray[1];
                ps[0] = value;
                cache.method.Invoke(null, ps);
            }
        }
        public virtual CLS_Content.Value IndexGet(CLS_Content content, object object_this, object key)
        {
            CacheMethod cache;
            if (!s_cacheGet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.method = type.GetMethod("get_Item");
                if (cache.method == null)
                {
                    cache.method = type.GetMethod("GetValue", new Type[] { typeof(int) });
                    if (cache.method == null)
                        throw new NotImplementedException("IndexGet不存在:" + type.ToString() + "." + key);
                }

                cache.defaultParamStart = (sbyte)(cache.method.Name == "get_Item" ? 0 : -1);
                s_cacheGet[content.CallExpression] = cache;
            }

            CLS_Content.Value retVal = new CLS_Content.Value();
            if (cache.defaultParamStart == 0)
            {
                object[] ps = CLS_Content.ParamObjsArray[1];
                ps[0] = key;
                retVal.value = cache.method.Invoke(object_this, ps);
                retVal.type = cache.method.ReturnType;
            }
            else
            {
                object[] ps = CLS_Content.ParamObjsArray[1];
                ps[0] = key;
                retVal.value = cache.method.Invoke(object_this, ps);
                retVal.type = type.GetElementType();
            }
            return retVal;
        }
 public CacheableActionFilterImpl(CacheMethod defaultMethod, double defaultMinimumAgeInMilliseconds)
 {
     _defaultMethod = defaultMethod;
     _defaultMinimumAgeInMilliseconds = defaultMinimumAgeInMilliseconds;
 }
        public virtual CLS_Content.Value MemberValueGet(CLS_Content content, object object_this, string valuename, bool isBaseCall = false)
        {
            #if UNITY_EDITOR
            if (object_this == null)
                throw new NotImplementedException("MemberValueGet实例 = null:" + type.ToString() + "." + valuename);
            #endif
            CacheMethod cache;
            if (!s_cacheGet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.field = type.GetField(valuename);
                if (cache.field == null)
                {
                    cache.method = type.GetMethod("get_" + valuename);
                    if (cache.method == null)
                    {
                        Type baseType = type.BaseType;
                        while (baseType != null)
                        {
                            cache.field = baseType.GetField(valuename);
                            if (cache.field == null)
                            {
                                cache.method = baseType.GetMethod("get_" + valuename);
                                if (cache.method != null)
                                    break;
                            }
                            else
                                break;
                            baseType = baseType.BaseType;
                        }
                        if (cache.field == null && cache.method == null)
                            throw new NotImplementedException("实例属性不存在:" + type.ToString() + "." + valuename);
                    }
                }

                s_cacheGet[content.CallExpression] = cache;
            }

            CLS_Content.Value retVal = new CLS_Content.Value();
            if (cache.field != null)
            {
                retVal.value = cache.field.GetValue(object_this);
                retVal.type = cache.field.FieldType;
            }
            else
            {
                retVal.value = cache.method.Invoke(object_this, null);
                retVal.type = cache.method.ReturnType;
            }
            return retVal;
        }
Exemple #39
0
 public static T Open <T>(string filename, FileFormat f, CacheMethod m) where T : VirtualFile
 {
     return(Open(filename, f, m) as T);
 }
        public virtual CLS_Content.Value StaticValueGet(CLS_Content content, string valuename)
        {
            CacheMethod cache;
            if (!s_cacheGet.TryGetValue(content.CallExpression, out cache))
            {
                cache = new CacheMethod();

                cache.field = type.GetField(valuename);
                if (cache.field == null)
                {
                    cache.method = type.GetMethod("get_" + valuename);
                    if (cache.method == null)
                    {
                        Type baseType = type.BaseType;
                        while (baseType != null)
                        {
                            cache.field = baseType.GetField(valuename);
                            if (cache.field == null)
                            {
                                cache.method = baseType.GetMethod("get_" + valuename);
                                if (cache.method != null)
                                    break;
                            }
                            else
                                break;
                            baseType = baseType.BaseType;
                        }
                        if (cache.field == null && cache.method == null)
                            throw new NotImplementedException("静态属性不存在:" + type.ToString() + "." + valuename);
                    }
                }

                s_cacheGet[content.CallExpression] = cache;
            }

            CLS_Content.Value retVal = new CLS_Content.Value();
            if (cache.field != null)
            {
                retVal.value = cache.field.GetValue(null);
                retVal.type = cache.field.FieldType;
            }
            else
            {
                retVal.value = cache.method.Invoke(null, null);
                retVal.type = cache.method.ReturnType;
            }
            return retVal;
        }
Exemple #41
0
 public static VirtualFile Open(string filename, FileFormat f, CacheMethod m)
 {
     return(Instance.OpenFile(filename, f, m));
 }
        // 方法查找
        protected static CacheMethod FindMethod(CLS_Content content, Type type, string function, Type[] pts, object[] ps)
        {
            MethodInfo md;
            try
            {
                md = type.GetMethod(function, pts);
            }
            catch (System.Exception)
            {
                md = null;
            }
            if (md != null)
            {
                CacheMethod cache = new CacheMethod();
                cache.method = md;
                return cache;
            }

            int defaultParamStart = -1;
            int paramArrayStart = -1;

            if (function[function.Length - 1] == '>')
            {
                string[] sf = function.Split(new char[] { '<', ',', '>' }, StringSplitOptions.RemoveEmptyEntries);
                string tfunc = sf[0];
                Type[] gtypes = new Type[sf.Length - 1];
                for (int i = 1; i < sf.Length; i++)
                {
                    gtypes[i - 1] = content.environment.GetTypeByKeyword(sf[i]).type;
                }
                md = FindGenericMethod(type, tfunc, pts, ps, gtypes, out defaultParamStart, out paramArrayStart);
                if (md != null)
                {
                    CacheMethod cache = new CacheMethod();
                    cache.method = md;
                    cache.defaultParamStart = (sbyte)defaultParamStart;
                    cache.paramArrayStart = (sbyte)paramArrayStart;
                    return cache;
                }
                return null;
            }

            List<MethodInfo> listMethods = getMethodsSorted(type, function, false);
            for (int i = 0, count = listMethods.Count; i < count; i++)
            {
                MethodInfo tmpMethod = listMethods[i];
                if (isMatchParams(tmpMethod, pts, ps, out defaultParamStart, out paramArrayStart))
                {
                    CacheMethod cache = new CacheMethod();
                    cache.method = tmpMethod;
                    cache.defaultParamStart = (sbyte)defaultParamStart;
                    cache.paramArrayStart = (sbyte)paramArrayStart;
                    return cache;
                }
            }

            Type baseType = type.BaseType;
            while (baseType != null)
            {
                CacheMethod cache = FindMethod(content, baseType, function, pts, ps);
                if (cache != null)
                    return cache;
                baseType = baseType.BaseType;
            }

            return null;
        }
Exemple #43
0
		public VirtualFile OpenFile(string filename, FileFormat f = FileFormat.None, CacheMethod m = CacheMethod.Default) {
			MixEntry e;
			if (!Index.TryGetValue(MixEntry.HashFilename(filename), out e))
				return null;
			else
				return FormatHelper.OpenAsFormat(BaseStream, filename, (int)(BaseOffset + dataStart + e.Offset), (int)e.Length, f, m);
		}