/// <summary> /// Konstruktor /// </summary> /// <param name="port">Der Port auf dem der Server höhren soll</param> /// <param name="context">Der Serverkontext</param> public HttpServer(int port, HttpServerContext context) { Context = new HttpServerContext ( context.Uri, port, context.AssetPath, context.ConfigPath, context.ContextPath, context.Culture, context.Log ); Port = port; Culture = Context.Culture; InternationalizationManager.Register(typeof(HttpServer).Assembly, "webexpress"); InternationalizationManager.Initialization(Context); PluginManager.Initialization(Context); ApplicationManager.Initialization(Context); ModuleManager.Initialization(Context); ResourceManager.Initialization(Context); ResponseManager.Initialization(Context); }
/// <summary> /// Fügt die Variablen-Wert-Paare dem Ergebnis hinzu /// </summary> /// <param name="variables">Die Variablen-Wert-Paare</param> public void AddVariables(IDictionary <string, string> variables) { if (variables != null) { foreach (var v in variables) { if (!Variables.ContainsKey(v.Key)) { Variables.Add(v.Key, v.Value); } else { ModuleContext.Log.Warning(message: InternationalizationManager.I18N(InternationalizationManager.DefaultCulture, "webexpress", "resource.variable.duplicate"), args: v.Key); } } } }
/// <summary> /// Startet den HTTPServer /// </summary> public void Start() { if (Context != null && Context.Log != null) { Context.Log.Info(message: this.I18N("httpserver.run"), args: Port); } if (Config != null) { // Plugins laden PluginManager.Register(Config.Deployment); // Internationalisierung laden InternationalizationManager.Register(); // Anwendungen laden ApplicationManager.Register(); // Module laden ModuleManager.Register(); // Ressourcen laden ResourceManager.Register(); // Statusseiten ResponseManager.Register(); // Ausführung der Plugins starten PluginManager.Boot(); // Ausführung der Anwendungen starten ApplicationManager.Boot(); // Ausführung der Module starten ModuleManager.Boot(); } Listener = new TcpListener(IPAddress.Any, Port); Listener.Start(); var task = Task.Factory.StartNew(() => { Run(); }, ServerTokenSource.Token); }
/// <summary> /// Umwandlung in ein Pfadsegment /// </summary> /// <returns>Das Pfadsegment</returns> public IPathSegment ToPathSegment() { var expression = @"^(\{){0,1}(([0-9a-fA-F]{8})\-([0-9a-fA-F]{4})\-([0-9a-fA-F]{4})\-([0-9a-fA-F]{4})\-([0-9a-fA-F]{12}))(\}){0,1}$"; var callBackDisplay = new Func <string, string, CultureInfo, string>((segment, moduleID, culture) => { var match = Regex.Match(segment, expression, RegexOptions.IgnoreCase | RegexOptions.Compiled); if (match.Success && string.IsNullOrWhiteSpace(Display)) { return(match.Groups[7].ToString()); } else if (match.Success) { return(string.Format ( InternationalizationManager.I18N(culture, moduleID, Display), DisplayFormat == Format.Simple ? match.Groups[7].ToString() : match.Groups[2].ToString() )); } return(null); }); var callBackValiables = new Func <string, IDictionary <string, string> >(segment => { var match = Regex.Match(segment, expression, RegexOptions.IgnoreCase | RegexOptions.Compiled); if (match.Success) { var dict = new Dictionary <string, string>(); dict.Add(VariableName, match.Groups[2].ToString()); return(dict); } return(null); }); return(new PathSegmentVariable(expression, callBackDisplay, callBackValiables)); }
/// <summary> /// Liefert den Anzeigenamen /// </summary> /// <param name="segment">Das Segemnt</param> /// <param name="pluginID">Die PlugiinID</param> /// <param name="culture">Die Kultur</param> /// <returns>Der Anzeigestring zum Segment</returns> public string GetDisplay(string segment, string pluginID, CultureInfo culture) { return(InternationalizationManager.I18N(culture, pluginID, Display)); }
/// <summary> /// Internationalisierung /// </summary> /// <param name="obj">Das Objekt, welches erweitert wird</param> /// <param name="pluginID">Die PluginID</param> /// <param name="key">Der Schlüssel</param> /// <returns>Der Wert des Schlüssels in der aktuellen Sprache</returns> public static string I18N(this II18N obj, string pluginID, string key) { return(InternationalizationManager.I18N(obj.Culture, pluginID, key)); }
/// <summary> /// Internationalisierung /// </summary> /// <param name="obj">Das Objekt, welches erweitert wird</param> /// <param name="key">Der Schlüssel</param> /// <returns>Der Wert des Schlüssels in der aktuellen Sprache</returns> public static string I18N(this II18N obj, string key) { return(InternationalizationManager.I18N(obj, key)); }