using JT808.DotNetty.Abstractions.Dtos; using JT808.DotNetty.Core.Handlers; using JT808.DotNetty.Core.Interfaces; using JT808.DotNetty.Core.Metadata; using JT808.DotNetty.Core.Services; using Newtonsoft.Json; namespace JT808.DotNetty.WebApi.Handlers { /// /// 默认消息处理业务实现 /// public class JT808MsgIdDefaultWebApiHandler : JT808MsgIdHttpHandlerBase { private const string sessionRoutePrefix = "Session"; private const string transmitPrefix = "Transmit"; private readonly JT808TcpAtomicCounterService jT808TcpAtomicCounterService; private readonly JT808UdpAtomicCounterService jT808UdpAtomicCounterService; private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService; private readonly IJT808TcpSessionService jT808TcpSessionService; private readonly IJT808UdpSessionService jT808UdpSessionService; private readonly IJT808UnificationTcpSendService jT808UnificationTcpSendService; private readonly IJT808UnificationUdpSendService jT808UnificationUdpSendService; /// /// TCP一套注入 /// /// public JT808MsgIdDefaultWebApiHandler( IJT808UnificationTcpSendService jT808UnificationTcpSendService, IJT808TcpSessionService jT808TcpSessionService, JT808TransmitAddressFilterService jT808TransmitAddressFilterService, JT808TcpAtomicCounterService jT808TcpAtomicCounterService ) { this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; this.jT808TcpSessionService = jT808TcpSessionService; this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; this.jT808TcpAtomicCounterService = jT808TcpAtomicCounterService; InitTcpRoute(); } /// /// UDP一套注入 /// /// public JT808MsgIdDefaultWebApiHandler( IJT808UdpSessionService jT808UdpSessionService, IJT808UnificationUdpSendService jT808UnificationUdpSendService, JT808UdpAtomicCounterService jT808UdpAtomicCounterService ) { this.jT808UdpSessionService = jT808UdpSessionService; this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService; InitUdpRoute(); } /// /// 统一的一套注入 /// /// /// public JT808MsgIdDefaultWebApiHandler( IJT808UnificationTcpSendService jT808UnificationTcpSendService, IJT808UnificationUdpSendService jT808UnificationUdpSendService, IJT808TcpSessionService jT808TcpSessionService, IJT808UdpSessionService jT808UdpSessionService, JT808TransmitAddressFilterService jT808TransmitAddressFilterService, JT808TcpAtomicCounterService jT808TcpAtomicCounterService, JT808UdpAtomicCounterService jT808UdpAtomicCounterService ) { this.jT808UdpSessionService = jT808UdpSessionService; this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; this.jT808TcpSessionService = jT808TcpSessionService; this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; this.jT808TcpAtomicCounterService = jT808TcpAtomicCounterService; this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService; InitTcpRoute(); InitUdpRoute(); } /// /// 会话服务集合 /// /// /// public JT808HttpResponse GetTcpSessionAll(JT808HttpRequest request) { var result = jT808TcpSessionService.GetAll(); return CreateJT808HttpResponse(result); } /// /// 会话服务-通过设备终端号移除对应会话 /// /// /// public JT808HttpResponse RemoveTcpSessionByTerminalPhoneNo(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } var result = jT808TcpSessionService.RemoveByTerminalPhoneNo(request.Json); return CreateJT808HttpResponse(result); } /// /// 会话服务集合 /// /// /// public JT808HttpResponse GetUdpSessionAll(JT808HttpRequest request) { var result = jT808UdpSessionService.GetAll(); return CreateJT808HttpResponse(result); } /// /// 会话服务-通过设备终端号移除对应会话 /// /// /// public JT808HttpResponse RemoveUdpSessionByTerminalPhoneNo(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } var result = jT808UdpSessionService.RemoveByTerminalPhoneNo(request.Json); return CreateJT808HttpResponse(result); } /// /// 添加转发过滤地址 /// /// /// 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()); } /// /// 获取Tcp包计数器 /// /// /// public JT808HttpResponse GetTcpAtomicCounter(JT808HttpRequest request) { JT808AtomicCounterDto jT808AtomicCounterDto = new JT808AtomicCounterDto(); jT808AtomicCounterDto.MsgFailCount = jT808TcpAtomicCounterService.MsgFailCount; jT808AtomicCounterDto.MsgSuccessCount = jT808TcpAtomicCounterService.MsgSuccessCount; return CreateJT808HttpResponse(new JT808ResultDto { Code = JT808ResultCode.Ok, Data = jT808AtomicCounterDto }); } /// /// 获取Udp包计数器 /// /// /// public JT808HttpResponse GetUdpAtomicCounter(JT808HttpRequest request) { JT808AtomicCounterDto jT808AtomicCounterDto = new JT808AtomicCounterDto(); jT808AtomicCounterDto.MsgFailCount = jT808UdpAtomicCounterService.MsgFailCount; jT808AtomicCounterDto.MsgSuccessCount = jT808UdpAtomicCounterService.MsgSuccessCount; return CreateJT808HttpResponse(new JT808ResultDto { Code = JT808ResultCode.Ok, Data = jT808AtomicCounterDto }); } /// /// 基于Tcp的统一下发信息 /// /// /// public JT808HttpResponse UnificationTcpSend(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonConvert.DeserializeObject(request.Json); var result = jT808UnificationTcpSendService.Send(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data); return CreateJT808HttpResponse(result); } /// /// 基于Udp的统一下发信息 /// /// /// public JT808HttpResponse UnificationUdpSend(JT808HttpRequest request) { if (string.IsNullOrEmpty(request.Json)) { return EmptyHttpResponse(); } JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonConvert.DeserializeObject(request.Json); var result = jT808UnificationUdpSendService.Send(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data); return CreateJT808HttpResponse(result); } protected virtual void InitTcpRoute() { CreateRoute($"{transmitPrefix}/Add", AddTransmitAddress); CreateRoute($"{transmitPrefix}/Remove", RemoveTransmitAddress); CreateRoute($"{transmitPrefix}/GetAll", GetTransmitAll); CreateRoute($"GetTcpAtomicCounter", GetTcpAtomicCounter); CreateRoute($"{sessionRoutePrefix}/Tcp/GetAll", GetTcpSessionAll); CreateRoute($"{sessionRoutePrefix}/Tcp/RemoveByTerminalPhoneNo", RemoveTcpSessionByTerminalPhoneNo); CreateRoute($"UnificationTcpSend", UnificationTcpSend); } protected virtual void InitUdpRoute() { CreateRoute($"GetUdpAtomicCounter", GetUdpAtomicCounter); CreateRoute($"UnificationUdpSend", UnificationUdpSend); CreateRoute($"{sessionRoutePrefix}/Udp/GetAll", GetUdpSessionAll); CreateRoute($"{sessionRoutePrefix}/Udp/RemoveByTerminalPhoneNo", RemoveUdpSessionByTerminalPhoneNo); } } }