Exemplo n.º 1
0
 protected override void ChannelRead0(IChannelHandlerContext ctx, byte[] msg)
 {
     try
     {
         //解析到头部,然后根据具体的消息Id通过队列去进行消费
         //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息,
         //解析具体的消息体,具体调用JT808Serializer.Deserialize<T>
         JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize <JT808HeaderPackage>(msg);
         if (logger.IsEnabled(LogLevel.Trace))
         {
             logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgSuccessCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}");
         }
         jT808AtomicCounterService.MsgSuccessIncrement();
         jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo, ctx.Channel);
         JT808MsgProducer.ProduceAsync(jT808HeaderPackage.Header.TerminalPhoneNo, msg);
     }
     catch (JT808Exception ex)
     {
         jT808AtomicCounterService.MsgFailIncrement();
         if (logger.IsEnabled(LogLevel.Error))
         {
             logger.LogError(ex, $"accept package fail count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}");
         }
     }
     catch (Exception ex)
     {
         jT808AtomicCounterService.MsgFailIncrement();
         if (logger.IsEnabled(LogLevel.Error))
         {
             logger.LogError(ex, $"accept package fail count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}");
         }
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// 重写消息处理器
        /// </summary>
        /// <param name="request"></param>
        /// <param name="session"></param>
        public override byte[] Processor(JT808HeaderPackage request, IUnionSession session)
        {
            //AOP 可以自定义添加一些东西:上下行日志、数据转发
            logger.LogDebug("可以自定义添加一些东西:上下行日志、数据转发");
            //流量
            jT808Traffic.Increment(request.Header.TerminalPhoneNo, DateTime.Now.ToString("yyyyMMdd"), request.OriginalData.Length);
            var parameter = (request.Header.TerminalPhoneNo, request.OriginalData.ToArray());

            //转发数据(可同步也可以使用队列进行异步)
            try
            {
                jT808TransmitService.SendAsync(parameter);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "");
            }
            //上行日志(可同步也可以使用队列进行异步)
            jT808MsgLogging.Processor(parameter, UnionMsgLoggingType.up);
            //处理上行消息
            var down = base.Processor(request, session);

            //下行日志(可同步也可以使用队列进行异步)
            jT808MsgLogging.Processor((request.Header.TerminalPhoneNo, down), UnionMsgLoggingType.down);
            return(down);
        }
Exemplo n.º 3
0
 /// <summary>
 /// 平台通用应答
 /// </summary>
 /// <param name="request"></param>
 /// <param name="session"></param>
 public virtual byte[] CommonReply(JT808HeaderPackage request, IJT808Session session)
 {
     if (request.Version == JT808Version.JTT2019)
     {
         byte[] data = JT808Serializer.Serialize(JT808MsgId.平台通用应答.Create_平台通用应答_2019(request.Header.TerminalPhoneNo, new JT808_0x8001()
         {
             AckMsgId            = request.Header.MsgId,
             JT808PlatformResult = JT808PlatformResult.成功,
             MsgNum = request.Header.MsgNum
         }));
         session.SendAsync(data);
         return(data);
     }
     else
     {
         byte[] data = JT808Serializer.Serialize(JT808MsgId.平台通用应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8001()
         {
             AckMsgId            = request.Header.MsgId,
             JT808PlatformResult = JT808PlatformResult.成功,
             MsgNum = request.Header.MsgNum
         }));
         session.SendAsync(data);
         return(data);
     }
 }
        /// <summary>
        /// 重写自带的消息
        /// </summary>
        /// <param name="request"></param>
        /// <param name="session"></param>
        public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
        {
            logger.LogDebug("重写自带Msg0x0200的消息");
            var data = base.Msg0x0200(request, session);

            logger.LogDebug("往应答服务发送相同数据进行测试");
            MsgReplyProducer.ProduceAsync(request.Header.TerminalPhoneNo, data).ConfigureAwait(false);
            return(data);
        }
 protected override void ChannelRead0(IChannelHandlerContext ctx, byte[] msg)
 {
     try
     {
         jT808SourcePackageDispatcher.SendAsync(msg);
         jT808UplinkPacket.ProcessorAsync(msg, JT808TransportProtocolType.tcp);
         //解析到头部,然后根据具体的消息Id通过队列去进行消费
         //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息,
         //解析具体的消息体,具体调用JT808Serializer.Deserialize<T>
         JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize <JT808HeaderPackage>(msg);
         jT808AtomicCounterService.MsgSuccessIncrement();
         jT808TrafficService.ReceiveSize(msg.Length);
         if (logger.IsEnabled(LogLevel.Trace))
         {
             logger.LogTrace("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString());
             logger.LogTrace("accept msg <<< " + ByteBufferUtil.HexDump(msg));
         }
         jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo, ctx.Channel);
         if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out var handlerFunc))
         {
             IJT808Reply jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg));
             if (jT808Response != null)
             {
                 if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress))
                 {
                     ctx.WriteAndFlushAsync(jT808Response);
                 }
             }
         }
         else
         {
             //未知的消息类型已日志形式输出
             if (unknownLogger.IsEnabled(LogLevel.Debug))
             {
                 unknownLogger.LogDebug(ByteBufferUtil.HexDump(msg));
             }
         }
     }
     catch (JT808.Protocol.Exceptions.JT808Exception ex)
     {
         jT808AtomicCounterService.MsgFailIncrement();
         if (logger.IsEnabled(LogLevel.Error))
         {
             logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString());
             logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg));
         }
     }
     catch (Exception ex)
     {
         jT808AtomicCounterService.MsgFailIncrement();
         if (logger.IsEnabled(LogLevel.Error))
         {
             logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString());
             logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg));
         }
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="request">请求数据</param>
 /// <param name="session">当前会话</param>
 /// <returns>应答消息数据</returns>
 public virtual byte[] Processor(JT808HeaderPackage request, IJT808Session session)
 {
     if (HandlerDict.TryGetValue(request.Header.MsgId, out var func))
     {
         return(func(request, session));
     }
     else
     {
         //处理不了的消息统一回复通用应答
         return(CommonReply(request, session));
     }
 }
Exemplo n.º 7
0
 /// <summary>
 /// 消息处理
 /// </summary>
 /// <param name="request">请求数据</param>
 /// <param name="session">当前会话</param>
 /// <returns>应答消息数据</returns>
 public virtual byte[] Processor(JT808HeaderPackage request, IJT808Session session)
 {
     if (HandlerDict.TryGetValue(request.Header.MsgId, out var func))
     {
         if (JT808ConfigurationOptionsMonitor.CurrentValue.FilterMsgIdHandlerForQueue != null)
         {
             // 网关不做消息业务处理,往队列发送
             if (JT808ConfigurationOptionsMonitor.CurrentValue.FilterMsgIdHandlerForQueue.Contains(request.Header.MsgId))
             {
                 if (MsgProducer != null)
                 {
                     MsgProducer.ProduceAsync(request.Header.TerminalPhoneNo, request.OriginalData.ToArray());
                 }
                 return(default);
Exemplo n.º 8
0
 protected override void ChannelRead0(IChannelHandlerContext ctx, byte[] msg)
 {
     try
     {
         jT808SourcePackageDispatcher?.SendAsync(msg);
         //解析到头部,然后根据具体的消息Id通过队列去进行消费
         //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息,
         //解析具体的消息体,具体调用JT808Serializer.Deserialize<T>
         JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize <JT808HeaderPackage>(msg);
         jT808AtomicCounterService.MsgSuccessIncrement();
         jT808TrafficService.ReceiveSize(msg.Length);
         if (logger.IsEnabled(LogLevel.Debug))
         {
             logger.LogDebug("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString());
         }
         jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo, ctx.Channel);
         Func <JT808Request, JT808Response> handlerFunc;
         if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out handlerFunc))
         {
             JT808Response jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg));
             if (jT808Response != null)
             {
                 if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress))
                 {
                     var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize);
                     jT808TrafficService.SendSize(sendData.Length);
                     ctx.WriteAndFlushAsync(Unpooled.WrappedBuffer(sendData));
                 }
             }
         }
     }
     catch (JT808.Protocol.Exceptions.JT808Exception ex)
     {
         jT808AtomicCounterService.MsgFailIncrement();
         if (logger.IsEnabled(LogLevel.Error))
         {
             logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString());
             logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg));
         }
     }
     catch (Exception ex)
     {
         jT808AtomicCounterService.MsgFailIncrement();
         if (logger.IsEnabled(LogLevel.Error))
         {
             logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString());
             logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg));
         }
     }
 }
Exemplo n.º 9
0
 public void Package3()
 {
     byte[]             bytes        = "7e080123000138123456782032000a000205060708090a0bffc400b5100002010303020403050504040000017d0101020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffdd00040000ffda000c03010002110311003f006c6a2a755ce299a5c942e0f35281c5004aa72314a54e38a07b8841ef4840a0673de21b4ff498ee402038dade991fe7f4acc110f4a0cd8ef2f1405cd01d45f2e9360a062edc5745616a6dad511861cfccff0053499512e056cf1460e3348a0ed4b8e338fc2819cb5edbfd9ee648b18556f97fdd3d3f4aafb4d332ea433a6573e9550d3131d18c9c558031c0a4083a503039a60c42c2984e4f4a06260d370690098ef4751400c615132d021868a621431a33480ef235e05595403eb54cbb0b8e7069dc0e3a9a41b12a024f4a9d40f4a18c5651e951c88179268194ee614b989a2719461ffea35cfdcda4b6b2ed71c1e55874345c96ba91819a704c50217613db349b39031c9e945c66a69ba794713cebf30fb8be9ee6b540c1e948a48760e3a526d2dc77a0a144471d297cb623a71484646bb685234b81d01d8e7d018f43f9ff003ac16386c552225b8300c2a84c8c8c4ed247b502616cc0517e".ToHexBytes();
     JT808HeaderPackage jT808_0X0801 = JT808Serializer.HeaderDeserialize(bytes);
 }
Exemplo n.º 10
0
 public JT808Request(JT808HeaderPackage package, byte[] originalPackage)
 {
     Package         = package;
     OriginalPackage = originalPackage;
 }
 /// <summary>
 /// 自定义消息
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public byte[] Msg0x9999(JT808HeaderPackage request, IJT808Session session)
 {
     logger.LogDebug("自定义消息");
     return(default);
 /// <summary>
 /// 重写自带的消息
 /// </summary>
 /// <param name="request"></param>
 /// <param name="session"></param>
 public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
 {
     logger.LogDebug("重写自带Msg0x0200的消息");
     return(base.Msg0x0200(request, session));
 }
 /// <summary>
 /// 终端通用应答
 /// 平台无需回复
 /// 实现自己的业务
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public virtual byte[] Msg0x0001(JT808HeaderPackage request, IJT808Session session)
 {
     return(default);
Exemplo n.º 14
0
 /// <summary>
 /// 重写自带的消息
 /// </summary>
 /// <param name="request"></param>
 /// <param name="session"></param>
 public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
 {
     //logger.LogDebug("重写自带Msg0x0200的消息");
     logger.LogDebug($"重写自带Msg0x0200的消息{request.Header.TerminalPhoneNo}-{request.OriginalData.ToArray().ToHexString()}");
     return(base.Msg0x0200(request, session));
 }
 /// <summary>
 /// 自定义消息
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public byte[] Msg0x9999(JT808HeaderPackage request)
 {
     return(default);
 /// <summary>
 /// 重写消息
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public override byte[] Msg0x0001(JT808HeaderPackage request)
 {
     return(base.Msg0x0001(request));
 }