using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using ConsoleHttp.Model; using MqttMsgServer.HttpService.dto; using MqttMsgServer.Service.Client; using MqttMsgServer.Service.ClientMessage; using MqttMsgServer.Service.ClientMessage.Dto; using MqttMsgServer.Tools; using Newtonsoft.Json; namespace MqttMsgServer.HttpService { public class CustomHttpServer : HttpServerBase { public CustomHttpServer(int maxThreads) : base(maxThreads) { } protected override void ProcessHttpRequest(HttpListenerContext ctx) { try { var url = ctx.Request.Url.AbsolutePath; string httpMethod = ctx.Request.HttpMethod.ToLower(); StreamReader reader = new StreamReader(ctx.Request.InputStream, Encoding.UTF8); string content = reader.ReadToEnd(); this.LogDebug($"http request IP:{ctx.Request.UserHostAddress}----requestUri:{url}-------data:{content}"); string response = ""; switch (httpMethod) { case "get": response = "{\"url\":\"" + url + "\"}"; break; case "post": response = JsonConvert.SerializeObject(HandlePostRequest(url, content)); break; } byte[] buffer = Encoding.UTF8.GetBytes(response); ctx.Response.StatusCode = 200; ctx.Response.ContentType = "application/json; charset=UTF-8"; ctx.Response.ContentLength64 = buffer.Length; ctx.Response.OutputStream.Write(buffer, 0, buffer.Length); ctx.Response.OutputStream.Close(); ctx.Response.Close(); } catch (Exception e) { this.LogError($"ProcessHttpRequest has error:"+e.Message); } } private ResponseResult HandlePostRequest(string url, string data) { ResponseResult result = new ResponseResult() { IsSuccess = false }; if (string.IsNullOrEmpty(data)) { result.ErrorMessage= "参数为空!"; return result; } //if (!url.EndsWith("regClient")) //{ // result.ErrorMessage = "资源不存在404!"; // return result; //} string lastUrl = url.Substring(url.LastIndexOf('/')); lastUrl = lastUrl?.ToLower(); switch (lastUrl) { case "/regclient": result = RegisterClient(data); break; case "/querymsg": result = QueryMessageInfos(data); break; case "/countmsg": result = CountMessage(data); break; default: result.ErrorMessage = "资源不存在404!"; return result; } return result; } /// /// 注册客户端 /// /// /// private ResponseResult RegisterClient(string inputData) { var clientDto = JsonConvert.DeserializeObject(inputData); ClientInfoService cs = new ClientInfoService(); return cs.AddOrUpdateClient(clientDto); } /// /// 查询消息信息(消息详情)1.根据查询条件查询(时间范围 客户端 主题 ) /// /// private ResponseResult QueryMessageInfos(string inputData) { var inputDto = JsonConvert.DeserializeObject(inputData); ClientMessageService cmService = new ClientMessageService(); return cmService.QueryMsgInfo(inputDto); } /// /// 统计消息(根据查询条件按时间段分组统计(小时,天,月,年).) /// /// private ResponseResult CountMessage(string inputData) { var inputDto = JsonConvert.DeserializeObject(inputData); ClientMessageService cmService = new ClientMessageService(); return cmService.CountMsgInfo(inputDto); } } }