using JT808.DotNetty.Dtos; using JT808.DotNetty.Interfaces; using JT808.DotNetty.Metadata; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Text; namespace JT808.DotNetty.Internal { /// /// JT808 WebApi 业务服务 /// internal class JT808WebAPIService { public Dictionary> HandlerDict { get; protected set; } private const string RouteTablePrefix = "/jt808api"; private const string sessionRoutePrefix = "Session"; private const string sourcePackagePrefix = "SourcePackage"; private const string transmitPrefix = "Transmit"; private readonly IJT808SessionService jT808SessionService; private readonly IJT808UnificationSendService jT808UnificationSendService; private readonly JT808AtomicCounterService jT808AtomicCounterService; private readonly JT808SourcePackageChannelService jT808SourcePackageChannelService; private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService; /// /// 初始化消息处理业务 /// public JT808WebAPIService( JT808AtomicCounterService jT808AtomicCounterService, JT808SourcePackageChannelService jT808SourcePackageChannelService, JT808TransmitAddressFilterService jT808TransmitAddressFilterService, IJT808SessionService jT808SessionService, IJT808UnificationSendService jT808UnificationSendService) { this.jT808AtomicCounterService = jT808AtomicCounterService; this.jT808SourcePackageChannelService = jT808SourcePackageChannelService; this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; this.jT808SessionService = jT808SessionService; this.jT808UnificationSendService = jT808UnificationSendService; HandlerDict = new Dictionary> { {$"{RouteTablePrefix}/UnificationSend", UnificationSend}, {$"{RouteTablePrefix}/{sessionRoutePrefix}/GetAll", GetSessionAll}, {$"{RouteTablePrefix}/{sessionRoutePrefix}/RemoveByChannelId", RemoveByChannelId}, {$"{RouteTablePrefix}/{sessionRoutePrefix}/RemoveByTerminalPhoneNo", RemoveByTerminalPhoneNo}, {$"{RouteTablePrefix}/GetAtomicCounter", GetAtomicCounter}, {$"{RouteTablePrefix}/{sourcePackagePrefix}/Add", AddSourcePackageAddress}, {$"{RouteTablePrefix}/{sourcePackagePrefix}/Remove", RemoveSourcePackageAddress}, {$"{RouteTablePrefix}/{sourcePackagePrefix}/GetAll", GetSourcePackageAll}, {$"{RouteTablePrefix}/{transmitPrefix}/Add", AddTransmitAddress}, {$"{RouteTablePrefix}/{transmitPrefix}/Remove", RemoveTransmitAddress}, {$"{RouteTablePrefix}/{transmitPrefix}/GetAll", GetTransmitAll}, }; } /// /// 统一下发信息 /// /// /// public JT808HttpResponse UnificationSend(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonConvert.DeserializeObject(request.Json); var result = jT808UnificationSendService.Send(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data); return CreateJT808HttpResponse(result); } /// /// 会话服务集合 /// /// /// public JT808HttpResponse GetSessionAll(JT808HttpRequest request) { var result = jT808SessionService.GetAll(); return CreateJT808HttpResponse(result); } /// /// 会话服务-通过通道Id移除对应会话 /// /// /// public JT808HttpResponse RemoveByChannelId(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } var result = jT808SessionService.RemoveByChannelId(request.Json); return CreateJT808HttpResponse(result); } /// /// 会话服务-通过设备终端号移除对应会话 /// /// /// public JT808HttpResponse RemoveByTerminalPhoneNo(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } var result = jT808SessionService.RemoveByTerminalPhoneNo(request.Json); return CreateJT808HttpResponse(result); } /// /// 获取包计数器 /// /// /// public JT808HttpResponse GetAtomicCounter(JT808HttpRequest request) { JT808AtomicCounterDto jT808AtomicCounterDto = new JT808AtomicCounterDto(); jT808AtomicCounterDto.MsgFailCount = jT808AtomicCounterService.MsgFailCount; jT808AtomicCounterDto.MsgSuccessCount = jT808AtomicCounterService.MsgSuccessCount; return CreateJT808HttpResponse(new JT808ResultDto { Code=JT808ResultCode.Ok, Data= jT808AtomicCounterDto }); } /// /// 添加原包转发地址 /// /// /// public JT808HttpResponse AddSourcePackageAddress(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject(request.Json); return CreateJT808HttpResponse(jT808SourcePackageChannelService.Add(jT808IPAddressDto).Result); } /// /// 删除原包转发地址(不能删除在网关服务器配置文件配的地址) /// /// /// public JT808HttpResponse RemoveSourcePackageAddress(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject(request.Json); return CreateJT808HttpResponse(jT808SourcePackageChannelService.Remove(jT808IPAddressDto).Result); } /// /// 获取原包信息集合 /// /// /// public JT808HttpResponse GetSourcePackageAll(JT808HttpRequest request) { return CreateJT808HttpResponse(jT808SourcePackageChannelService.GetAll()); } /// /// 添加转发过滤地址 /// /// /// public JT808HttpResponse AddTransmitAddress(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject(request.Json); return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Add(jT808IPAddressDto)); } /// /// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址) /// /// /// public JT808HttpResponse RemoveTransmitAddress(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject(request.Json); return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Remove(jT808IPAddressDto)); } /// /// 获取转发过滤地址信息集合 /// /// /// public JT808HttpResponse GetTransmitAll(JT808HttpRequest request) { return CreateJT808HttpResponse(jT808TransmitAddressFilterService.GetAll()); } private JT808HttpResponse CreateJT808HttpResponse(dynamic dynamicObject) { byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dynamicObject)); return new JT808HttpResponse() { Data = data }; } public JT808HttpResponse DefaultHttpResponse() { byte[] json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new JT808DefaultResultDto())); return new JT808HttpResponse(json); } public JT808HttpResponse EmptyHttpResponse() { byte[] json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new JT808ResultDto() { Code = JT808ResultCode.Empty, Message ="内容为空", Data="Content Empty" })); return new JT808HttpResponse(json); } public JT808HttpResponse NotFoundHttpResponse() { byte[] json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new JT808ResultDto() { Code= JT808ResultCode.NotFound, Message="没有该服务", Data= "没有该服务" })); return new JT808HttpResponse(json); } public JT808HttpResponse ErrorHttpResponse(Exception ex) { byte[] json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new JT808ResultDto() { Code = JT808ResultCode.Error, Message = JsonConvert.SerializeObject(ex), Data= ex.Message })); return new JT808HttpResponse(json); } } }