您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
SmallChi 249d3f9eb0 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
}