using System.Reflection;
using System.Text;
using JT808.Protocol.Formatters;
using JT808.Protocol.Internal;
namespace JT808.Protocol.Interfaces
{
///
/// 全局配置基类
///
public abstract class GlobalConfigBase : IJT808Config
{
///
///
///
protected GlobalConfigBase()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
MsgSNDistributed = new DefaultMsgSNDistributedImpl();
Compress = new JT808GZipCompressImpl();
SplitPackageStrategy = new DefaultSplitPackageStrategyImpl();
SkipCRCCode = false;
MsgIdFactory = new JT808MsgIdFactory();
Encoding = Encoding.GetEncoding("GBK");
FormatterFactory = new JT808FormatterFactory();
JT808_0X0200_Custom_Factory = new JT808_0x0200_Custom_Factory();
JT808_0X0200_Factory = new JT808_0x0200_Factory();
JT808_0X8103_Custom_Factory = new JT808_0x8103_Custom_Factory();
JT808_0X8103_Factory = new JT808_0x8103_Factory();
JT808_0x0900_Custom_Factory = new JT808_0x0900_Custom_Factory();
JT808_0x8900_Custom_Factory = new JT808_0x8900_Custom_Factory();
JT808_0x8500_2019_Factory = new JT808_0x8500_2019_Factory();
JT808_CarDVR_Up_Factory = new JT808_CarDVR_Up_Factory();
JT808_CarDVR_Down_Factory = new JT808_CarDVR_Down_Factory();
JT808_0x8105_Cusotm_Factory = new JT808_0x8105_Cusotm_Factory();
TerminalPhoneNoLength = 12;
Trim = true;
}
///
/// 配置Id
///
public abstract string ConfigId { get; protected set; }
///
/// 分布式消息自增流水号
///
public virtual IJT808MsgSNDistributed MsgSNDistributed { get; set; }
///
/// 压缩
///
public virtual IJT808Compress Compress { get; set; }
///
/// 808分包策略
///
public virtual IJT808SplitPackageStrategy SplitPackageStrategy { get; set; }
///
/// 808消息Id工厂
///
public virtual IJT808MsgIdFactory MsgIdFactory { get; set; }
///
/// GBK编码
///
public virtual Encoding Encoding { get; set; }
///
/// 跳过校验码验证
/// 默认false
///
public virtual bool SkipCRCCode { get; set; }
///
/// 序列化器工厂
///
public virtual IJT808FormatterFactory FormatterFactory { get; set; }
///
/// 0x0200自定义附加信息工厂
///
public virtual IJT808_0x0200_Custom_Factory JT808_0X0200_Custom_Factory { get; set; }
///
/// 0x0200附加信息工厂
///
public virtual IJT808_0x0200_Factory JT808_0X0200_Factory { get; set; }
///
/// 0x8103自定义终端参数设置自定义消息工厂
///
public virtual IJT808_0x8103_Custom_Factory JT808_0X8103_Custom_Factory { get; set; }
///
/// 0x8103终端参数设置消息工厂
///
public virtual IJT808_0x8103_Factory JT808_0X8103_Factory { get; set; }
///
/// 终端SIM卡长度
///
public virtual int TerminalPhoneNoLength { get; set; }
///
/// 是否去掉头尾空格
///
public virtual bool Trim { get; set; }
///
/// 自定义数据上行透传消息工厂
///
public virtual IJT808_0x0900_Custom_Factory JT808_0x0900_Custom_Factory { get; set; }
///
/// 自定义数据下行透传消息工厂
///
public virtual IJT808_0x8900_Custom_Factory JT808_0x8900_Custom_Factory { get; set; }
///
/// 车辆控制消息工厂
///
public virtual IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; }
///
/// JT19056上行消息工厂
///
public IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; }
///
/// JT19056下行消息工厂
///
public IJT808_CarDVR_Down_Factory JT808_CarDVR_Down_Factory { get; set; }
///
/// 跳过校验码验证
/// 默认false
///
public bool SkipCarDVRCRCCode { get; set; }
///
/// 终端控制自定义参数命令工厂
///
public virtual IJT808_0x8105_Cusotm_Factory JT808_0x8105_Cusotm_Factory { get; set; }
///
public virtual bool EnableAutoMerge { get; set; }
///
public double AutoMergeTimeoutSecond { get; set; } = 300;
///
public IMerger Jt808PackageMerger { get; set; } = new DefaultMerger();
///
/// 外部扩展程序集注册
///
///
///
public virtual IJT808Config Register(params Assembly[] externalAssemblies)
{
if (externalAssemblies != null)
{
foreach (var easb in externalAssemblies)
{
MsgIdFactory.Register(easb);
FormatterFactory.Register(easb);
JT808_0X0200_Factory.Register(easb);
JT808_0X0200_Custom_Factory.Register(easb);
JT808_0X8103_Factory.Register(easb);
JT808_0X8103_Custom_Factory.Register(easb);
JT808_0x0900_Custom_Factory.Register(easb);
JT808_0x8900_Custom_Factory.Register(easb);
JT808_0x8500_2019_Factory.Register(easb);
JT808_CarDVR_Up_Factory.Register(easb);
JT808_CarDVR_Down_Factory.Register(easb);
JT808_0x8105_Cusotm_Factory.Register(easb);
}
}
return this;
}
///
/// 替换原有消息
///
///
///
public void ReplaceMsgId()
where TSourceJT808Bodies : JT808Bodies
where TTargetJT808Bodies : JT808Bodies, new()
{
TTargetJT808Bodies bodies = new TTargetJT808Bodies();
MsgIdFactory.Map[bodies.MsgId] = bodies;
FormatterFactory.FormatterDict.Remove(typeof(TSourceJT808Bodies).GUID);
FormatterFactory.FormatterDict.Add(typeof(TTargetJT808Bodies).GUID, (IJT808MessagePackFormatter)bodies);
}
}
}