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); } } }