using System;
using System.Collections.Generic;
using JT809.DotNetty.Core.Configurations;
using JT809.DotNetty.Core.Interfaces;
using JT809.DotNetty.Core.Clients;
using JT809.DotNetty.Core.Metadata;
using JT809.Protocol.Enums;
using JT809.Protocol.Extensions;
using JT809.Protocol.MessageBody;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
namespace JT809.DotNetty.Core.Handlers
{
///
/// 上级平台
/// 主从链路接收消息处理程序
///
public abstract class JT809SuperiorMsgIdReceiveHandlerBase
{
protected IJT809VerifyCodeGenerator VerifyCodeGenerator { get; }
protected JT809SubordinateClient SubordinateLinkClient { get; }
protected JT809Configuration Configuration { get; }
protected ILogger Logger { get; }
///
/// 初始化消息处理业务
///
protected JT809SuperiorMsgIdReceiveHandlerBase(
ILoggerFactory loggerFactory,
IOptions jT809ConfigurationAccessor,
IJT809VerifyCodeGenerator verifyCodeGenerator,
JT809SubordinateClient subordinateLinkClient)
{
this.Logger = loggerFactory.CreateLogger();
this.VerifyCodeGenerator = verifyCodeGenerator;
this.SubordinateLinkClient = subordinateLinkClient;
HandlerDict = new Dictionary>
{
{JT809BusinessType.主链路登录请求消息, Msg0x1001},
{JT809BusinessType.主链路注销请求消息, Msg0x1003},
{JT809BusinessType.主链路连接保持请求消息, Msg0x1005},
{JT809BusinessType.主链路断开通知消息,Msg0x1007 },
{JT809BusinessType.主链路动态信息交换消息, Msg0x1200},
{JT809BusinessType.下级平台主动关闭链路通知消息, Msg0x1008},
{JT809BusinessType.从链路连接应答消息, Msg0x9002},
{JT809BusinessType.从链路注销应答消息, Msg0x9004},
{JT809BusinessType.从链路连接保持应答消息, Msg0x9006},
};
SubHandlerDict = new Dictionary>
{
//{JT809SubBusinessType.实时上传车辆定位信息, Msg0x1200_0x1202},
};
}
public Dictionary> HandlerDict { get; protected set; }
public Dictionary> SubHandlerDict { get; protected set; }
///
/// 主链路登录请求消息
///
///
/// 主链路登录应答消息
public virtual JT809Response Msg0x1001(JT809Request request)
{
var verifyCode = VerifyCodeGenerator.Create();
Logger.LogInformation($"主链路登录请求消息:VerifyCode-{verifyCode}");
var package = JT809BusinessType.主链路登录应答消息.Create(new JT809_0x1002()
{
Result = JT809_0x1002_Result.成功,
VerifyCode = verifyCode
});
if (Configuration.SubordinateClientEnable)
{
var jT809_0x1001 = request.Package.Bodies as JT809_0x1001;
SubordinateLinkClient.ConnectAsync(jT809_0x1001.DownLinkIP, jT809_0x1001.DownLinkPort, verifyCode);
}
return new JT809Response(package, 100);
}
///
/// 主链路注销请求消息
///
///
/// 主链路注销应答消息
public virtual JT809Response Msg0x1003(JT809Request request)
{
var jT809_0x1003 = request.Package.Bodies as JT809_0x1003;
Logger.LogInformation(JsonConvert.SerializeObject(jT809_0x1003));
var package = JT809BusinessType.主链路注销应答消息.Create();
return new JT809Response(package, 100);
}
///
/// 主链路连接保持请求消息
///
///
/// 主链路连接保持应答消息
public virtual JT809Response Msg0x1005(JT809Request request)
{
var package = JT809BusinessType.主链路连接保持应答消息.Create();
return new JT809Response(package, 100);
}
///
/// 主链路断开通知消息
///
///
/// 本条消息无需被通知方应答
public virtual JT809Response Msg0x1007(JT809Request request)
{
var jT809_0x1007 = request.Package.Bodies as JT809_0x1007;
Logger.LogInformation($"主链路断开通知消息:{jT809_0x1007.ErrorCode.ToString()}-{jT809_0x1007.ErrorCode}");
return null;
}
///
/// 下级平台主动关闭链路通知消息
///
///
/// 本条消息无需被通知方应答
public virtual JT809Response Msg0x1008(JT809Request request)
{
var jT809_0x1008 = request.Package.Bodies as JT809_0x1008;
Logger.LogInformation($"下级平台主动关闭链路通知消息:{jT809_0x1008.ReasonCode.ToString()}-{jT809_0x1008.ReasonCode}");
return null;
}
///
/// 从链路连接应答消息
///
///
/// 本条消息无需被通知方应答
public virtual JT809Response Msg0x9002(JT809Request request)
{
var jT809_0x9002 = request.Package.Bodies as JT809_0x9002;
Logger.LogInformation($"从链路连接应答消息:{jT809_0x9002.Result.ToString()}-{jT809_0x9002.Result}");
return null;
}
///
/// 从链路注销应答消息
///
///
/// 本条消息无需被通知方应答
public virtual JT809Response Msg0x9004(JT809Request request)
{
Logger.LogInformation("从链路注销应答消息");
return null;
}
///
/// 从链路连接保持应答消息
///
///
/// 本条消息无需被通知方应答
public virtual JT809Response Msg0x9006(JT809Request request)
{
Logger.LogInformation("从链路连接保持应答消息");
return null;
}
///
/// 主链路动态信息交换消息
///
///
///
public virtual JT809Response Msg0x1200(JT809Request request)
{
return null;
}
}
}