Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

154 righe
6.2 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using JT808.DotNetty.Core.Metadata;
  4. using JT808.Protocol.Enums;
  5. using JT808.Protocol.Extensions;
  6. using JT808.Protocol.MessageBody;
  7. namespace JT808.DotNetty.Core.Handlers
  8. {
  9. /// <summary>
  10. /// 基于Udp模式的抽象消息处理业务
  11. /// 自定义消息处理业务
  12. /// 注意:
  13. /// 1.ConfigureServices:
  14. /// services.Replace(new ServiceDescriptor(typeof(JT808MsgIdUdpHandlerBase),typeof(JT808MsgIdCustomUdpHandlerImpl),ServiceLifetime.Singleton));
  15. /// 2.解析具体的消息体,具体消息调用具体的JT808Serializer.Deserialize<T>
  16. /// </summary>
  17. public abstract class JT808MsgIdUdpHandlerBase
  18. {
  19. protected JT808UdpSessionManager sessionManager { get; }
  20. /// <summary>
  21. /// 初始化消息处理业务
  22. /// </summary>
  23. protected JT808MsgIdUdpHandlerBase(JT808UdpSessionManager sessionManager)
  24. {
  25. this.sessionManager = sessionManager;
  26. HandlerDict = new Dictionary<ushort, Func<JT808Request, JT808Response>>
  27. {
  28. {JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001},
  29. {JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102},
  30. {JT808MsgId.终端心跳.ToUInt16Value(), Msg0x0002},
  31. {JT808MsgId.终端注销.ToUInt16Value(), Msg0x0003},
  32. {JT808MsgId.终端注册.ToUInt16Value(), Msg0x0100},
  33. {JT808MsgId.位置信息汇报.ToUInt16Value(),Msg0x0200 },
  34. {JT808MsgId.定位数据批量上传.ToUInt16Value(),Msg0x0704 },
  35. {JT808MsgId.数据上行透传.ToUInt16Value(),Msg0x0900 }
  36. };
  37. }
  38. public Dictionary<ushort, Func<JT808Request, JT808Response>> HandlerDict { get; protected set; }
  39. /// <summary>
  40. /// 终端通用应答
  41. /// 平台无需回复
  42. /// 实现自己的业务
  43. /// </summary>
  44. /// <param name="request"></param>
  45. /// <returns></returns>
  46. public virtual JT808Response Msg0x0001(JT808Request request)
  47. {
  48. return null;
  49. }
  50. /// <summary>
  51. /// 终端心跳
  52. /// </summary>
  53. /// <param name="request"></param>
  54. /// <returns></returns>
  55. public virtual JT808Response Msg0x0002(JT808Request request)
  56. {
  57. sessionManager.Heartbeat(request.Package.Header.TerminalPhoneNo);
  58. return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
  59. {
  60. MsgId = request.Package.Header.MsgId,
  61. JT808PlatformResult = JT808PlatformResult.成功,
  62. MsgNum = request.Package.Header.MsgNum
  63. }));
  64. }
  65. /// <summary>
  66. /// 终端注销
  67. /// </summary>
  68. /// <param name="request"></param>
  69. /// <returns></returns>
  70. public virtual JT808Response Msg0x0003(JT808Request request)
  71. {
  72. return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
  73. {
  74. MsgId = request.Package.Header.MsgId,
  75. JT808PlatformResult = JT808PlatformResult.成功,
  76. MsgNum = request.Package.Header.MsgNum
  77. }));
  78. }
  79. /// <summary>
  80. /// 终端注册
  81. /// </summary>
  82. /// <param name="request"></param>
  83. /// <returns></returns>
  84. public virtual JT808Response Msg0x0100(JT808Request request)
  85. {
  86. return new JT808Response(JT808MsgId.终端注册应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8100()
  87. {
  88. Code = "J" + request.Package.Header.TerminalPhoneNo,
  89. JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功,
  90. MsgNum = request.Package.Header.MsgNum
  91. }));
  92. }
  93. /// <summary>
  94. /// 终端鉴权
  95. /// </summary>
  96. /// <param name="request"></param>
  97. /// <returns></returns>
  98. public virtual JT808Response Msg0x0102(JT808Request request)
  99. {
  100. return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
  101. {
  102. MsgId = request.Package.Header.MsgId,
  103. JT808PlatformResult = JT808PlatformResult.成功,
  104. MsgNum = request.Package.Header.MsgNum
  105. }));
  106. }
  107. /// <summary>
  108. /// 位置信息汇报
  109. /// </summary>
  110. /// <param name="reqJT808Package"></param>
  111. /// <param name="ctx"></param>
  112. /// <returns></returns>
  113. public virtual JT808Response Msg0x0200(JT808Request request)
  114. {
  115. return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
  116. {
  117. MsgId = request.Package.Header.MsgId,
  118. JT808PlatformResult = JT808PlatformResult.成功,
  119. MsgNum = request.Package.Header.MsgNum
  120. }));
  121. }
  122. /// <summary>
  123. /// 定位数据批量上传
  124. /// </summary>
  125. /// <param name="request"></param>
  126. /// <returns></returns>
  127. public virtual JT808Response Msg0x0704(JT808Request request)
  128. {
  129. return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
  130. {
  131. MsgId =request.Package.Header.MsgId,
  132. JT808PlatformResult = JT808PlatformResult.成功,
  133. MsgNum = request.Package.Header.MsgNum
  134. }));
  135. }
  136. /// <summary>
  137. /// 数据上行透传
  138. /// </summary>
  139. /// <param name="request"></param>
  140. /// <returns></returns>
  141. public virtual JT808Response Msg0x0900(JT808Request request)
  142. {
  143. return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
  144. {
  145. MsgId =request.Package.Header.MsgId,
  146. JT808PlatformResult = JT808PlatformResult.成功,
  147. MsgNum = request.Package.Header.MsgNum
  148. }));
  149. }
  150. }
  151. }