/// <summary> /// Adds an item to the cache /// </summary> /// <param name="Direction">Direction to ignore traffic from/to</param> /// <param name="ItemPath">Item path</param> private static int AddCacheItem(string Direction, IEnumerable <string> ItemPath) { var Cached = new List <RangeEntry>(Cache.SelectedRanges); if (Direction != null) { if (ItemPath != null) { var FullName = ItemPath.ToArray(); if (Cache.ValidEntry(FullName)) { var R = new RangeEntry(); R.Segments = FullName; if (Enum.TryParse(Direction, true, out R.Direction)) { if (Cached.Any(m => m.Segments.SequenceEqual(FullName))) { //Update range Cached = new List <RangeEntry>(Cached .Where(m => m.Segments.SequenceEqual(FullName)) .Concat(new RangeEntry[] { R })); Log("Updated Range: {0}", string.Join(" --> ", FullName)); } else { //Add range Cached.Add(R); Log("Added Range: {0}", string.Join(" --> ", FullName)); } } else { Log("Invalid Direction: '{0}'", Direction); return(ERR.ARGS); } } else { Log("Name {0} is not a valid Range. Use /list to view all", string.Join(" --> ", FullName)); return(ERR.ARGS); } } else { Log("No range specified to ignore"); return(ERR.ARGS); } } else { Log("No direction specified. Please specify a direction."); return(ERR.ARGS); } Cache.SelectedRanges = Cached.ToArray(); return(ERR.SUCCESS); }
public IEnumerable <UserLockouts> GetPage(int page) { if (!IsInnitalized) { throw new InvalidOperationException("call RefreshData() first!"); } if (page > LastPage && !IsInnitalized) { throw new InvalidOperationException("invalid page"); } if (Cached.ContainsKey(page)) { var collection = Cached[page]; return(collection); } else { var list = new List <UserLockouts>(); _adapter.BeginDBAccess(); if (IsDataFiltered) { if (string.IsNullOrEmpty(FilterString) || FilterParam == null) { throw new InvalidOperationException("filter is not set"); } var collection = _adapter.GetData(FilterString, FilterParam, (page - 1) * _adapter.RecordPerPage, _adapter.RecordPerPage, out int total); //bc of lazy or smt if we dont clone the UserLockouts when endDB is called our UserLockouts will be lost foreach (var item in collection) { list.Add(item.Clone()); } Cached.Add(page, list); RecordCount = total; LastPage = Helper.HelperClass.CalculatePage(RecordCount, _adapter.RecordPerPage); } else { var collection = _adapter.GetData((page - 1) * _adapter.RecordPerPage, _adapter.RecordPerPage, out int total); foreach (var item in collection) { list.Add(item.Clone()); } Cached.Add(page, list); RecordCount = total; LastPage = Helper.HelperClass.CalculatePage(RecordCount, _adapter.RecordPerPage); } _adapter.EndDBAccess(); return(list); } }
private void LoadRecord(FileInfo file) { if (Cached.ContainsKey(Path.GetFileNameWithoutExtension(file.Name))) { return; } var record = InvertJsonExtensions.DeserializeObject(For, JSON.Parse(File.ReadAllText(file.FullName))) as IDataRecord; if (record != null) { record.Repository = this.Repository; Cached.Add(record.Identifier, record); record.Changed = false; } }
public void Add(IDataRecord o) { if (Removed.Contains(o.Identifier)) { Removed.Remove(o.Identifier); } o.Changed = true; if (string.IsNullOrEmpty(o.Identifier)) { o.Identifier = Guid.NewGuid().ToString(); } o.Repository = this.Repository; if (!Cached.ContainsKey(o.Identifier)) { Cached.Add(o.Identifier, o); Repository.Signal <IDataRecordInserted>(_ => _.RecordInserted(o)); } }
private void LoadRecord(string file) { if (Cached.ContainsKey(Path.GetFileNameWithoutExtension(file))) { return; } try { var record = InvertJsonExtensions.DeserializeObject(For, JSON.Parse(ReadFile(file))) as IDataRecord; if (record != null) { record.Repository = this.Repository; Cached.Add(record.Identifier, record); record.Changed = false; } } catch (Exception ex) { throw new Exception(string.Format("Error parsing file {0}", file), ex); } }
public void Cache(Style style) { var properties = typeof(Style).GetProperties(); var group = new List <CachedStyleComponent>(); foreach (var property in properties) { var first = group.FirstOrDefault(); var name = property.Name.ToLower(); if (first != null && !name.StartsWith(first.Seed)) { Cached.Add(new CachedStyle { Seed = first.Seed, Label = first.Component.Label, Group = group.Select(self => (CachedStyleComponent)self.Clone()).ToList() }); group.Clear(); } group.Add(new CachedStyleComponent { Seed = name, Component = style.GetByName(name) }); } Cached.Add(new CachedStyle { Seed = group.FirstOrDefault()?.Seed, Label = group.FirstOrDefault()?.Component.Label, Group = group.Select(self => (CachedStyleComponent)self.Clone()).ToList() }); Logger.Info($"[Style] Successfully cached {properties.Length} style component(s)"); }
/// <summary> /// Загружает конфигурационный файл из XML /// </summary> /// <param name="xml"></param> /// <param name="context"></param> public void LoadXmlConfig(XElement xml, IBSharpContext context = null) { foreach (var condition in xml.Elements("machine")) { var machine = condition.Attr("code").ToLowerInvariant(); var not = false; if (machine == "not" && !string.IsNullOrWhiteSpace(condition.Attr("name"))) { not = true; machine = condition.Attr("name").ToLowerInvariant(); } if ((machine == MachineName && !not) || (not && machine != MachineName)) { var target = condition.Attr("use"); if (context == null) { throw new Exception("Cannot resolve machine-related config cause context is null"); } var config = context[target]; if (config == null) { throw new Exception("Cannot resolve machine-related config"); } xml = config.Compiled; Log.Info("Usage config " + target + " because machine name is " + (not ? "not " : "") + MachineName); break; } } this.BSharpContext = context; this.Definition = xml; RootFolder = xml.ResolveValue("root", RootFolder); RootFolder = xml.ResolveValue(HostUtils.RootFolderXmlName, RootFolder); ConfigFolder = xml.ResolveValue(HostUtils.ConfigFolderXmlName, ConfigFolder); DllFolder = xml.ResolveValue(HostUtils.DllFolderXmlName, DllFolder); LogFolder = xml.ResolveValue(HostUtils.LogFolderXmlName, LogFolder); TmpFolder = xml.ResolveValue(HostUtils.TmpFolderXmlName, TmpFolder); LogLevel = xml.ResolveValue(HostUtils.LogLevelXmlName, "Info").To <LogLevel>(); UseApplicationName = xml.ResolveValue(HostUtils.UseApplicationName, "false").To <bool>(); AuthCookieName = xml.ResolveValue(HostUtils.AuthCookieName, AuthCookieName); AuthCookieDomain = xml.ResolveValue(HostUtils.AuthCookieDomain, AuthCookieDomain); EncryptBasis = xml.ResolveValue(HostUtils.EncryptBasis, Guid.NewGuid().ToString()); DefaultPage = xml.ResolveValue(HostUtils.DefaultPage, "default.html"); MaxRequestSize = xml.ResolveValue("maxrequestsize", "10000000").ToInt(); RequireLogin = xml.ResolveValue("requirelogin").ToBool(); foreach (XElement bind in xml.Elements(HostUtils.BindingXmlName)) { var excludehost = bind.Attr("excludehost").SmartSplit(); bool process = true; if (0 != excludehost.Count) { var machine = Environment.MachineName.ToUpperInvariant(); foreach (var h in excludehost) { if (machine == h.ToUpperInvariant().Trim()) { process = false; break; } } } if (!process) { continue; } var hostbind = new HostBinding(); hostbind.Port = bind.Attr(HostUtils.PortXmlName).ToInt(); hostbind.Interface = bind.Attr(HostUtils.InterfaceXmlName); string schema = bind.Attr(HostUtils.SchemaXmlName); if (!string.IsNullOrWhiteSpace(schema)) { if (schema == HostUtils.HttpsXmlValue) { hostbind.Schema = HostSchema.Https; } } if (hostbind.Port == 0) { hostbind.Port = HostUtils.DefaultBindingPort; } if (string.IsNullOrWhiteSpace(hostbind.Interface)) { hostbind.Interface = HostUtils.DefaultBindingInterface; } Bindings.Add(hostbind); } foreach (var constant in xml.Elements("constant")) { if (string.IsNullOrWhiteSpace(constant.Attr("code"))) { continue; } Constants[constant.Attr("code").ToLowerInvariant()] = constant.Attr("name"); } foreach (XElement e in xml.Elements(HostUtils.ContentFolder)) { ContentFolders.Add(e.Attr("code")); } ReadModules(xml); foreach (var e in xml.Elements("connection")) { var name = e.Attr("code"); var cstr = e.Attr("name"); if (string.IsNullOrWhiteSpace(name)) { continue; } if (string.IsNullOrWhiteSpace(cstr)) { continue; } ConnectionStrings[name] = cstr; } foreach (var e in xml.Elements("static")) { var name = e.Attr("code"); var folder = EnvironmentInfo.ResolvePath(e.Attr("name")); var role = e.Attr("role"); if (!name.StartsWith("/")) { name = "/" + name; } if (!name.EndsWith("/")) { name += "/"; } if (e.Attr("cache").ToBool()) { this.StaticContentCacheMap[name] = e; } else { this.StaticContentMap[name] = new StaticFolderDescriptor { Key = name, Path = folder, Role = role }; } } foreach (var e in xml.Elements("startup")) { var name = e.Attr("code"); Initializers.Add(name); } foreach (XElement e in xml.Elements(HostUtils.ExContentFolder)) { ExtendedContentFolders.Add(e.Attr("code")); } foreach (XElement e in xml.Elements(HostUtils.IncludeConfigXmlName)) { IncludeConfigMasks.Add(e.Describe().GetEfficienValue()); } foreach (XElement e in xml.Elements(HostUtils.ExcludeConfigXmlName)) { ExcludeConfigMasks.Add(e.Describe().GetEfficienValue()); } foreach (XElement e in xml.Elements("cache")) { Cached.Add(e.Value); } foreach (XElement e in xml.Elements("proxize")) { var key = e.Attr("code"); var url = e.Attr("url"); if (string.IsNullOrWhiteSpace(url)) { if (!string.IsNullOrWhiteSpace(e.Attr("appid"))) { url += "appid=" + e.Attr("appid") + ";"; } if (!string.IsNullOrWhiteSpace(e.Attr("secure"))) { url += "secure=" + e.Attr("secure") + ";"; } if (!string.IsNullOrWhiteSpace(e.Attr("server"))) { url += "server=" + e.Attr("server") + ";"; } } Proxize[key] = url; } foreach (XElement e in xml.Elements("lib")) { AutoconfigureAssemblies.Add(e.AttrOrValue("code")); } ForceNoCache = xml.Attr("forcenocache").ToBool(); var appid = xml.ResolveValue("appid", "0").ToInt(); if (appid != 0) { AddQorpentBinding(appid); Loggy.Info(string.Concat("AppId is [", appid, "]")); } LoggerName = xml.ResolveValue("loggername", ""); LoggerHost = xml.ResolveValue("loggerhost", ""); LoggerPort = xml.ResolveValue("loggerport", "0").ToInt(); LoggerFormat = xml.ResolveValue("loggerformat", "").Replace("%{", "${"); this.AccessAllowOrigin = xml.ResolveValue("origin", ""); foreach (var e in xml.Elements("require")) { var appname = e.Attr("code") + e.Attr("suffix"); var proxize = e.GetSmartValue("proxize").ToBool() || e.Attr("name") == "proxize"; if (proxize) { if (null == context) { this.Log.Error("context not provi " + appname); } var cls = context[appname]; if (null == cls) { this.Log.Error("cannot find application for proxize " + appname); } else { var sappid = cls.Compiled.ResolveValue("appid"); var services = cls.Compiled.Elements("service"); foreach (var srv in services) { var root = srv.Attr("code"); var server = e.Attr("server"); var cp = "appid=" + sappid + ";"; if (!string.IsNullOrWhiteSpace(server)) { cp += "server=" + server; } this.Proxize[root] = cp; } } } } }