using BPA.ApolloClient;
using BPA.Message;
using BPASmartClient.Helper;
using BPASmartClient.Message;
using BPASmartClient.Model;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using System.Collections.ObjectModel;
using System.Xml.Linq;
using System.Xml.XPath;
namespace BPASmartClient.Business
{
///
/// 配置管理器
///
public class ConfigMgr : IPlugin
{
///
/// 门店ID
///
public int ClientId { get; set; }
///
/// MQTT Broker
///
public MQTT_Entity MQTT_Config { get; set; }
//Apollo地址
private string apolloUri;
private string apoid;
private string namespa;
//设备集合
private List deviceConfigs;
public void Dispose()
{
}
public void Initialize()
{
ClientId = int.Parse(System.Configuration.ConfigurationManager.AppSettings["ClientId"]);
apolloUri = System.Configuration.ConfigurationManager.AppSettings["ApolloUri"].ToString();
apoid = System.Configuration.ConfigurationManager.AppSettings["AppId"].ToString();
namespa = System.Configuration.ConfigurationManager.AppSettings["Namespaces"].ToString();
InternetInfo.OrderServer = System.Configuration.ConfigurationManager.AppSettings["OrderServiceUri"].ToString();
InternetInfo.StockServer = System.Configuration.ConfigurationManager.AppSettings["StockServiceUri"].ToString();
InternetInfo.IsEnableTest = bool.Parse(System.Configuration.ConfigurationManager.AppSettings["IsEnableTest"].ToString());
InitDeviceModel();
InitMQTT();
}
public List GetDeviceConfigs()
{
if (null == deviceConfigs)
InitDeviceModel();
return deviceConfigs;
}
///
/// 加载设备模型
///
private void InitDeviceModel()
{
//var text = TextHelper.GetInstance.ReadTextInfo("StartShop", "DeviceConfig");
//string path = $"{LocaPath.GetInstance().GetDeviceConfigPath}{text}.json";
//deviceConfigs = new List();
//if (File.Exists(path))
//{
// string JsonString = File.ReadAllText(path);
// var result = JsonConvert.DeserializeObject>(JsonString);
// if (result != null)
// {
// foreach (var shop in result)
// {
// foreach (var device in shop.deviceModels)
// {
// DeviceConfig deviceConfig = new DeviceConfig();
// deviceConfig.Name = device.DeviceName;
// deviceConfig.Module = device.DeviceNamespace;
// deviceConfig.DeviceId = int.Parse(device.DeviceId);
// foreach (var comms in device.communicationDevcies)
// {
// BPASmartClient.Model.Peripheral peripheral = new BPASmartClient.Model.Peripheral();
// peripheral.Module = comms.CommunicationNamespace;
// }
// deviceConfigs.Add(deviceConfig);
// }
// }
// }
//}
//deviceConfigs = new List();
//var devicePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DeviceInfo.xml");
//var xdoc = XDocument.Load(devicePath);
//var devices = xdoc.XPathSelectElements("//Device");
//foreach (var device in devices)
//{
// DeviceConfig deviceConfig = new DeviceConfig();
// deviceConfig.Name = device.Attribute("Name").Value;
// deviceConfig.Module = device.Attribute("Module").Value;
// deviceConfig.DeviceId = int.Parse(device.Attribute("DeviceId").Value);
// var Peripherals = device.XPathSelectElements("Peripherals/Peripheral");
// if (Peripherals != null)
// {
// foreach (var Per in Peripherals)
// {
// BPASmartClient.Model.Peripheral peripheral = new BPASmartClient.Model.Peripheral();
// peripheral.Module = Per.Attribute("Module").Value;
// var Parameters = Per.Element("Parameters").Elements();
// if (Parameters != null)
// {
// foreach (var item in Parameters)
// {
// peripheral.Parameters.Add(item.Name.LocalName, item.Value);
// }
// }
// deviceConfig.Peripherals.Add(peripheral);
// }
// }
// deviceConfigs.Add(deviceConfig);
//}
}
///
/// 加载MQTT配置
///
private void InitMQTT()
{
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory());
//测试版本
//configurationBuilder.AddApolloConfiguration(p =>
// {
// p.AppId = "dev1_order";
// p.MetaServer = apolloUri;
// p.Namespaces = new List() { "DEV.Config" };
// });
//正式版本
configurationBuilder.AddApolloConfiguration(p =>
{
p.AppId = apoid;
p.MetaServer = apolloUri;
p.Namespaces = new List() { namespa };
});
IConfiguration config = configurationBuilder.Build();
var mqttBroker = config.GetSection("BrokerHostSettings");
MQTT_Config = mqttBroker.Value.FromJSON();
if (MQTT_Config == null) MessageLog.GetInstance.Show("获取配置数据为空!");
}
public void Start()
{
}
public class MQTT_Entity
{
public string Host { get; set; }
public int Port { get; set; }
}
}
}