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);
}
}
}