You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

167 lines
6.6 KiB

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