protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List <object> output) { string msg = string.Empty; byte[] buffer = null; try { buffer = new byte[input.Capacity + 2]; input.ReadBytes(buffer, 1, input.Capacity); buffer[0] = JT809Package.BEGINFLAG; buffer[input.Capacity + 1] = JT809Package.ENDFLAG; output.Add(JT809Serializer.Deserialize(buffer)); MsgSuccessCounter.Increment(); if (logger.IsEnabled(LogLevel.Debug)) { msg = ByteBufferUtil.HexDump(buffer); logger.LogDebug("accept package <<<" + msg); logger.LogDebug("accept package success count<<<" + MsgSuccessCounter.Count.ToString()); } } catch (JT809Exception ex) { MsgFailCounter.Increment(); logger.LogError("accept package fail count<<<" + MsgFailCounter.Count.ToString()); logger.LogError(ex, $"{ex.ErrorCode.ToString()}accept msg<<<{msg}"); return; } catch (Exception ex) { MsgFailCounter.Increment(); logger.LogError("accept package fail count<<<" + MsgFailCounter.Count.ToString()); logger.LogError(ex, "accept msg<<<" + msg); return; } }
public void Test2() { var bytes = "5B 00 00 00 92 00 00 06 82 94 00 01 33 EF B8 01 00 00 00 00 00 27 0F D4 C1 41 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 02 94 01 00 00 00 5C 01 00 02 00 00 00 00 5A 01 AC 3F 40 12 3F FA A1 00 00 00 00 5A 01 AC 4D 50 03 73 6D 61 6C 6C 63 68 69 00 00 00 00 00 00 00 00 31 32 33 34 35 36 37 38 39 30 31 00 00 00 00 00 00 00 00 00 31 32 33 34 35 36 40 71 71 2E 63 6F 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BA D8 5D".ToHexBytes(); JT809Package jT809Package = JT809Serializer.Deserialize(bytes); Assert.Equal((uint)146, jT809Package.Header.MsgLength); Assert.Equal((uint)1666, jT809Package.Header.MsgSN); Assert.Equal((uint)9999, jT809Package.Header.EncryptKey); Assert.Equal(JT809Header_Encrypt.None, jT809Package.Header.EncryptFlag); Assert.Equal((uint)20180920, jT809Package.Header.MsgGNSSCENTERID); Assert.Equal(JT809BusinessType.从链路报警信息交互消息, jT809Package.Header.BusinessType); Assert.Equal(new JT809Header_Version().ToString(), jT809Package.Header.Version.ToString()); JT809_0x9400 jT809_0X400 = (JT809_0x9400)jT809Package.Bodies; Assert.Equal("粤A12345", jT809_0X400.VehicleNo); Assert.Equal(JT809VehicleColorType.黄色, jT809_0X400.VehicleColor); Assert.Equal(JT809SubBusinessType.报警督办请求, jT809_0X400.SubBusinessType); Assert.Equal((uint)92, jT809_0X400.DataLength); JT809_0x9400_0x9401 jT809_0x9400_0x9401 = (JT809_0x9400_0x9401)jT809_0X400.SubBodies; Assert.Equal(JT809WarnSrc.车载终端, jT809_0x9400_0x9401.WarnSrc); Assert.Equal(JT809WarnType.疲劳驾驶报警, jT809_0x9400_0x9401.WarnType); Assert.Equal(DateTime.Parse("2018-09-27 10:24:00"), jT809_0x9400_0x9401.WarnTime); Assert.Equal("123FFAA1", jT809_0x9400_0x9401.SupervisionID); Assert.Equal(DateTime.Parse("2018-09-27 11:24:00"), jT809_0x9400_0x9401.SupervisionEndTime); Assert.Equal(3, jT809_0x9400_0x9401.SupervisionLevel); Assert.Equal("smallchi", jT809_0x9400_0x9401.Supervisor); Assert.Equal("12345678901", jT809_0x9400_0x9401.SupervisorTel); Assert.Equal("*****@*****.**", jT809_0x9400_0x9401.SupervisorEmail); }
public void Test2() { var bytes = "00".ToHexBytes(); JT809_0x9002 jT809_0X9002 = JT809Serializer.Deserialize <JT809_0x9002>(bytes); Assert.Equal(JT809_0x9002_Result.成功, jT809_0X9002.Result); }
public void Test2() { var bytes = "000004D2".ToHexBytes(); JT809_0x1300_0x1302 jT809_0x1300_0x1302 = JT809Serializer.Deserialize <JT809_0x1300_0x1302>(bytes); Assert.Equal((uint)1234, jT809_0x1300_0x1302.InfoID); }
public void Test2() { var bytes = "02".ToHexBytes(); JT809_0x9200_0x9206 jT809_0X9200_0X9206 = JT809Serializer.Deserialize <JT809_0x9200_0x9206>(bytes); Assert.Equal(JT809_0x9206_ReasonCode.紧急监控完成, jT809_0X9200_0X9206.ReasonCode); }
public void Test2() { var bytes = "B3B5C1BED0C5CFA2".ToHexBytes(); JT809_0x9200_0x9204 jT809_0X9200_0X9204 = JT809Serializer.Deserialize <JT809_0x9200_0x9204>(bytes); Assert.Equal("车辆信息", jT809_0X9200_0X9204.CarInfo); }
public void Test2() { var bytes = "01 00 13 07 07 DC 0F 0F 0F 07 EF 4D 80 01 70 18 40 00 35 00 2D 00 00 04 D2 00 2D 00 2D 00 00 00 01 00 00 00 01 7B 00 00 00 00 01 01".ToHexBytes(); JT809_0x1500_0x1502 jT809_0x1500_0x1502 = JT809Serializer.Deserialize <JT809_0x1500_0x1502>(bytes); Assert.Equal(JT809_0x1502_PhotoRspFlag.完成拍照, jT809_0x1500_0x1502.PhotoRspFlag); Assert.Equal(JT809_VehiclePositionEncrypt.未加密, jT809_0x1500_0x1502.VehiclePosition.Encrypt); Assert.Equal(19, jT809_0x1500_0x1502.VehiclePosition.Day); Assert.Equal(7, jT809_0x1500_0x1502.VehiclePosition.Month); Assert.Equal(2012, jT809_0x1500_0x1502.VehiclePosition.Year); Assert.Equal(15, jT809_0x1500_0x1502.VehiclePosition.Hour); Assert.Equal(15, jT809_0x1500_0x1502.VehiclePosition.Minute); Assert.Equal(15, jT809_0x1500_0x1502.VehiclePosition.Second); Assert.Equal((uint)133123456, jT809_0x1500_0x1502.VehiclePosition.Lon); Assert.Equal((uint)24123456, jT809_0x1500_0x1502.VehiclePosition.Lat); Assert.Equal((ushort)53, jT809_0x1500_0x1502.VehiclePosition.Vec1); Assert.Equal((ushort)45, jT809_0x1500_0x1502.VehiclePosition.Vec2); Assert.Equal((uint)1234, jT809_0x1500_0x1502.VehiclePosition.Vec3); Assert.Equal((ushort)45, jT809_0x1500_0x1502.VehiclePosition.Direction); Assert.Equal((ushort)45, jT809_0x1500_0x1502.VehiclePosition.Altitude); Assert.Equal((uint)1, jT809_0x1500_0x1502.VehiclePosition.State); Assert.Equal((uint)1, jT809_0x1500_0x1502.VehiclePosition.Alarm); Assert.Equal(123, jT809_0x1500_0x1502.LensID); Assert.Equal(1, jT809_0x1500_0x1502.SizeType); Assert.Equal(1, jT809_0x1500_0x1502.Type); }
public void Test2() { var bytes = "00".ToHexBytes(); JT809_0x9007 jT809_0X9007 = JT809Serializer.Deserialize <JT809_0x9007>(bytes); Assert.Equal(JT809Enums.JT809_0x9007_ReasonCode.无法连接下级平台指定的服务IP与端口, jT809_0X9007.ReasonCode); }
public void Test2() { var bytes = "00".ToHexBytes(); JT809_0x9200_0x9209 jT809_0X9200_0X9209 = JT809Serializer.Deserialize <JT809_0x9200_0x9209>(bytes); Assert.Equal(JT809_0x9209_Result.成功_上级平台即刻补发, jT809_0X9200_0X9209.Result); }
public void Test1() { JT809_0x1500_0x1502 jT809_0x1500_0x1502 = new JT809_0x1500_0x1502 { PhotoRspFlag = JT809_0x1502_PhotoRspFlag.完成拍照, VehiclePosition = new JT809VehiclePositionProperties { Encrypt = JT809_VehiclePositionEncrypt.未加密, Day = 19, Month = 7, Year = 2012, Hour = 15, Minute = 15, Second = 15, Lon = 133123456, Lat = 24123456, Vec1 = 53, Vec2 = 45, Vec3 = 1234, Direction = 45, Altitude = 45, State = 1, Alarm = 1 }, LensID = 123, SizeType = 1, Type = 1, }; var hex = JT809Serializer.Serialize(jT809_0x1500_0x1502).ToHexString(); //"01 00 13 07 07 DC 0F 0F 0F 07 EF 4D 80 01 70 18 40 00 35 00 2D 00 00 04 D2 00 2D 00 2D 00 00 00 01 00 00 00 01 7B 00 00 00 00 01 01" Assert.Equal("0100130707DC0F0F0F07EF4D80017018400035002D000004D2002D002D00000001000000017B000000000101", hex); }
public void Test2() { var bytes = "00".ToHexBytes(); JT809_0x9200_0x9207 jT809_0X9200_0X9207 = JT809Serializer.Deserialize <JT809_0x9200_0x9207>(bytes); Assert.Equal(JT809_0x9207_Result.申请成功, jT809_0X9200_0X9207.Result); }
public void Test2() { var bytes = "00".ToHexBytes(); JT809_0x1008 jT809_0X1008 = JT809Serializer.Deserialize <JT809_0x1008>(bytes); Assert.Equal(JT809Enums.JT809_0x1008_ReasonCode.网关重启, jT809_0X1008.ReasonCode); }
protected override void ChannelRead0(IChannelHandlerContext ctx, byte[] msg) { try { JT809Package jT809Package = JT809Serializer.Deserialize(msg); jT809AtomicCounterService.MsgSuccessIncrement(); if (logger.IsEnabled(LogLevel.Debug)) { logger.LogDebug("accept package success count<<<" + jT809AtomicCounterService.MsgSuccessCount.ToString()); } Func <JT809Request, JT809Response> handlerFunc; if (handler.HandlerDict.TryGetValue(jT809Package.Header.BusinessType, out handlerFunc)) { JT809Response jT808Response = handlerFunc(new JT809Request(jT809Package, msg)); if (jT808Response != null) { ctx.WriteAndFlushAsync(jT808Response); } } } catch (JT809Exception ex) { jT809AtomicCounterService.MsgFailIncrement(); logger.LogError("accept package fail count<<<" + jT809AtomicCounterService.MsgFailCount.ToString()); logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg)); } catch (Exception ex) { jT809AtomicCounterService.MsgFailIncrement(); logger.LogError("accept package fail count<<<" + jT809AtomicCounterService.MsgFailCount.ToString()); logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg)); } }
public void Test2() { var bytes = "01".ToHexBytes(); JT809_0x9008 jT809_0X9008 = JT809Serializer.Deserialize <JT809_0x9008>(bytes); Assert.Equal(JT809_0x9008_ReasonCode.其它原因, jT809_0X9008.ReasonCode); }
public JT809SubordinateClient( IServiceProvider provider, ILoggerFactory loggerFactory, IJT809SubordinateLinkNotifyService subordinateLinkNotifyService, IJT809VerifyCodeGenerator verifyCodeGenerator, JT809Serializer serializer) { this.serviceProvider = provider; this.verifyCodeGenerator = verifyCodeGenerator; this.serializer = serializer; this.logger = loggerFactory.CreateLogger <JT809SubordinateClient>(); this.subordinateLinkNotifyService = subordinateLinkNotifyService; group = new MultithreadEventLoopGroup(); bootstrap = new Bootstrap(); bootstrap.Group(group) .Channel <TcpSocketChannel>() .Option(ChannelOption.TcpNodelay, true) .Handler(new ActionChannelInitializer <ISocketChannel>(channel => { IChannelPipeline pipeline = channel.Pipeline; //下级平台1分钟发送心跳 //上级平台是3分钟没有发送就断开连接 using var scope = serviceProvider.CreateScope(); pipeline.AddLast("jt809SubClientBuffer", new DelimiterBasedFrameDecoder(int.MaxValue, Unpooled.CopiedBuffer(new byte[] { JT809Package.BEGINFLAG }), Unpooled.CopiedBuffer(new byte[] { JT809Package.ENDFLAG }))); pipeline.AddLast("jt809SubClientSystemIdleState", new IdleStateHandler(180, 60, 200)); pipeline.AddLast("jt809SubClientEncode", scope.ServiceProvider.GetRequiredService <JT809Encoder>()); pipeline.AddLast("jt809SubClientDecode", scope.ServiceProvider.GetRequiredService <JT809Decoder>()); pipeline.AddLast("jt809SubClientConnection", scope.ServiceProvider.GetRequiredService <JT809SubordinateClientConnectionHandler>()); pipeline.AddLast("jt809SubClientServer", scope.ServiceProvider.GetRequiredService <JT809SubordinateClientHandler>()); })); }
public void Test1() { JT809_0x1001 jT809_0X1001 = new JT809_0x1001(); jT809_0X1001.UserId = 20180920; jT809_0X1001.Password = "******"; jT809_0X1001.DownLinkIP = "127.0.0.1"; jT809_0X1001.DownLinkPort = 809; var hex = JT809Serializer.Serialize(jT809_0X1001).ToHexString(); Assert.Equal("0133EFB832303138303932303132372E302E302E3100000000000000000000000000000000000000000000000329", hex); //5B //00 00 00 48 //00 00 00 85 //10 01 //01 33 53 D5 //01 00 00 //00 //00 00 27 0F //01 33 EF B8 //32 30 31 38 30 39 32 30 //31 32 37 2E 30 2E 30 2E 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //03 29 //C3 0D //5D //"01 33 EF B8 //32 30 31 38 30 39 32 30 //31 32 37 2E 30 2E 30 2E 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //03 29" }
public ActionResult <JTResultDto> Parse809([FromBody] JT809RequestDto parameter) { JTResultDto jTResultDto = new JTResultDto(); try { if (parameter.IsEncrypt) { IJT809Config jt809ConfigInternal = new JT809Config(Guid.NewGuid().ToString()); jt809ConfigInternal.EncryptOptions = parameter.EncryptOptions; JT809Serializer jT809SerializerInternal = new JT809Serializer(jt809ConfigInternal); jTResultDto.Data = jT809SerializerInternal.Deserialize(parameter.HexData.ToHexBytes()); } else { jTResultDto.Data = jT809Serializer.Deserialize(parameter.HexData.ToHexBytes()); } jTResultDto.Code = 200; } catch (JT809Exception ex) { jTResultDto.Code = 500; jTResultDto.Message = $"{ex.ErrorCode}-{ex.Message}"; } catch (Exception ex) { jTResultDto.Code = 500; jTResultDto.Message = ex.Message; } return(jTResultDto); }
public void Test2() { var bytes = "00 00 B1 8E".ToHexBytes(); JT809_0x9001 jT809_0X9001 = JT809Serializer.Deserialize <JT809_0x9001>(bytes); Assert.Equal((uint)45454, jT809_0X9001.VerifyCode); }
public void Test2() { var bytes = "01".ToHexBytes(); JT809_0x1500_0x1505 jT809_0X1500_0X1505 = JT809Serializer.Deserialize <JT809_0x1500_0x1505>(bytes); Assert.Equal(JT809_0x1505_Result.无该车辆, jT809_0X1500_0X1505.Result); }
public void Test2() { var bytes = "02".ToHexBytes(); JT809_0x9200_0x9208 jT809_0X9200_0X9208 = JT809Serializer.Deserialize <JT809_0x9200_0x9208>(bytes); Assert.Equal(JT809_0x9208_Result.其它, jT809_0X9200_0X9208.Result); }
public void Test2() { var bytes = "736D616C6C636869".ToHexBytes(); JT809_0x1600_0x1601 jT809_0x1600_0x1601 = JT809Serializer.Deserialize <JT809_0x1600_0x1601>(bytes); Assert.Equal("smallchi", jT809_0x1600_0x1601.CarInfo); }
public JT809Encoder( IJT809Config jT809Config, ILoggerFactory loggerFactory) { JT809Serializer = jT809Config.GetSerializer(); logger = loggerFactory.CreateLogger <JT809Encoder>(); }
public void JT809_0x9400_0x9401_Package_Deserialize_Test() { for (int i = 0; i < N; i++) { var result = JT809Serializer.Deserialize(bytes); } }
public void Test3() { JT809Serializer JT809SerializerTest3 = new JT809Serializer(); JT809Package jT809Package = JT809BusinessType.从链路报警信息交互消息.Create(new JT809_0x9400 { VehicleNo = "粤A12345", VehicleColor = JT809VehicleColorType.黄色, SubBusinessType = JT809SubBusinessType.报警督办请求.ToUInt16Value(), SubBodies = new JT809_0x9400_0x9401 { WarnSrc = JT809WarnSrc.车载终端, WarnType = JT809WarnType.疲劳驾驶报警.ToUInt16Value(), WarnTime = DateTime.Parse("2018-09-27 10:24:00"), SupervisionID = "123FFAA1", SupervisionEndTime = DateTime.Parse("2018-09-27 11:24:00"), SupervisionLevel = 3, Supervisor = "smallchi", SupervisorTel = "12345678901", SupervisorEmail = "*****@*****.**" } }); jT809Package.Header.MsgSN = 1666; jT809Package.Header.EncryptKey = 9999; jT809Package.Header.MsgGNSSCENTERID = 20180920; var hex = JT809SerializerTest3.Serialize(jT809Package).ToHexString(); //"5B000000920000068294000133EFB8010000000000270FD4C1413132333435000000000000000000000000000294010000005C010002000000005A01AC3F40123FFAA1000000005A01AC4D5003736D616C6C636869000000000000000031323334353637383930310000000000000000003132333435364071712E636F6D00000000000000000000000000000000000000BAD85D" Assert.Equal("5B000000920000068294000133EFB8010000000000270FD4C1413132333435000000000000000000000000000294010000005C010002000000005A01AC3F40123FFAA1000000005A01AC4D5003736D616C6C636869000000000000000031323334353637383930310000000000000000003132333435364071712E636F6D00000000000000000000000000000000000000BAD85D", hex); }
public void Test2() { var bytes = "00".ToHexBytes(); JT809_0x1500_0x1501 jT809_0X1500_0X1501 = JT809Serializer.Deserialize <JT809_0x1500_0x1501>(bytes); Assert.Equal(JT809_0x1501_Result.监听成功, jT809_0X1500_0X1501.Result); }
public void Test2() { var bytes = "02".ToHexBytes(); JT809_0x9200_0x9205 jT809_0X9200_0X9205 = JT809Serializer.Deserialize <JT809_0x9200_0x9205>(bytes); Assert.Equal(JT809_0x9205_ReasonCode.应急状态下车辆定位信息回传, jT809_0X9200_0X9205.ReasonCode); }
public void Test2() { var bytes = "00".ToHexBytes(); JT809_0x1007 jT809_0X1007 = JT809Serializer.Deserialize <JT809_0x1007>(bytes); Assert.Equal(JT809_0x1007_ErrorCode.主链路断开, jT809_0X1007.ErrorCode); }
public void Test2() { var bytes = "3132333435363738390000000000000000000000".ToHexBytes(); JT809_0x9500_0x9501 jT809_0X9500_0X9501 = JT809Serializer.Deserialize <JT809_0x9500_0x9501>(bytes); Assert.Equal("123456789", jT809_0X9500_0X9501.MonitorTel); }
public void Test2() { var bytes = "0901".ToHexBytes(); JT809_0x9500_0x9502 jT809_0X9500_0X9502 = JT809Serializer.Deserialize <JT809_0x9500_0x9502>(bytes); Assert.Equal(0x09, jT809_0X9500_0X9502.LensID); Assert.Equal(0x01, jT809_0X9500_0X9502.SizeType); }
public void Test2() { var bytes = "00 00 00 00 5B A8 80 B6 00 00 00 00 5B A9 01 6B".ToHexBytes(); JT809_0x1200_0x1207 jT809_0X1200_0X1201 = JT809Serializer.Deserialize <JT809_0x1200_0x1207>(bytes); Assert.Equal(DateTime.Parse("2018-09-24 14:14:14"), jT809_0X1200_0X1201.StartTime); Assert.Equal(DateTime.Parse("2018-09-24 23:23:23"), jT809_0X1200_0X1201.EndTime); }