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