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.

126 lines
4.5 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessageBody;
  4. using JT808.Protocol.Extensions;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Reflection;
  8. using System.Text;
  9. using Xunit;
  10. using JT808.Protocol.Formatters;
  11. using JT808.Protocol.MessagePack;
  12. using JT808.Protocol.Attributes;
  13. using JT808.Protocol.Internal;
  14. namespace JT808.Protocol.Test.Simples
  15. {
  16. public class Demo6
  17. {
  18. public JT808Serializer JT808Serializer;
  19. public Demo6()
  20. {
  21. IJT808Config jT808Config = new DefaultGlobalConfig();
  22. jT808Config.Register(Assembly.GetExecutingAssembly());
  23. //根据不同的设备终端号,添加自定义消息Id
  24. jT808Config.MsgIdFactory.CustomSetMap<DT1Demo6>(0x91, "1234567891");
  25. jT808Config.MsgIdFactory.CustomSetMap<DT2Demo6>(0x91, "1234567892");
  26. JT808Serializer = new JT808Serializer(jT808Config);
  27. }
  28. /// <summary>
  29. /// 处理多设备多协议消息Id冲突
  30. /// </summary>
  31. [Fact]
  32. public void Test1()
  33. {
  34. JT808Package dt1Package = new JT808Package();
  35. dt1Package.Header = new JT808Header
  36. {
  37. MsgId = 0x91,
  38. MsgNum = 126,
  39. TerminalPhoneNo = "1234567891"
  40. };
  41. DT1Demo6 dT1Demo6 = new DT1Demo6();
  42. dT1Demo6.Age1 = 18;
  43. dT1Demo6.Sex1 = 2;
  44. dt1Package.Bodies = dT1Demo6;
  45. JT808Package dt2Package = new JT808Package();
  46. dt2Package.Header = new JT808Header
  47. {
  48. MsgId = 0x91,
  49. MsgNum = 126,
  50. TerminalPhoneNo = "1234567892"
  51. };
  52. DT2Demo6 dT2Demo6 = new DT2Demo6();
  53. dT2Demo6.Age2 = 18;
  54. dT2Demo6.Sex2 = 2;
  55. dt2Package.Bodies = dT2Demo6;
  56. byte[] dt1Data = JT808Serializer.Serialize(dt1Package);
  57. var dt1Hex = dt1Data.ToHexString();
  58. //7E00910003001234567891007D02020012657E
  59. byte[] dt2Data = JT808Serializer.Serialize(dt2Package);
  60. var dt2Hex = dt2Data.ToHexString();
  61. //7E00910003001234567892007D02020012667E
  62. Assert.Equal("7E00910003001234567891007D02020012657E", dt1Hex);
  63. Assert.Equal("7E00910003001234567892007D02020012667E", dt2Hex);
  64. JT808Package dt1Package1 = JT808Serializer.Deserialize(dt1Data);
  65. Assert.Equal(0x91, dt1Package1.Header.MsgId);
  66. Assert.Equal(126, dt1Package1.Header.MsgNum);
  67. Assert.Equal("1234567891", dt1Package1.Header.TerminalPhoneNo);
  68. DT1Demo6 dt1Bodies = (DT1Demo6)dt1Package1.Bodies;
  69. Assert.Equal((ushort)18, dt1Bodies.Age1);
  70. Assert.Equal(2, dt1Bodies.Sex1);
  71. JT808Package dt2Package1 = JT808Serializer.Deserialize(dt2Data);
  72. Assert.Equal(0x91, dt2Package1.Header.MsgId);
  73. Assert.Equal(126, dt2Package1.Header.MsgNum);
  74. Assert.Equal("1234567892", dt2Package1.Header.TerminalPhoneNo);
  75. DT2Demo6 dt2Bodies = (DT2Demo6)dt2Package1.Bodies;
  76. Assert.Equal((ushort)18, dt2Bodies.Age2);
  77. Assert.Equal(2, dt2Bodies.Sex2);
  78. }
  79. }
  80. public class DT1Demo6 : JT808Bodies, IJT808MessagePackFormatter<DT1Demo6>
  81. {
  82. public byte Sex1 { get; set; }
  83. public ushort Age1 { get; set; }
  84. public DT1Demo6 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  85. {
  86. DT1Demo6 dT1Demo6 = new DT1Demo6();
  87. dT1Demo6.Sex1 = reader.ReadByte();
  88. dT1Demo6.Age1 = reader.ReadUInt16();
  89. return dT1Demo6;
  90. }
  91. public void Serialize(ref JT808MessagePackWriter writer, DT1Demo6 value, IJT808Config config)
  92. {
  93. writer.WriteByte(value.Sex1);
  94. writer.WriteUInt16(value.Age1);
  95. }
  96. }
  97. public class DT2Demo6 : JT808Bodies, IJT808MessagePackFormatter<DT2Demo6>
  98. {
  99. public byte Sex2 { get; set; }
  100. public ushort Age2 { get; set; }
  101. public DT2Demo6 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  102. {
  103. DT2Demo6 dT2Demo6 = new DT2Demo6();
  104. dT2Demo6.Sex2 = reader.ReadByte();
  105. dT2Demo6.Age2 = reader.ReadUInt16();
  106. return dT2Demo6;
  107. }
  108. public void Serialize(ref JT808MessagePackWriter writer, DT2Demo6 value, IJT808Config config)
  109. {
  110. writer.WriteByte(value.Sex2);
  111. writer.WriteUInt16(value.Age2);
  112. }
  113. }
  114. }