using HBLConsole.Abstract; using HBLConsole.Interface; using System; using System.Reflection; using BPA.Message.Enum; using HBLConsole.GVL; using BPA.Message; using HBLConsole.Service; using HBLConsole.Communication; namespace HBLConsole.Factory { public class SimpleFactory { private volatile static SimpleFactory _Instance; public static SimpleFactory GetInstance => _Instance ?? (_Instance = new SimpleFactory()); private SimpleFactory() { } public AbstractMessageServer GetAbsMessageServer => _GetAbsMessageServer ?? (_GetAbsMessageServer = GetAbstractMessageServer()); private AbstractMessageServer _GetAbsMessageServer; private string DeviceType => GeneralConfig.DeviceType.ToString(); private object debugControl; public void MqttMessage(IMessage message) { GetAbsMessageServer.AddOrder(message); GetAbsMessageServer.GetBatchingInfo(message); GetAbsMessageServer.GetRecipeBom(message); } /// /// 获取物料信息 /// public void GetBatchingInfo() { GetAbsMessageServer.GetBatchingInfo(InternetInfo.ClientId); } /// /// 订单状态更改 /// /// /// /// public bool OrderChanged(string subid, ORDER_STATUS status) { bool res = GetAbsMessageServer.OrderStatusChange(subid, status); if (res) { ActionOperate.GetInstance.Send("OrderStatusChange", new OrderStatusChange() { CookingStatus = status, SuborderId = subid }); } return res; } private AbstractMessageServer GetAbstractMessageServer() { string NameSpace = "HBLConsole.Business"; Type type = Assembly.Load(NameSpace).GetType($"{NameSpace}.MessageServer.{DeviceType}"); if (type == null) type = Assembly.Load(NameSpace).GetType($"{NameSpace}.MessageServer.Base"); return Activator.CreateInstance(type) as AbstractMessageServer; } IControl control; /// /// 设备初始化 /// public void DeviceInit() { string NameSpace = $"HBLConsole.{DeviceType}";//Load 加载的是dll的名称,GetType获取的是全命名空间下的类 Type type = Assembly.Load(NameSpace).GetType($"{NameSpace}.Control_{DeviceType}"); //control = Activator.CreateInstance(type) as IControl; control = (IControl)type?.GetProperty("Instance").GetValue(null); //IControl business = (IControl)type?.GetProperty("GetInstance").GetValue(null); GetBatchingInfo(); control?.Init(); ActionOperate.GetInstance.Register(new Action((o) => { control?.DataParse(o); }), "DataParse"); ActionOperate.GetInstance.Register(new Action(() => { control?.ConnectOk(); }), $"{GeneralConfig.DeviceType.ToString()}/ConnectOk"); ActionOperate.GetInstance.Register(new Action((o) => { control?.SimOrder(o); }), "SimOrder"); ConnectHelper.GetInstance.Init(); } public IGvl GetGvl() { Type type = control?.GetType(); foreach (var item in type?.GetProperties()) { var interfaces = item.PropertyType.GetInterfaces(); if (interfaces != null) { foreach (var inters in interfaces) { if (inters.Name.Equals("IGvl")) { return (type?.GetProperty(item.Name).GetValue(control, null)) as IGvl; } } } } return default; } public object GetDebugControl() { if (null == debugControl) { debugControl = Assembly.Load("HBLConsole.Debug").CreateInstance($"HBLConsole.Debug.Debug_{DeviceType}"); } return debugControl; } } }