CustomHttpServer.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using ConsoleHttp.Model;
  9. using MqttMsgServer.HttpService.dto;
  10. using MqttMsgServer.Service.Client;
  11. using MqttMsgServer.Service.ClientMessage;
  12. using MqttMsgServer.Service.ClientMessage.Dto;
  13. using MqttMsgServer.Tools;
  14. using Newtonsoft.Json;
  15. namespace MqttMsgServer.HttpService
  16. {
  17. public class CustomHttpServer : HttpServerBase
  18. {
  19. public CustomHttpServer(int maxThreads) : base(maxThreads)
  20. {
  21. }
  22. protected override void ProcessHttpRequest(HttpListenerContext ctx)
  23. {
  24. try
  25. {
  26. var url = ctx.Request.Url.AbsolutePath;
  27. string httpMethod = ctx.Request.HttpMethod.ToLower();
  28. StreamReader reader = new StreamReader(ctx.Request.InputStream, Encoding.UTF8);
  29. string content = reader.ReadToEnd();
  30. this.LogDebug($"http request IP:{ctx.Request.UserHostAddress}----requestUri:{url}-------data:{content}");
  31. string response = "";
  32. switch (httpMethod)
  33. {
  34. case "get":
  35. response = "{\"url\":\"" + url + "\"}";
  36. break;
  37. case "post":
  38. response = JsonConvert.SerializeObject(HandlePostRequest(url, content));
  39. break;
  40. }
  41. byte[] buffer = Encoding.UTF8.GetBytes(response);
  42. ctx.Response.StatusCode = 200;
  43. ctx.Response.ContentType = "application/json; charset=UTF-8";
  44. ctx.Response.ContentLength64 = buffer.Length;
  45. ctx.Response.OutputStream.Write(buffer, 0, buffer.Length);
  46. ctx.Response.OutputStream.Close();
  47. ctx.Response.Close();
  48. }
  49. catch (Exception e)
  50. {
  51. this.LogError($"ProcessHttpRequest has error:"+e.Message);
  52. }
  53. }
  54. private ResponseResult HandlePostRequest(string url, string data)
  55. {
  56. ResponseResult result = new ResponseResult()
  57. {
  58. IsSuccess = false
  59. };
  60. if (string.IsNullOrEmpty(data))
  61. {
  62. result.ErrorMessage= "参数为空!";
  63. return result;
  64. }
  65. //if (!url.EndsWith("regClient"))
  66. //{
  67. // result.ErrorMessage = "资源不存在404!";
  68. // return result;
  69. //}
  70. string lastUrl = url.Substring(url.LastIndexOf('/'));
  71. lastUrl = lastUrl?.ToLower();
  72. switch (lastUrl)
  73. {
  74. case "/regclient":
  75. result = RegisterClient(data);
  76. break;
  77. case "/querymsg":
  78. result = QueryMessageInfos(data);
  79. break;
  80. case "/countmsg":
  81. result = CountMessage(data);
  82. break;
  83. default:
  84. result.ErrorMessage = "资源不存在404!";
  85. return result;
  86. }
  87. return result;
  88. }
  89. /// <summary>
  90. /// 注册客户端
  91. /// </summary>
  92. /// <param name="inputData"></param>
  93. /// <returns></returns>
  94. private ResponseResult RegisterClient(string inputData)
  95. {
  96. var clientDto = JsonConvert.DeserializeObject<ClientDto>(inputData);
  97. ClientInfoService cs = new ClientInfoService();
  98. return cs.AddOrUpdateClient(clientDto);
  99. }
  100. /// <summary>
  101. /// 查询消息信息(消息详情)1.根据查询条件查询(时间范围 客户端 主题 )
  102. /// </summary>
  103. /// <returns></returns>
  104. private ResponseResult QueryMessageInfos(string inputData)
  105. {
  106. var inputDto = JsonConvert.DeserializeObject<MsgQueryParamDto>(inputData);
  107. ClientMessageService cmService = new ClientMessageService();
  108. return cmService.QueryMsgInfo(inputDto);
  109. }
  110. /// <summary>
  111. /// 统计消息(根据查询条件按时间段分组统计(小时,天,月,年).)
  112. /// </summary>
  113. /// <returns></returns>
  114. private ResponseResult CountMessage(string inputData)
  115. {
  116. var inputDto = JsonConvert.DeserializeObject<MsgQueryCount>(inputData);
  117. ClientMessageService cmService = new ClientMessageService();
  118. return cmService.CountMsgInfo(inputDto);
  119. }
  120. }
  121. }