[1.2.2] Going to netcore
This commit is contained in:
		
							parent
							
								
									8811a949fe
								
							
						
					
					
						commit
						7204003afb
					
				| @ -5,26 +5,16 @@ using System.Net; | ||||
| using System.Text; | ||||
| using System.Threading; | ||||
| using System.Web; | ||||
| using BlubbFish.Utils.IoT.Connector; | ||||
| using BlubbFish.Utils.IoT.Events; | ||||
| using LitJson; | ||||
| 
 | ||||
| namespace BlubbFish.Utils.IoT.Bots { | ||||
|   public abstract class Webserver : ABot | ||||
|   { | ||||
|   public abstract class AWebserver : ABot { | ||||
|     protected Dictionary<String, String> config; | ||||
|     protected static InIReader requests; | ||||
|     protected HttpListener httplistener; | ||||
|     protected ABackend databackend; | ||||
|      | ||||
|     public Webserver(ABackend backend, Dictionary<String, String> settings, InIReader requestslookup) { | ||||
|       this.config = settings; | ||||
|       requests = requestslookup; | ||||
|       this.databackend = backend; | ||||
|     } | ||||
|     protected HttpListener httplistener; | ||||
| 
 | ||||
|     public AWebserver(Dictionary<String, String> settings) => this.config = settings; | ||||
| 
 | ||||
|     protected void StartListen() { | ||||
|       this.databackend.MessageIncomming += this.Backend_MessageIncomming; | ||||
|       this.httplistener = new HttpListener(); | ||||
|       this.httplistener.Prefixes.Add(this.config["prefix"]); | ||||
|       this.httplistener.Start(); | ||||
| @ -45,7 +35,57 @@ namespace BlubbFish.Utils.IoT.Bots { | ||||
|       }); | ||||
|     } | ||||
| 
 | ||||
|     public static Boolean SendFileResponse(HttpListenerContext cont, String folder = "resources", Boolean printOutput = true) { | ||||
|     public override void Dispose() { | ||||
|       if(this.httplistener.IsListening) { | ||||
|         this.httplistener.Stop(); | ||||
|       } | ||||
|       this.httplistener.Close(); | ||||
|       base.Dispose(); | ||||
|     } | ||||
| 
 | ||||
|     protected abstract Boolean SendWebserverResponse(HttpListenerContext cont); | ||||
|   } | ||||
| 
 | ||||
|   #region HttpListener* Extensions | ||||
|   public static class HttpListenerHelper { | ||||
|     private static InIReader requests; | ||||
| 
 | ||||
|     public static Dictionary<String, String> GetPostParams(this HttpListenerRequest request) { | ||||
|       if(request.HttpMethod == "POST") { | ||||
|         if(request.HasEntityBody) { | ||||
|           StreamReader reader = new StreamReader(request.InputStream, request.ContentEncoding); | ||||
|           String rawData = reader.ReadToEnd(); | ||||
|           request.InputStream.Close(); | ||||
|           reader.Close(); | ||||
|           Dictionary<String, String> ret = new Dictionary<String, String>(); | ||||
|           foreach(String param in rawData.Split('&')) { | ||||
|             String[] kvPair = param.Split('='); | ||||
|             if(!ret.ContainsKey(kvPair[0])) { | ||||
|               ret.Add(kvPair[0], HttpUtility.UrlDecode(kvPair[1])); | ||||
|             } | ||||
|           } | ||||
|           return ret; | ||||
|         } | ||||
|       } | ||||
|       return new Dictionary<String, String>(); | ||||
|     } | ||||
| 
 | ||||
|     public static Boolean SendStringResponse(this HttpListenerContext cont, String obj) => cont.SendBinaryResponse(Encoding.UTF8.GetBytes(obj)); | ||||
| 
 | ||||
|     public static Boolean SendBinaryResponse(this HttpListenerContext cont, Byte[] buf) { | ||||
|       try { | ||||
|         cont.Response.ContentLength64 = buf.Length; | ||||
|         cont.Response.OutputStream.Write(buf, 0, buf.Length); | ||||
|         Console.WriteLine("200 - " + cont.Request.Url.PathAndQuery); | ||||
|         return true; | ||||
|       } catch(Exception e) { | ||||
|         Helper.WriteError("500 - " + e.Message + "\n\n" + e.StackTrace); | ||||
|         cont.Response.StatusCode = 500; | ||||
|       } | ||||
|       return false; | ||||
|     } | ||||
| 
 | ||||
|     public static Boolean SendFileResponse(this HttpListenerContext cont, String folder = "resources", Boolean printOutput = true) { | ||||
|       String restr = cont.Request.Url.PathAndQuery; | ||||
|       if(restr.StartsWith("/")) { | ||||
|         restr = restr.IndexOf("?") != -1 ? restr[1..restr.IndexOf("?")] : restr[1..]; | ||||
| @ -81,7 +121,7 @@ namespace BlubbFish.Utils.IoT.Bots { | ||||
|                   file = file.Replace("\"{%" + item.Key.ToUpper() + "%}\"", item.Value); | ||||
|                 } | ||||
|               } | ||||
|               file = file.Replace("{%REQUEST_URL_HOST%}", cont.Request.Url.Host+":"+cont.Request.Url.Port); | ||||
|               file = file.Replace("{%REQUEST_URL_HOST%}", cont.Request.Url.Host + ":" + cont.Request.Url.Port); | ||||
|               Byte[] buf = Encoding.UTF8.GetBytes(file); | ||||
|               cont.Response.ContentLength64 = buf.Length; | ||||
|               switch(end) { | ||||
| @ -109,53 +149,7 @@ namespace BlubbFish.Utils.IoT.Bots { | ||||
|       return false; | ||||
|     } | ||||
| 
 | ||||
|     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(Exception e) { | ||||
|         Helper.WriteError("500 - " + e.Message + "\n\n" + e.StackTrace); | ||||
|         cont.Response.StatusCode = 500; | ||||
|       } | ||||
|       return false; | ||||
|     } | ||||
| 
 | ||||
|     public static Dictionary<String, String> GetPostParams(HttpListenerRequest req) { | ||||
|       if(req.HttpMethod == "POST") { | ||||
|         if(req.HasEntityBody) { | ||||
|           StreamReader reader = new StreamReader(req.InputStream, req.ContentEncoding); | ||||
|           String rawData = reader.ReadToEnd(); | ||||
|           req.InputStream.Close(); | ||||
|           reader.Close(); | ||||
|           Dictionary<String, String> ret = new Dictionary<String, String>(); | ||||
|           foreach(String param in rawData.Split('&')) { | ||||
|             String[] kvPair = param.Split('='); | ||||
|             if(!ret.ContainsKey(kvPair[0])) { | ||||
|               ret.Add(kvPair[0], HttpUtility.UrlDecode(kvPair[1])); | ||||
|             } | ||||
|           } | ||||
|           return ret; | ||||
|         } | ||||
|       } | ||||
|       return new Dictionary<String, String>(); | ||||
|     } | ||||
| 
 | ||||
|     public override void Dispose() { | ||||
|       if(this.httplistener.IsListening) { | ||||
|         this.httplistener.Stop(); | ||||
|       } | ||||
| 
 | ||||
|       this.httplistener.Close(); | ||||
|       if(this.databackend != null) { | ||||
|         this.databackend.Dispose(); | ||||
|       } | ||||
|       base.Dispose(); | ||||
|     } | ||||
| 
 | ||||
|     protected abstract void Backend_MessageIncomming(Object sender, BackendEvent e); | ||||
|     protected abstract Boolean SendWebserverResponse(HttpListenerContext cont); | ||||
|     public static void SetRequestsOverride(InIReader requestslookup) => requests = requestslookup; | ||||
|   } | ||||
|   #endregion | ||||
| } | ||||
							
								
								
									
										23
									
								
								Bot-Utils/AWebserverDataBackend.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Bot-Utils/AWebserverDataBackend.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| 
 | ||||
| using BlubbFish.Utils.IoT.Connector; | ||||
| using BlubbFish.Utils.IoT.Events; | ||||
| 
 | ||||
| namespace BlubbFish.Utils.IoT.Bots { | ||||
|   public abstract class AWebserverDataBackend : AWebserver { | ||||
|     protected ABackend databackend; | ||||
|     protected AWebserverDataBackend(ABackend backend, Dictionary<String, String> settings) : base(settings) => this.databackend = backend; | ||||
| 
 | ||||
|     protected void StartDataBackend() => this.databackend.MessageIncomming += this.Backend_MessageIncomming; | ||||
| 
 | ||||
|     protected abstract void Backend_MessageIncomming(Object sender, BackendEvent e); | ||||
| 
 | ||||
|     public override void Dispose() { | ||||
|       if(this.databackend != null) { | ||||
|         this.databackend.Dispose(); | ||||
|       } | ||||
|       base.Dispose(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -5,19 +5,20 @@ | ||||
|     <RootNamespace>BlubbFish.Utils.IoT.Bots</RootNamespace> | ||||
|     <AssemblyName>Bot-Utils</AssemblyName> | ||||
|     <PackageId>Bots.IoT.Utils.BlubbFish</PackageId> | ||||
|     <Version>1.2.1</Version> | ||||
|     <AssemblyVersion>1.2.1</AssemblyVersion> | ||||
|     <FileVersion>1.2.1</FileVersion> | ||||
|     <Version>1.2.2</Version> | ||||
|     <AssemblyVersion>1.2.2</AssemblyVersion> | ||||
|     <FileVersion>1.2.2</FileVersion> | ||||
|     <NeutralLanguage>de-DE</NeutralLanguage> | ||||
|     <Description>Bot-Utils are helpers for programming a bot</Description> | ||||
|     <Authors>BlubbFish</Authors> | ||||
|     <Company>BlubbFish</Company> | ||||
|     <Copyright>Copyright © BlubbFish 2018 - 30.08.2019</Copyright> | ||||
|     <Copyright>Copyright © BlubbFish 2018 - 22.08.2021</Copyright> | ||||
|     <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
|     <PackageProjectUrl>http://git.blubbfish.net/vs_utils/Bot-Utils</PackageProjectUrl> | ||||
|     <RepositoryUrl>http://git.blubbfish.net/vs_utils/Bot-Utils.git</RepositoryUrl> | ||||
|     <RepositoryType>git</RepositoryType> | ||||
|     <PackageReleaseNotes>1.2.1 When using Dispose, kill also mqtt connection and other tiny fixes | ||||
|     <PackageReleaseNotes>1.2.2 Going to netcore | ||||
| 1.2.1 When using Dispose, kill also mqtt connection and other tiny fixes | ||||
| 1.2.0 Refactor Bot to ABot and refere MultiSourceBot, Webserver and Bot to it. Add MultiSourceBot. Rewrite Mqtt module so that it not need to watch the connection. | ||||
| 1.1.9 Modify Output of SendFileResponse | ||||
| 1.1.8 Add logger to Webserver Class | ||||
| @ -43,6 +44,7 @@ | ||||
|     <Content Include="../LICENSE" /> | ||||
|     <Content Include="../README.md" /> | ||||
|   </ItemGroup> | ||||
|    | ||||
|   <ItemGroup> | ||||
|     <None Include="..\LICENSE"> | ||||
|       <Pack>True</Pack> | ||||
|  | ||||
							
								
								
									
										65
									
								
								Changelog.md
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								Changelog.md
									
									
									
									
									
								
							| @ -0,0 +1,65 @@ | ||||
| ## 1.2.2 - Going to netcore | ||||
| ### New Features | ||||
| * Split Wbserver to AWebserver and AWebserverDataBackend | ||||
| * Add mp4 as binary content | ||||
| * make a mirror of this repo on github | ||||
| ### Changes | ||||
| * change to c+ newer coding style | ||||
| * mograde to c# netcore 3.1 | ||||
| 
 | ||||
| ## 1.2.1 | ||||
| ### New Features | ||||
| * Add LICENSE, CONTRIBUTING.md and README.md | ||||
| ### Bugfixes | ||||
| * When using Dispose, kill also mqtt connection | ||||
| ### Changes | ||||
| * A bit more debugging | ||||
| 
 | ||||
| ## 1.2.0 | ||||
| ### New Features | ||||
| * Add MultiSourceBot* | ||||
| * Refere MultiSourceBot, Webserver and Bot to it. | ||||
| ### Changes | ||||
| * Refactor Bot to ABot | ||||
| * Rewrite Mqtt module so that it not need to watch the connection. | ||||
| 
 | ||||
| ## 1.1.9 | ||||
| ### New Features | ||||
| * Modify Output of SendFileResponse | ||||
| 
 | ||||
| ## 1.1.8 | ||||
| ### New Features | ||||
| * Add logger to Webserver Class | ||||
| 
 | ||||
| ## 1.1.7 | ||||
| ### Changes | ||||
| * Restrucutre loading, so that all is init and after the listener is started, REQUEST_URL_HOST gives now host and port | ||||
| 
 | ||||
| ## 1.1.6 | ||||
| ### New Features | ||||
| * SendFileResponse with a parameter for the folder | ||||
| * add function that parse post params | ||||
| 
 | ||||
| ## 1.1.5 | ||||
| ### New Features | ||||
| * add a function to send an object as json directly | ||||
| 
 | ||||
| ## 1.1.4 | ||||
| ### New Features | ||||
| * add Woff as Binary type | ||||
| 
 | ||||
| ## 1.1.3 | ||||
| ### Changes | ||||
| * Variables parsing now as a String | ||||
| 
 | ||||
| ## 1.1.2 | ||||
| ### Bugfixes | ||||
| * Fixing bug for Contenttype | ||||
| 
 | ||||
| ## 1.1.1 | ||||
| ### Changes | ||||
| * Update to local librarys | ||||
| 
 | ||||
| ## 1.1.0 | ||||
| ### New Features | ||||
| * Remove Helper from Bot-Utils | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user