選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
SmallChi 57caca0520 1.添加测试用例 6年前
doc 修改设计模型 6年前
src 1.添加测试用例 6年前
.gitignore Initial commit 6年前
.gitmodules 增加子模块 6年前
LICENSE Initial commit 6年前
README.md 1.增加包计数服务 6年前

README.md

JT808DotNetty

基于DotNetty封装的JT808DotNetty通用消息业务处理

了解JT808协议进这边

了解JT809协议进这边

玩一玩压力测试

MIT Licence

新网关的优势:

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

设计模型

design_model

集成功能实现

1.集成原包分发器

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

2.集成WebApi服务器

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

2.2.管理会话服务 IJT808SessionService

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

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

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

举个栗子1

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

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 终端手机号
LoaclAddressIP string 本地ip地址
WebApiPort string WebApi端口号
RemoteAddressIP string 远程ip地址
1.获取会话集合

请求地址:Session/GetAll

请求方式: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",
            "LoaclAddressIP":"127.0.0.1:808",
            "WebApiPort":828,
            "RemoteAddressIP":"127.0.0.1:11808"
        },{
            "ChannelId":"eadad23",
            "LastActiveTime":"2018-11-27 20:00:00",
            "StartTime":"2018-11-25 20:00:00",
            "TerminalPhoneNo":"123456789013",
            "LoaclAddressIP":"127.0.0.1:808",
            "WebApiPort":828,
            "RemoteAddressIP":"127.0.0.1:11808"
        }
    ]
}
2.通过通道Id移除对应会话

请求地址:Session/RemoveByChannelId

请求方式:POST

请求参数:

属性 数据类型 参数说明
channelId string 通道Id

返回数据:

属性 数据类型 参数说明
Data bool 是否成功

返回结果:

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

请求地址:Session/RemoveByTerminalPhoneNo

请求方式:POST

请求参数:

属性 数据类型 参数说明
terminalPhoneNo string 设备终端号

返回数据:

属性 数据类型 参数说明
Data bool 是否成功

返回结果:

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