|
- 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);
- }
-
- /// <summary>
- /// 获取物料信息
- /// </summary>
- public void GetBatchingInfo()
- {
- GetAbsMessageServer.GetBatchingInfo(InternetInfo.ClientId);
- }
-
- /// <summary>
- /// 订单状态更改
- /// </summary>
- /// <param name="subid"></param>
- /// <param name="status"></param>
- /// <returns></returns>
- 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;
- /// <summary>
- /// 设备初始化
- /// </summary>
- 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<object>((o) => { control?.DataParse(o); }), "DataParse");
- ActionOperate.GetInstance.Register(new Action(() => { control?.ConnectOk(); }), $"{GeneralConfig.DeviceType.ToString()}/ConnectOk");
- ActionOperate.GetInstance.Register(new Action<object>((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;
- }
- }
- }
|