diff --git a/Bot-Utils/Properties/AssemblyInfo.cs b/Bot-Utils/Properties/AssemblyInfo.cs index 939ff80..afcd53c 100644 --- a/Bot-Utils/Properties/AssemblyInfo.cs +++ b/Bot-Utils/Properties/AssemblyInfo.cs @@ -32,8 +32,8 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.1.5")] -[assembly: AssemblyFileVersion("1.1.5")] +[assembly: AssemblyVersion("1.1.6")] +[assembly: AssemblyFileVersion("1.1.6")] /* * 1.1.0 Remove Helper from Bot-Utils @@ -42,4 +42,5 @@ using System.Runtime.InteropServices; * 1.1.3 Variables parsing now as a String * 1.1.4 add Woff as Binary type * 1.1.5 add a function to send an object as json directly + * 1.1.6 rename functions and make SendFileResponse with a parameter for the folder */ diff --git a/Bot-Utils/Webserver.cs b/Bot-Utils/Webserver.cs index 9f0fc37..954f5ef 100644 --- a/Bot-Utils/Webserver.cs +++ b/Bot-Utils/Webserver.cs @@ -15,12 +15,12 @@ namespace BlubbFish.Utils.IoT.Bots public abstract class Webserver { protected Dictionary config; - protected InIReader requests; + protected static InIReader requests; protected HttpListener httplistener; - public Webserver(ABackend backend, Dictionary settings, InIReader requests) { + public Webserver(ABackend backend, Dictionary settings, InIReader requestslookup) { this.config = settings; - this.requests = requests; + requests = requestslookup; backend.MessageIncomming += this.Backend_MessageIncomming; this.httplistener = new HttpListener(); this.httplistener.Prefixes.Add(this.config["prefix"]); @@ -32,7 +32,7 @@ namespace BlubbFish.Utils.IoT.Bots ThreadPool.QueueUserWorkItem((state) => { HttpListenerContext httplistenercontext = state as HttpListenerContext; try { - this.SendResponse(httplistenercontext); + this.SendWebserverResponse(httplistenercontext); } catch { } finally { httplistenercontext.Response.OutputStream.Close(); } @@ -42,33 +42,37 @@ namespace BlubbFish.Utils.IoT.Bots }); } - protected virtual void SendResponse(HttpListenerContext cont) { + public static Boolean SendFileResponse(HttpListenerContext cont, String folder) { String restr = cont.Request.Url.PathAndQuery; - if (restr.StartsWith("/")) { + if(restr.StartsWith("/")) { if(restr.IndexOf("?") != -1) { - restr = restr.Substring(1, restr.IndexOf("?")-1); + restr = restr.Substring(1, restr.IndexOf("?") - 1); } else { restr = restr.Substring(1); } if(restr == "") { restr = "index.html"; } - String end = restr.IndexOf('.') != -1 ? restr.Substring(restr.IndexOf('.')+1) : ""; - if (File.Exists("resources/"+ restr)) { + String end = restr.IndexOf('.') != -1 ? restr.Substring(restr.IndexOf('.') + 1) : ""; + if(File.Exists(folder + "/" + restr)) { try { - if (end == "png" || end == "jpg" || end == "jpeg" || end == "ico" || end == "woff") { - Byte[] output = File.ReadAllBytes("resources/" + restr); + if(end == "png" || end == "jpg" || end == "jpeg" || end == "ico" || end == "woff") { + Byte[] output = File.ReadAllBytes(folder + "/" + restr); switch(end) { - case "ico": cont.Response.ContentType = "image/x-ico"; break; - case "woff": cont.Response.ContentType = "font/woff"; break; + case "ico": + cont.Response.ContentType = "image/x-ico"; + break; + case "woff": + cont.Response.ContentType = "font/woff"; + break; } cont.Response.OutputStream.Write(output, 0, output.Length); - return; + return true; } else { - String file = File.ReadAllText("resources/" + restr); - if (this.requests.GetSections(false).Contains(restr)) { - Dictionary vars = this.requests.GetSection(restr); - foreach (KeyValuePair item in vars) { + String file = File.ReadAllText(folder + "/" + restr); + if(requests.GetSections(false).Contains(restr)) { + Dictionary vars = requests.GetSection(restr); + foreach(KeyValuePair item in vars) { file = file.Replace("\"{%" + item.Key.ToUpper() + "%}\"", item.Value); } } @@ -76,30 +80,35 @@ namespace BlubbFish.Utils.IoT.Bots Byte[] buf = Encoding.UTF8.GetBytes(file); cont.Response.ContentLength64 = buf.Length; switch(end) { - case "css": cont.Response.ContentType = "text/css"; break; + case "css": + cont.Response.ContentType = "text/css"; + break; } cont.Response.OutputStream.Write(buf, 0, buf.Length); Console.WriteLine("200 - " + cont.Request.Url.PathAndQuery); - return; + return true; } } catch(Exception e) { Helper.WriteError("500 - " + e.Message); cont.Response.StatusCode = 500; - return; + return false; } } - Helper.WriteError("404 - " + cont.Request.Url.PathAndQuery + " not found!"); - cont.Response.StatusCode = 404; - return; } - return; + Helper.WriteError("404 - " + cont.Request.Url.PathAndQuery + " not found!"); + cont.Response.StatusCode = 404; + return false; } - protected void SendJsonResponse(Object data, HttpListenerContext cont) { - Byte[] buf = Encoding.UTF8.GetBytes(JsonMapper.ToJson(data)); - cont.Response.ContentLength64 = buf.Length; - cont.Response.OutputStream.Write(buf, 0, buf.Length); - Console.WriteLine("200 - " + cont.Request.Url.PathAndQuery); + public static Boolean SendJsonResponse(Object data, HttpListenerContext cont) { + try { + Byte[] buf = Encoding.UTF8.GetBytes(JsonMapper.ToJson(data)); + cont.Response.ContentLength64 = buf.Length; + cont.Response.OutputStream.Write(buf, 0, buf.Length); + Console.WriteLine("200 - " + cont.Request.Url.PathAndQuery); + return true; + } catch { } + return false; } public void Dispose() { @@ -108,5 +117,6 @@ namespace BlubbFish.Utils.IoT.Bots } protected abstract void Backend_MessageIncomming(Object sender, BackendEvent e); + protected abstract Boolean SendWebserverResponse(HttpListenerContext cont); } }