using System; using System.Collections.Generic; using JT808.DotNetty.Core.Metadata; using JT808.Protocol.Enums; using JT808.Protocol.Extensions; using JT808.Protocol.MessageBody; namespace JT808.DotNetty.Core.Handlers { /// /// 基于Udp模式的抽象消息处理业务 /// 自定义消息处理业务 /// 注意: /// 1.ConfigureServices: /// services.Replace(new ServiceDescriptor(typeof(JT808MsgIdUdpHandlerBase),typeof(JT808MsgIdCustomUdpHandlerImpl),ServiceLifetime.Singleton)); /// 2.解析具体的消息体,具体消息调用具体的JT808Serializer.Deserialize /// public abstract class JT808MsgIdUdpHandlerBase { protected JT808UdpSessionManager sessionManager { get; } /// /// 初始化消息处理业务 /// protected JT808MsgIdUdpHandlerBase(JT808UdpSessionManager sessionManager) { this.sessionManager = sessionManager; HandlerDict = new Dictionary> { {JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001}, {JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102}, {JT808MsgId.终端心跳.ToUInt16Value(), Msg0x0002}, {JT808MsgId.终端注销.ToUInt16Value(), Msg0x0003}, {JT808MsgId.终端注册.ToUInt16Value(), Msg0x0100}, {JT808MsgId.位置信息汇报.ToUInt16Value(),Msg0x0200 }, {JT808MsgId.定位数据批量上传.ToUInt16Value(),Msg0x0704 }, {JT808MsgId.数据上行透传.ToUInt16Value(),Msg0x0900 } }; } public Dictionary> HandlerDict { get; protected set; } /// /// 终端通用应答 /// 平台无需回复 /// 实现自己的业务 /// /// /// public virtual JT808Response Msg0x0001(JT808Request request) { return null; } /// /// 终端心跳 /// /// /// public virtual JT808Response Msg0x0002(JT808Request request) { sessionManager.Heartbeat(request.Package.Header.TerminalPhoneNo); return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { MsgId = request.Package.Header.MsgId, JT808PlatformResult = JT808PlatformResult.成功, MsgNum = request.Package.Header.MsgNum })); } /// /// 终端注销 /// /// /// public virtual JT808Response Msg0x0003(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { MsgId = request.Package.Header.MsgId, JT808PlatformResult = JT808PlatformResult.成功, MsgNum = request.Package.Header.MsgNum })); } /// /// 终端注册 /// /// /// public virtual JT808Response Msg0x0100(JT808Request request) { return new JT808Response(JT808MsgId.终端注册应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8100() { Code = "J" + request.Package.Header.TerminalPhoneNo, JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, MsgNum = request.Package.Header.MsgNum })); } /// /// 终端鉴权 /// /// /// public virtual JT808Response Msg0x0102(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { MsgId = request.Package.Header.MsgId, JT808PlatformResult = JT808PlatformResult.成功, MsgNum = request.Package.Header.MsgNum })); } /// /// 位置信息汇报 /// /// /// /// public virtual JT808Response Msg0x0200(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { MsgId = request.Package.Header.MsgId, JT808PlatformResult = JT808PlatformResult.成功, MsgNum = request.Package.Header.MsgNum })); } /// /// 定位数据批量上传 /// /// /// public virtual JT808Response Msg0x0704(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { MsgId =request.Package.Header.MsgId, JT808PlatformResult = JT808PlatformResult.成功, MsgNum = request.Package.Header.MsgNum })); } /// /// 数据上行透传 /// /// /// public virtual JT808Response Msg0x0900(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { MsgId =request.Package.Header.MsgId, JT808PlatformResult = JT808PlatformResult.成功, MsgNum = request.Package.Header.MsgNum })); } } }