25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

112 satır
4.6 KiB

  1. using JTNE.Protocol.MessageBody;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using Xunit;
  6. using JTNE.Protocol.Extensions;
  7. using JTNE.Protocol.Formatters;
  8. using JTNE.Protocol.Attributes;
  9. namespace JTNE.Protocol.Test.MessageBody
  10. {
  11. public class JTNE_0x80Reply_CustomBodyTest
  12. {
  13. [Fact]
  14. public void Test1()
  15. {
  16. JTNEGlobalConfigs.Instance.Register_JTNE0x81CustomBody(0x80, typeof(JTNE_0x80Reply_0x80));
  17. JTNEGlobalConfigs.Instance.Register_JTNE0x81CustomBody(0x81, typeof(JTNE_0x80Reply_0x81));
  18. JTNEGlobalConfigs.Instance.Register_JTNE0x81CustomDepenedBody(0x81, 0x80);
  19. JTNE_0x80Reply jTNE_0x80Reply = new JTNE_0x80Reply();
  20. JTNE_0x81 jTNE_0X81 = new JTNE_0x81 {
  21. OperateTime= DateTime.Parse("2019-01-22 23:55:56"),
  22. ParamNum=2,
  23. ParamList = new List<JTNE_0x81_Body> {
  24. new JTNE_0x80Reply_0x80{
  25. ParamValue=6
  26. },
  27. new JTNE_0x80Reply_0x81{
  28. ParamLength=6,
  29. ParamValue=new byte[]{ 1,2,3,4,5,6 }
  30. }
  31. }
  32. };
  33. jTNE_0x80Reply.JTNE_Reply0x80 = jTNE_0X81;
  34. var hex = JTNESerializer.Serialize(jTNE_0x80Reply).ToHexString();
  35. Assert.Equal("13011617373802800681010203040506", hex);
  36. }
  37. [Fact]
  38. public void Test1_1()
  39. {
  40. JTNEGlobalConfigs.Instance.Register_JTNE0x81CustomBody(0x80, typeof(JTNE_0x80Reply_0x80));
  41. JTNEGlobalConfigs.Instance.Register_JTNE0x81CustomBody(0x81, typeof(JTNE_0x80Reply_0x81));
  42. JTNEGlobalConfigs.Instance.Register_JTNE0x81CustomDepenedBody(0x81, 0x80);
  43. var data = "13011617373802800681010203040506".ToHexBytes();
  44. JTNE_0x80Reply jTNE_0x80Reply = JTNESerializer.Deserialize<JTNE_0x80Reply>(data);
  45. Assert.Equal(DateTime.Parse("2019-01-22 23:55:56"), jTNE_0x80Reply.JTNE_Reply0x80.OperateTime);
  46. Assert.Equal(jTNE_0x80Reply.JTNE_Reply0x80.ParamList.Count, jTNE_0x80Reply.JTNE_Reply0x80.ParamNum);
  47. Assert.Equal(Newtonsoft.Json.JsonConvert.SerializeObject(new List<JTNE_0x81_Body> {
  48. new JTNE_0x80Reply_0x80{
  49. ParamValue=6
  50. },
  51. new JTNE_0x80Reply_0x81{
  52. ParamLength=6,
  53. ParamValue=new byte[]{ 1,2,3,4,5,6 }
  54. }
  55. }), Newtonsoft.Json.JsonConvert.SerializeObject(jTNE_0x80Reply.JTNE_Reply0x80.ParamList));
  56. }
  57. }
  58. [JTNEFormatter(typeof(JTNE_0x80Reply_0x80Formatter))]
  59. public class JTNE_0x80Reply_0x80 : JTNE_0x81_Body
  60. {
  61. public override byte ParamId { get; set; }= 0x80;
  62. public override byte ParamLength { get; set; } = 1;
  63. public byte ParamValue { get; set; }
  64. }
  65. [JTNEFormatter(typeof(JTNE_0x80Reply_0x81Formatter))]
  66. public class JTNE_0x80Reply_0x81 : JTNE_0x81_Body
  67. {
  68. public override byte ParamId { get; set; } = 0x81;
  69. public override byte ParamLength { get; set; }
  70. public byte[] ParamValue { get; set; }
  71. }
  72. public class JTNE_0x80Reply_0x80Formatter : IJTNEFormatter<JTNE_0x80Reply_0x80>
  73. {
  74. public JTNE_0x80Reply_0x80 Deserialize(ReadOnlySpan<byte> bytes, out int readSize)
  75. {
  76. int offset = 0;
  77. JTNE_0x80Reply_0x80 jTNE_0x80Reply_0x80 = new JTNE_0x80Reply_0x80();
  78. jTNE_0x80Reply_0x80.ParamValue = JTNEBinaryExtensions.ReadByteLittle(bytes, ref offset);
  79. readSize = offset;
  80. return jTNE_0x80Reply_0x80;
  81. }
  82. public int Serialize(ref byte[] bytes, int offset, JTNE_0x80Reply_0x80 value)
  83. {
  84. offset += JTNEBinaryExtensions.WriteByteLittle(bytes, offset, value.ParamValue);
  85. return offset;
  86. }
  87. }
  88. public class JTNE_0x80Reply_0x81Formatter : IJTNEFormatter<JTNE_0x80Reply_0x81>
  89. {
  90. public JTNE_0x80Reply_0x81 Deserialize(ReadOnlySpan<byte> bytes, out int readSize)
  91. {
  92. int offset = 0;
  93. JTNE_0x80Reply_0x81 jTNE_0x80Reply_0x80Reply = new JTNE_0x80Reply_0x81();
  94. jTNE_0x80Reply_0x80Reply.ParamValue = JTNEBinaryExtensions.ReadBytesLittle(bytes, ref offset);
  95. jTNE_0x80Reply_0x80Reply.ParamLength = (byte)bytes.Length;
  96. readSize = offset;
  97. return jTNE_0x80Reply_0x80Reply;
  98. }
  99. public int Serialize(ref byte[] bytes, int offset, JTNE_0x80Reply_0x81 value)
  100. {
  101. offset += JTNEBinaryExtensions.WriteBytesLittle(bytes, offset, value.ParamValue);
  102. return offset;
  103. }
  104. }
  105. }