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() { ActionOperate.GetInstance.Register(new Action(() => { GetInterfaceData(); }), "ResetProgram"); }
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;
}
public IControl control { get; set; }
public IGvl GVL { get; set; }
public IAlarm Alarm { get; set; }
///
/// 设备初始化
///
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();
GetInterfaceData();
control?.Init();
ActionOperate.GetInstance.Register(new Action