using System; using System.Collections.Generic; using JT809.DotNetty.Core.Configurations; using JT809.DotNetty.Core.Interfaces; using JT809.DotNetty.Core.Clients; using JT809.DotNetty.Core.Metadata; using JT809.Protocol.Enums; using JT809.Protocol.Extensions; using JT809.Protocol.MessageBody; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; namespace JT809.DotNetty.Core.Handlers { /// /// 上级平台 /// 主从链路接收消息处理程序 /// public abstract class JT809SuperiorMsgIdReceiveHandlerBase { protected IJT809VerifyCodeGenerator VerifyCodeGenerator { get; } protected JT809SubordinateClient SubordinateLinkClient { get; } protected JT809Configuration Configuration { get; } protected ILogger Logger { get; } /// /// 初始化消息处理业务 /// protected JT809SuperiorMsgIdReceiveHandlerBase( ILoggerFactory loggerFactory, IOptions jT809ConfigurationAccessor, IJT809VerifyCodeGenerator verifyCodeGenerator, JT809SubordinateClient subordinateLinkClient) { this.Logger = loggerFactory.CreateLogger(); this.VerifyCodeGenerator = verifyCodeGenerator; this.SubordinateLinkClient = subordinateLinkClient; HandlerDict = new Dictionary> { {JT809BusinessType.主链路登录请求消息, Msg0x1001}, {JT809BusinessType.主链路注销请求消息, Msg0x1003}, {JT809BusinessType.主链路连接保持请求消息, Msg0x1005}, {JT809BusinessType.主链路断开通知消息,Msg0x1007 }, {JT809BusinessType.主链路动态信息交换消息, Msg0x1200}, {JT809BusinessType.下级平台主动关闭链路通知消息, Msg0x1008}, {JT809BusinessType.从链路连接应答消息, Msg0x9002}, {JT809BusinessType.从链路注销应答消息, Msg0x9004}, {JT809BusinessType.从链路连接保持应答消息, Msg0x9006}, }; SubHandlerDict = new Dictionary> { //{JT809SubBusinessType.实时上传车辆定位信息, Msg0x1200_0x1202}, }; } public Dictionary> HandlerDict { get; protected set; } public Dictionary> SubHandlerDict { get; protected set; } /// /// 主链路登录请求消息 /// /// /// 主链路登录应答消息 public virtual JT809Response Msg0x1001(JT809Request request) { var verifyCode = VerifyCodeGenerator.Create(); Logger.LogInformation($"主链路登录请求消息:VerifyCode-{verifyCode}"); var package = JT809BusinessType.主链路登录应答消息.Create(new JT809_0x1002() { Result = JT809_0x1002_Result.成功, VerifyCode = verifyCode }); if (Configuration.SubordinateClientEnable) { var jT809_0x1001 = request.Package.Bodies as JT809_0x1001; SubordinateLinkClient.ConnectAsync(jT809_0x1001.DownLinkIP, jT809_0x1001.DownLinkPort, verifyCode); } return new JT809Response(package, 100); } /// /// 主链路注销请求消息 /// /// /// 主链路注销应答消息 public virtual JT809Response Msg0x1003(JT809Request request) { var jT809_0x1003 = request.Package.Bodies as JT809_0x1003; Logger.LogInformation(JsonConvert.SerializeObject(jT809_0x1003)); var package = JT809BusinessType.主链路注销应答消息.Create(); return new JT809Response(package, 100); } /// /// 主链路连接保持请求消息 /// /// /// 主链路连接保持应答消息 public virtual JT809Response Msg0x1005(JT809Request request) { var package = JT809BusinessType.主链路连接保持应答消息.Create(); return new JT809Response(package, 100); } /// /// 主链路断开通知消息 /// /// /// 本条消息无需被通知方应答 public virtual JT809Response Msg0x1007(JT809Request request) { var jT809_0x1007 = request.Package.Bodies as JT809_0x1007; Logger.LogInformation($"主链路断开通知消息:{jT809_0x1007.ErrorCode.ToString()}-{jT809_0x1007.ErrorCode}"); return null; } /// /// 下级平台主动关闭链路通知消息 /// /// /// 本条消息无需被通知方应答 public virtual JT809Response Msg0x1008(JT809Request request) { var jT809_0x1008 = request.Package.Bodies as JT809_0x1008; Logger.LogInformation($"下级平台主动关闭链路通知消息:{jT809_0x1008.ReasonCode.ToString()}-{jT809_0x1008.ReasonCode}"); return null; } /// /// 从链路连接应答消息 /// /// /// 本条消息无需被通知方应答 public virtual JT809Response Msg0x9002(JT809Request request) { var jT809_0x9002 = request.Package.Bodies as JT809_0x9002; Logger.LogInformation($"从链路连接应答消息:{jT809_0x9002.Result.ToString()}-{jT809_0x9002.Result}"); return null; } /// /// 从链路注销应答消息 /// /// /// 本条消息无需被通知方应答 public virtual JT809Response Msg0x9004(JT809Request request) { Logger.LogInformation("从链路注销应答消息"); return null; } /// /// 从链路连接保持应答消息 /// /// /// 本条消息无需被通知方应答 public virtual JT809Response Msg0x9006(JT809Request request) { Logger.LogInformation("从链路连接保持应答消息"); return null; } /// /// 主链路动态信息交换消息 /// /// /// public virtual JT809Response Msg0x1200(JT809Request request) { return null; } } }