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);
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #12
0
        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));
     }
 }
Exemple #14
0
        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>());
     }));
 }
Exemple #16
0
        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"
        }
Exemple #17
0
        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);
        }
Exemple #18
0
        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);
        }
Exemple #21
0
        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>();
 }
Exemple #23
0
 public void JT809_0x9400_0x9401_Package_Deserialize_Test()
 {
     for (int i = 0; i < N; i++)
     {
         var result = JT809Serializer.Deserialize(bytes);
     }
 }
Exemple #24
0
        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);
        }
Exemple #26
0
        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);
        }
Exemple #27
0
        public void Test2()
        {
            var          bytes        = "00".ToHexBytes();
            JT809_0x1007 jT809_0X1007 = JT809Serializer.Deserialize <JT809_0x1007>(bytes);

            Assert.Equal(JT809_0x1007_ErrorCode.主链路断开, jT809_0X1007.ErrorCode);
        }
Exemple #28
0
        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);
        }