public LanguageHandler GetLanguageHandler(string Language) { LanguageHandler LanguageHandlerInstance; Contract.Module Module = ModuleManager.Session.Modules.Where(M => M != null && M.LanguageHandler != null).Where(M => M.LanguageHandler != null && M.LanguageHandler.ID == Language).FirstOrDefault(); if (Module == null) { return(null); } if (!LanguageHandlerInstances.ContainsKey(Module.ID)) { LanguageHandlerInstance = Module.LanguageHandlerInstance; LanguageHandlerInstance.CoreModule = Module; LanguageHandlerInstance.ModuleSession = this; LanguageHandlerInstances.Add(Module.ID, LanguageHandlerInstance); } else { LanguageHandlerInstance = LanguageHandlerInstances[Module.ID]; } if (LanguageHandlerInstance == null) { throw new Exception("Language handler instance is null."); } return(LanguageHandlerInstance); }
public CompilerErrorCollection TryCompileModule(dynamic moduleObject) { RequireSystemSigned(); CompilerErrorCollection compilerErrors = new CompilerErrorCollection(); Contract.Module module = ModuleManager.Session.Modules.Where(P => P.ID == moduleObject.ID).FirstOrDefault(); if (module != null && !module.Locked) { module = Contract.Module.FromString(module.ToString()); // Create a copy of the module module.References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList(); ModuleReversion moduleReversion = new ModuleReversion() { Version = module.LatestReversion.Version + 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>() }; moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass() { Name = ((dynamic)p).Name, Data = ((dynamic)p).Data }).ToList(); module.LatestReversion = moduleReversion; module.CompileClasses(out compilerErrors, false); } else { compilerErrors.Add(new CompilerError("", 0, 0, "", "Module is locked.")); } return(compilerErrors); }
public CompilerErrorCollection UpdateModule(dynamic moduleObject) { RequireSystemSigned(); CompilerErrorCollection compilerErrors = new CompilerErrorCollection(); Contract.Module module = ModuleManager.Session.Modules.Where(P => P.ID == moduleObject.ID).FirstOrDefault(); if (module == null) { module = new Contract.Module() { ID = moduleObject.ID, References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList(), }; ModuleReversion moduleReversion = new ModuleReversion() { Version = 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>() }; moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass() { Name = ((dynamic)p).Name, Data = ((dynamic)p).Data }).ToList(); module.LatestReversion = moduleReversion; ModuleManager.Session.AppendModuleReversion(module.ID, moduleReversion); ModuleManager.Session.Modules.Add(module); module.CompileClasses(out compilerErrors); module.Save(); } else if (!module.Locked) { module.References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList(); ModuleReversion moduleReversion = new ModuleReversion() { Version = module.LatestReversion.Version + 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>() }; moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass() { Name = ((dynamic)p).Name, Data = ((dynamic)p).Data }).ToList(); module.LatestReversion = moduleReversion; ModuleManager.Session.AppendModuleReversion(module.ID, moduleReversion); module.CompileClasses(out compilerErrors); module.Save(); } else { compilerErrors.Add(new CompilerError("", 0, 0, "", "Module is locked")); } return(compilerErrors); }
public MethodInfo[] GetInvokableMethods(string ID) { try { Contract.Module Module = ModuleManager.Session.Modules.Where(M => M.ID == ID).FirstOrDefault(); Type ModuleType = Module.Type; return(ModuleType.GetMethods().Where(M => M.GetCustomAttribute <InvokableAttribute>() != null).ToArray()); } catch { return(new MethodInfo[0]); } }
public void Require(string ModuleID) { Contract.Module Module = ModuleManager.Session.GetModuleByID(ModuleID); if (Module == null) { throw new Exceptions.ModuleNotFoundException(ModuleID); } Parent.ModuleSession.GetInstance(Module); }
internal void LoadModule(string path) { Contract.Module module = Contract.Module.FromString(File.ReadAllText(path)); if (module != null) { if (module.VerifySignature()) { Modules.Add(module); } } }
public override bool TryGetMember(GetMemberBinder binder, out object result) { Contract.Module Module = ModuleManager.Session.GetModuleByID(binder.Name); if (Module == null) { throw new Exceptions.ModuleNotFoundException(binder.Name); } result = Parent.ModuleSession.GetInstance(Module); return(true); }
public static void UpdateModule(Contract.Module newModule) { Contract.Module oldModule = ModuleManager.GetModule(newModule.ID); if (oldModule != null) { ModuleManager.Session.Modules[ModuleManager.Session.Modules.IndexOf(oldModule)] = newModule; } else { ModuleManager.Session.Modules.Add(newModule); } }
internal bool CompileModule(string path, out CompilerErrorCollection compilerErrorCollection) { Contract.Module module = Contract.Module.FromString(File.ReadAllText(path)); bool compiledModule = module.CompileClasses(out compilerErrorCollection); Contract.Module oldModule = this.Modules.Where(p => p.ID == module.ID).FirstOrDefault(); int moduleIndex = Modules.IndexOf(oldModule); if (moduleIndex != -1) { Modules[moduleIndex] = module; } else { Modules.Add(module); } return(compiledModule); }
public bool DeleteModule(string ID) { RequireSystemSigned(); Contract.Module Module = ModuleManager.Session.Modules.Where(M => M.ID == ID).FirstOrDefault(); if (Module == null) { return(false); } ModuleManager.Session.Modules.Remove(Module); string FilePath = HttpContext.Current.Server.MapPath(SettingsManager.Session.GetSystemSetting("ModuleDirectory") + "/" + ID + ".bmf"); if (File.Exists(FilePath)) { File.Delete(FilePath); } return(true); }
public dynamic GetModuleProperties(string moduleID) { RequireSystemSigned(); Contract.Module module = ModuleManager.Session.Modules.Where(m => m.ID == moduleID).FirstOrDefault(); if (module != null) { return new { ID = module.ID, Locked = module.Locked, Global = module.Global, References = module.References, LanguageHandler = module.LanguageHandler, LatestReversion = module.LatestReversion } } ; return(null); }
internal BlazeSoft.Net.Web.Module GetInstance(Contract.Module Module) { BlazeSoft.Net.Web.Module ModuleInstance; if (!ModuleInstances.ContainsKey(Module.ID)) { ModuleInstance = Module.Instance; ModuleInstance.CoreModule = Module; ModuleInstance.ModuleSession = this; Debug.StartTimer("Module:" + Module.ID + ":Initialize()"); ModuleInstance.Initialize(); Debug.StopTimer("Module:" + Module.ID + ":Initialize()"); ModuleInstances.Add(Module.ID, ModuleInstance); } else { ModuleInstance = ModuleInstances[Module.ID]; } return(ModuleInstance); }
public dynamic InvokeMethod(string ModuleID, string MethodName, params object[] Params) { Contract.Module Module = ModuleManager.Session.GetModuleByID(ModuleID); if (Module == null) { throw new Exceptions.ModuleNotFoundException(ModuleID); } dynamic ModuleInstance = Parent.ModuleSession.GetInstance(Module); Type ModuleType = ModuleInstance.GetType(); var ParamTypes = from param in Params select param.GetType(); MethodInfo Method = ModuleType.GetMethod(MethodName, ParamTypes.ToArray()); if (Method == null) { throw new MissingMethodException(ModuleType.FullName, MethodName); } ObsoleteAttribute Obsolete = Method.GetCustomAttribute <ObsoleteAttribute>(); if (Obsolete != null) { var ParamTypeNames = from param in Params select param.GetType().Name; if (Obsolete.IsError) { throw new Exception("InvokeMethod(" + ModuleID + ") -> " + MethodName + "(" + string.Join(", ", ParamTypeNames) + ") is obsolete" + (Obsolete.Message != null ? ": '" + Obsolete.Message + "'" : "")); } else { Debug.WriteLine("[Warning] InvokeMethod(" + ModuleID + ") -> " + MethodName + "(" + string.Join(", ", ParamTypeNames) + ") is obsolete" + (Obsolete.Message != null ? ": '" + Obsolete.Message + "'" : "")); } } string PublicKey = null; if (this.Parent is Page) { PublicKey = this.Parent.CorePage.PublicKey != null?Convert.ToBase64String(this.Parent.CorePage.PublicKey) : null; } else if (this.Parent is Contract.Module || this.Parent is LanguageHandler) { PublicKey = this.Parent.CoreModule.PublicKey != null?Convert.ToBase64String(this.Parent.CoreModule.PublicKey) : null; } InvokableAttribute Invokable = Method.GetCustomAttribute <InvokableAttribute>(); if (Invokable == null) { throw new MissingMethodException(ModuleType.FullName, MethodName); } else { // if (Invokable.PublicKey != null && PublicKey != Invokable.PublicKey) // throw new Exceptions.SignatureException(); return(Method.Invoke(ModuleInstance, Params)); } }