Просмотр исходного кода

修改网关只序列化头部,根据头部消息id进行消息推送

tags/v1.0.0
SmallChi 6 лет назад
Родитель
Сommit
02fc285333
3 измененных файлов: 15 добавлений и 20 удалений
  1. +7
    -8
      src/JT808.DotNetty/Handlers/JT808ServerHandler.cs
  2. +3
    -5
      src/JT808.DotNetty/JT808MsgIdHandlerBase.cs
  3. +5
    -7
      src/JT808.DotNetty/Metadata/JT808Request.cs

+ 7
- 8
src/JT808.DotNetty/Handlers/JT808ServerHandler.cs Просмотреть файл

@@ -50,21 +50,20 @@ namespace JT808.DotNetty.Handlers
try
{
jT808SourcePackageDispatcher?.SendAsync(msg);
//在压力大的情况下可以只解析到头部
//然后根据具体的消息Id通过队列去进行消费
//JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg);
JT808Package jT808Package = JT808Serializer.Deserialize(msg);
//解析到头部,然后根据具体的消息Id通过队列去进行消费
//要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息,
//解析具体的消息体,具体调用JT808Serializer.Deserialize<T>
JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg);
jT808AtomicCounterService.MsgSuccessIncrement();
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString());
}
jT808SessionManager.TryAdd(new JT808Session(ctx.Channel, jT808Package.Header.TerminalPhoneNo));
jT808SessionManager.TryAdd(new JT808Session(ctx.Channel, jT808HeaderPackage.Header.TerminalPhoneNo));
Func<JT808Request, JT808Response> handlerFunc;
if (handler.HandlerDict.TryGetValue(jT808Package.Header.MsgId, out handlerFunc))
if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out handlerFunc))
{
//JT808Response jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg));
JT808Response jT808Response = handlerFunc(new JT808Request(jT808Package, msg));
JT808Response jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg));
if (jT808Response != null)
{
if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress))


+ 3
- 5
src/JT808.DotNetty/JT808MsgIdHandlerBase.cs Просмотреть файл

@@ -1,10 +1,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using DotNetty.Transport.Channels;
using JT808.DotNetty.Metadata;
using JT808.Protocol;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.MessageBody;
@@ -14,8 +10,10 @@ namespace JT808.DotNetty
/// <summary>
/// 抽象消息处理业务
/// 自定义消息处理业务
/// ConfigureServices:
/// 注意:
/// 1.ConfigureServices:
/// services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase),typeof(JT808MsgIdCustomHandlerImpl),ServiceLifetime.Singleton));
/// 2.解析具体的消息体,具体消息调用具体的JT808Serializer.Deserialize<T>
/// </summary>
public abstract class JT808MsgIdHandlerBase
{


+ 5
- 7
src/JT808.DotNetty/Metadata/JT808Request.cs Просмотреть файл

@@ -7,16 +7,14 @@ namespace JT808.DotNetty.Metadata
{
public class JT808Request
{
public JT808Package Package { get; set; }
public JT808HeaderPackage Package { get; }

/// <summary>
/// 用于消息发送
/// </summary>
public byte[] OriginalPackage { get;}

public JT808Request()
{

}

public JT808Request(JT808Package package, byte[] originalPackage)
public JT808Request(JT808HeaderPackage package, byte[] originalPackage)
{
Package = package;
OriginalPackage = originalPackage;


Загрузка…
Отмена
Сохранить