/// <summary> /// Перегружает файл и формирует индекс на его основе /// </summary> protected override void RebuildIndex() { ReloadLibSource(); XElement indexXml = XElement.Load(_fileSource.Open("/index")); foreach (XElement xcls in indexXml.Elements("class")) { string key = xcls.Attr("fullcode"); if (!Cache.ContainsKey(key)) { var desc = new BSharpRuntimeClassDescriptor(); desc.Fullname = key; desc.ResourceName = xcls.Attr("uri"); var cls = new BSharpRuntimeClass(Container); cls.Fullname = key; cls.Name = xcls.Attr("code"); cls.Namespace = xcls.Attr("namespace"); cls.PrototypeCode = xcls.Attr("prototype"); cls.RuntimeCode = xcls.Attr("runtime"); cls.Loaded = false; desc.CachedClass = cls; Cache[key] = desc; } } }
/// <summary> /// Перегружает класс из файла на диске /// </summary> /// <param name="descriptor"></param> protected override void ReloadClass(BSharpRuntimeClassDescriptor descriptor) { XElement xml = XElement.Load(descriptor.ResourceName); var cls = new BSharpRuntimeClass(Container) { Definition = xml }; descriptor.CachedClass = cls; descriptor.CachedClass.Loaded = true; }
/// <summary> /// Перегружает класс с диска /// </summary> /// <param name="descriptor"></param> protected override void ReloadClass(BSharpRuntimeClassDescriptor descriptor) { string uri = descriptor.ResourceName; if (null == descriptor.CachedClass) { descriptor.CachedClass = new BSharpRuntimeClass(Container); } var cls = (BSharpRuntimeClass)descriptor.CachedClass; cls.Definition = XElement.Load(_fileSource.Open(uri)); cls.Loaded = true; }
/// <summary> /// Строит список из всех кдассов с расширением ".bsclass" /// </summary> protected override void RebuildIndex() { Cache.Clear(); foreach ( string fn in Directory.GetFiles(RootDirectory, "*." + BSharpRuntimeDefaults.BSHARP_CLASS_FILE_EXTENSION, SearchOption.AllDirectories)) { if (IsStandaloneFile(RootDirectory, fn)) { string fullname = Path.GetFileNameWithoutExtension(fn); var desc = new BSharpRuntimeClassDescriptor { ResourceName = fn, Fullname = fullname, LastWrite = File.GetLastWriteTime(fn) }; Cache[fullname] = desc; } } }
/// <summary> /// Проверяет наличие файла на диске и его время записи /// </summary> /// <param name="descriptor"></param> /// <returns></returns> protected override bool IsActual(BSharpRuntimeClassDescriptor descriptor) { return(descriptor.LastWrite >= File.GetLastWriteTime(descriptor.ResourceName)); }
/// <summary> /// Проверяет актуальность класса /// </summary> /// <param name="descriptor"></param> /// <returns></returns> protected virtual bool IsActual(BSharpRuntimeClassDescriptor descriptor){ return true; }
/// <summary> /// Перегружает класс с диска /// </summary> /// <param name="descriptor"></param> protected virtual void ReloadClass(BSharpRuntimeClassDescriptor descriptor){ }