You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

9.1 KiB

JT808DotNetty

基于DotNetty封装的JT808DotNetty专注消息业务处理

了解JT808协议进这边

了解JT809协议进这边

玩一玩压力测试

MIT Licence

新网关的优势:

  1. 跨平台
  2. 借助 .NET Core模块化的思想
  3. 单机同时一万辆车在线不是梦(真有一万辆车那都很吃香了<( ̄3 ̄)> <( ̄3 ̄)> <( ̄3 ̄)> )
  4. 简单易上手

设计模型

design_model

NuGet安装

Package Name Version Downloads
Install-Package JT808DotNetty JT808DotNetty JT808DotNetty

集成功能实现

1.集成原包分发器

功能 说明 使用场景
ISourcePackageDispatcher 原包分发器(支持热更新、断线重连) 需要将原数据转给其他平台

2.集成WebApi服务器

2.1.统一下发设备消息服务 IJT808UnificationSendService

2.2.管理会话服务 IJT808SessionService

2.3.消息包计数服务 JT808AtomicCounterService 接口尚未实现

3.集成业务消息处理程序

功能 说明 使用场景
JT808MsgIdHandlerBase 业务消息处理程序 需要自定义实现业务消息处理程序

举个栗子1

1.实现业务消息处理程序JT808MsgIdHandlerBase

using JT808.DotNetty;
public class JT808MsgIdCustomHandler : JT808MsgIdHandlerBase
{
    private readonly ILogger<JT808MsgIdCustomHandler> logger;

    public JT808MsgIdCustomHandler(ILoggerFactory loggerFactory,
        JT808SessionManager sessionManager) : base(sessionManager)
    {
        logger = loggerFactory.CreateLogger<JT808MsgIdCustomHandler>();
    }

    public override JT808Response Msg0x0102(JT808Request request)
    {
        logger.LogDebug("Msg0x0102");
        return base.Msg0x0102(request);
    }
}

2.自定义业务消息处理程序替换默认实现

services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase), typeof(JT808MsgIdCustomHandler), ServiceLifetime.Singleton));

3.使用JT808 Host

  UseJT808Host()

4.完整示例

// 默认网关端口:808
// 默认webapi端口:828
static async Task Main(string[] args)
{
    var serverHostBuilder = new HostBuilder()
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory);
            config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
        })
        .ConfigureLogging((context, logging) =>
        {
            logging.AddConsole();  
            logging.SetMinimumLevel(LogLevel.Error);
        })
        .ConfigureServices((hostContext, services) =>
        {
            services.AddSingleton<ILoggerFactory, LoggerFactory>();
            services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
            services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase), typeof(JT808MsgIdCustomHandler), ServiceLifetime.Singleton));
        })
        .UseJT808Host();
    await serverHostBuilder.RunConsoleAsync();
}

提供WebApi接口服务(默认端口828)

基地址:http://localhost:828/jt808api/ 数据格式:只支持Json格式

统一对象返回 JT808ResultDto<T>

属性 数据类型 参数说明
Message string 消息描述
Code int 状态码
Data T(泛型) 数据

返回Code[状态码]说明: |状态码|说明| |:------:|:------:| | 200 | 返回成功 | | 201 | 内容为空 | | 404 | 没有该服务 | | 500 | 服务内部错误 |

统一下发设备消息接口

请求地址:UnificationSend 请求方式:POST 请求参数: |属性|数据类型|参数说明| |:------:|:------:|:------| | TerminalPhoneNo| string| 设备终端号| | Data| byte[]| JT808 byte[]数组| 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| bool| 是否成功| 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":true
}

会话服务接口

统一会话信息对象返回 JT808SessionInfoDto
属性 数据类型 参数说明
ChannelId string 通道Id
LastActiveTime DateTime 最后上线时间
StartTime DateTime 上线时间
TerminalPhoneNo string 终端手机号
1.获取实际连接数(存在其他平台转发过来的数据,这时候通道Id和设备属于一对多的关系)

请求地址:Session/GetRealLinkCount 请求方式:GET 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| int| 实际连接数| 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":10
}
2.获取设备相关连的连接数

请求地址:Session/GetRelevanceLinkCount 请求方式:GET 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| int | 设备相关连的连接数 | 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":10
}
3.获取实际会话集合

请求地址:Session/GetRealAll 请求方式:GET 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| List<JT808SessionInfoDto> | 实际会话信息集合 | 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":[
        {
            "ChannelId":"eadad23",
            "LastActiveTime":"2018-11-27 20:00:00",
            "StartTime":"2018-11-25 20:00:00",
            "TerminalPhoneNo":"123456789012"
        },{
            "ChannelId":"eadad23",
            "LastActiveTime":"2018-11-27 20:00:00",
            "StartTime":"2018-11-25 20:00:00",
            "TerminalPhoneNo":"123456789013"
        }
    ]
}
4.获取设备相关联会话集合

请求地址:Session/GetRelevanceAll 请求方式:GET 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| List<JT808SessionInfoDto> | 设备相关联会话信息集合 | 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":[
        {
            "ChannelId":"eadad23",
            "LastActiveTime":"2018-11-27 20:00:00",
            "StartTime":"2018-11-25 20:00:00",
            "TerminalPhoneNo":"123456789012"
        }, {
            "ChannelId":"eadad24",
            "LastActiveTime":"2018-11-26 20:00:00",
            "StartTime":"2018-11-22 20:00:00",
            "TerminalPhoneNo":"123456789013"
        }
    ]
}
5.通过通道Id移除对应会话

请求地址:Session/RemoveByChannelId 请求方式:POST 请求参数: |属性|数据类型|参数说明| |:------:|:------:|:------| | channelId| string| 通道Id| 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| bool | 是否成功 | 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":true
}
6.通过设备终端号移除对应会话

请求地址:Session/RemoveByTerminalPhoneNo 请求方式:POST 请求参数: |属性|数据类型|参数说明| |:------:|:------:|:------| | terminalPhoneNo| string| 设备终端号| 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| bool | 是否成功 | 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":true
}
7.通过通道Id获取会话信息

请求地址:Session/GetByChannelId 请求方式:POST 请求参数: |属性|数据类型|参数说明| |:------:|:------:|:------| | channelId| string| 通道Id| 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| JT808SessionInfoDto | 会话信息对象 | 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":{
        "ChannelId":"eadad24",
        "LastActiveTime":"2018-11-26 20:00:00",
        "StartTime":"2018-11-22 20:00:00",
        "TerminalPhoneNo":"123456789013"
    }
}
8.通过设备终端号获取会话信息

请求地址:Session/GetByTerminalPhoneNo 请求方式:POST 请求参数: |属性|数据类型|参数说明| |:------:|:------:|:------| | terminalPhoneNo| string| 设备终端号| 返回数据: |属性|数据类型|参数说明| |:------:|:------:|:------| | Data| JT808SessionInfoDto | 会话信息对象 | 返回结果:

{
    "Message":"",
    "Code":200,
    "Data":{
        "ChannelId":"eadad24",
        "LastActiveTime":"2018-11-26 20:00:00",
        "StartTime":"2018-11-22 20:00:00",
        "TerminalPhoneNo":"123456789013"
    }
}