|
|
@@ -0,0 +1,93 @@ |
|
|
|
using JT808.Gateway.Client; |
|
|
|
using JT808.Protocol; |
|
|
|
using JT808.Protocol.Enums; |
|
|
|
using JT808.Protocol.Extensions; |
|
|
|
using JT808.Protocol.MessageBody; |
|
|
|
using Microsoft.Extensions.Hosting; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
using System.Text; |
|
|
|
using System.Threading; |
|
|
|
using System.Threading.Tasks; |
|
|
|
|
|
|
|
namespace JT808.Gateway.NBIotSimpleClient.Services |
|
|
|
{ |
|
|
|
/// <summary> |
|
|
|
/// 处理平台下发的数据包 |
|
|
|
/// </summary> |
|
|
|
public class ProccessPackageService : IHostedService |
|
|
|
{ |
|
|
|
ReceviePackageService ReceviePackageService; |
|
|
|
IJT808TcpClientFactory TcpClientFactory; |
|
|
|
JT808Serializer Serializer; |
|
|
|
DeviceInfoService DeviceInfoService; |
|
|
|
ILogger Logger; |
|
|
|
public ProccessPackageService( |
|
|
|
ILoggerFactory loggerFactory, |
|
|
|
IJT808Config jT808Config, |
|
|
|
IJT808TcpClientFactory tcpClientFactory, |
|
|
|
DeviceInfoService deviceInfoService, |
|
|
|
ReceviePackageService receviePackageService) |
|
|
|
{ |
|
|
|
ReceviePackageService = receviePackageService; |
|
|
|
TcpClientFactory = tcpClientFactory; |
|
|
|
Serializer = jT808Config.GetSerializer(); |
|
|
|
DeviceInfoService = deviceInfoService; |
|
|
|
Logger = loggerFactory.CreateLogger<ProccessPackageService>(); |
|
|
|
} |
|
|
|
|
|
|
|
public Task StartAsync(CancellationToken cancellationToken) |
|
|
|
{ |
|
|
|
Task.Run(() => |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
foreach(var package in ReceviePackageService.BlockingCollection.GetConsumingEnumerable(cancellationToken)) |
|
|
|
{ |
|
|
|
if(package.Header.MsgId == JT808MsgId.终端注册应答.ToUInt16Value()) |
|
|
|
{ |
|
|
|
if (package.Bodies is JT808_0x8100 body) |
|
|
|
{ |
|
|
|
DeviceInfoService.DeviceInfos.TryAdd(package.Header.TerminalPhoneNo, new Metadata.DeviceInfo { |
|
|
|
TerminalPhoneNo = package.Header.TerminalPhoneNo, |
|
|
|
Code = body.Code |
|
|
|
}); |
|
|
|
Logger.LogInformation($"{package.Header.TerminalPhoneNo}-{body.Code}-success"); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (package.Header.MsgId == JT808MsgId.平台通用应答.ToValue()) |
|
|
|
{ |
|
|
|
if(package.Bodies is JT808_0x8001 body) |
|
|
|
{ |
|
|
|
if(body.AckMsgId== JT808MsgId.终端鉴权.ToUInt16Value()) |
|
|
|
{ |
|
|
|
if(body.JT808PlatformResult== JT808PlatformResult.成功) |
|
|
|
{ |
|
|
|
if (DeviceInfoService.DeviceInfos.TryGetValue(package.Header.TerminalPhoneNo, out var deviceInfo)) |
|
|
|
{ |
|
|
|
deviceInfo.Successed = true; |
|
|
|
DeviceInfoService.DeviceInfos.TryUpdate(package.Header.TerminalPhoneNo, deviceInfo, deviceInfo); |
|
|
|
} |
|
|
|
} |
|
|
|
Logger.LogInformation($"{package.Header.TerminalPhoneNo}-{body.JT808PlatformResult.ToString()}"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
}, cancellationToken); |
|
|
|
return Task.CompletedTask; |
|
|
|
} |
|
|
|
|
|
|
|
public Task StopAsync(CancellationToken cancellationToken) |
|
|
|
{ |
|
|
|
return Task.CompletedTask; |
|
|
|
} |
|
|
|
} |
|
|
|
} |