-
Notifications
You must be signed in to change notification settings - Fork 249
/
Demo13.cs
166 lines (159 loc) · 6.45 KB
/
Demo13.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
using JT808.Protocol.Enums;
using JT808.Protocol.Interfaces;
using JT808.Protocol.Internal;
using JT808.Protocol.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
using JT808.Protocol.MessageBody;
using JT808.Protocol.Formatters;
using JT808.Protocol.MessagePack;
using System.Text.Json;
using JT808.Protocol.MessageBody.CarDVR;
using System.Linq;
using JT808.Protocol.Test.JT808LocationAttach;
using static JT808.Protocol.MessageBody.JT808_0x8105;
using System.Buffers.Binary;
using Newtonsoft.Json;
namespace JT808.Protocol.Test.Simples
{
public class Demo13
{
JT808Serializer JT808Serializer;
public Demo13()
{
IServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddJT808Configure(new DefaultGlobalConfig("replace"));
//通常在startup中使用app的Use进行扩展
//The Use of the app is typically extended in startup
IServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider();
Use(serviceProvider);
}
void Use(IServiceProvider serviceProvider)
{
IJT808Config jT808Config = serviceProvider.GetRequiredService<DefaultGlobalConfig>();
//替换原有消息存在的BUG
//Replace the bugs in the original message
jT808Config.ReplaceMsgId<JT808_0x0001, JT808_0x0001_Replace>();
JT808Serializer = jT808Config.GetSerializer();
}
[Fact]
public void Test1()
{
JT808Package jT808Package = new JT808Package
{
Header = new JT808Header
{
MsgId = Enums.JT808MsgId._0x0001.ToUInt16Value(),
ManualMsgNum = 1203,
TerminalPhoneNo = "012345678900",
},
Bodies = new JT808_0x0001_Replace
{
ReplyMsgId = Enums.JT808MsgId._0x0002.ToUInt16Value(),
ReplyMsgNum = 1000,
TerminalResult = Enums.JT808TerminalResult.Success,
Test=168
}
};
var hex = JT808Serializer.Serialize(jT808Package).ToHexString();
Assert.Equal("7E0001000701234567890004B303E800020000A8797E", hex);
}
[Fact]
public void Test2()
{
var bytes = "7E0001000701234567890004B303E800020000A8797E".ToHexBytes();
JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes);
Assert.Equal(Enums.JT808MsgId._0x0001.ToValue(), jT808Package.Header.MsgId);
Assert.Equal(1203, jT808Package.Header.MsgNum);
JT808_0x0001_Replace JT808Bodies = (JT808_0x0001_Replace)jT808Package.Bodies;
Assert.Equal(Enums.JT808MsgId._0x0002.ToUInt16Value(), JT808Bodies.ReplyMsgId);
Assert.Equal(1000, JT808Bodies.ReplyMsgNum);
Assert.Equal(Enums.JT808TerminalResult.Success, JT808Bodies.TerminalResult);
Assert.Equal(168u, JT808Bodies.Test);
}
}
/// <summary>
/// 终端通用应答_替换原有的消息,来解决库现有的bug
/// The terminal general answer _ replaces the original message to solve the existing library bug
/// </summary>
public class JT808_0x0001_Replace : JT808MessagePackFormatter<JT808_0x0001_Replace>, JT808Bodies, IJT808Analyze
{
/// <summary>
/// 0x0001
/// </summary>
public ushort MsgId => 0x0001;
public bool SkipSerialization => false;
/// <summary>
/// 终端通用应答
/// </summary>
public string Description => "终端通用应答";
/// <summary>
/// 应答流水号
/// 对应的平台消息的流水号
/// </summary>
public ushort ReplyMsgNum { get; set; }
/// <summary>
/// 应答 ID
/// 对应的平台消息的 ID
/// <see cref="JT808.Protocol.Enums.JT808MsgId"/>
/// </summary>
public ushort ReplyMsgId { get; set; }
/// <summary>
/// 结果
/// 0:成功/确认;1:失败;2:消息有误;3:不支持
/// </summary>
public JT808TerminalResult TerminalResult { get; set; }
/// <summary>
/// 测试
/// </summary>
public ushort Test { get; set; }
/// <summary>
///
/// </summary>
/// <param name="reader"></param>
/// <param name="config"></param>
/// <returns></returns>
public override JT808_0x0001_Replace Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x0001_Replace jT808_0X0001 = new JT808_0x0001_Replace();
jT808_0X0001.ReplyMsgNum = reader.ReadUInt16();
jT808_0X0001.ReplyMsgId = reader.ReadUInt16();
jT808_0X0001.TerminalResult = (JT808TerminalResult)reader.ReadByte();
jT808_0X0001.Test = reader.ReadUInt16();
return jT808_0X0001;
}
/// <summary>
///
/// </summary>
/// <param name="writer"></param>
/// <param name="value"></param>
/// <param name="config"></param>
public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x0001_Replace value, IJT808Config config)
{
writer.WriteUInt16(value.ReplyMsgNum);
writer.WriteUInt16(value.ReplyMsgId);
writer.WriteByte((byte)value.TerminalResult);
writer.WriteUInt16(value.Test);
}
/// <summary>
///
/// </summary>
/// <param name="reader"></param>
/// <param name="writer"></param>
/// <param name="config"></param>
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
var replyMsgNum = reader.ReadUInt16();
var replyMsgId = reader.ReadUInt16();
var terminalResult = reader.ReadByte();
var test = reader.ReadUInt16();
writer.WriteNumber($"[{replyMsgNum.ReadNumber()}]应答流水号", replyMsgNum);
writer.WriteNumber($"[{replyMsgId.ReadNumber()}]应答消息Id", replyMsgId);
writer.WriteString($"[{terminalResult.ReadNumber()}]结果", ((JT808TerminalResult)terminalResult).ToString());
writer.WriteNumber($"[{test.ReadNumber()}]测试", test);
}
}
}