118 lines
2.3 KiB
C#
118 lines
2.3 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using Aitex.Core.RT.Event;
|
|||
|
using Aitex.Core.RT.Log;
|
|||
|
|
|||
|
namespace Aitex.Core.RT.Device
|
|||
|
{
|
|||
|
public class DEVICE
|
|||
|
{
|
|||
|
public delegate bool? DeviceFunc(out string reason, int time, params object[] param);
|
|||
|
|
|||
|
private static object _locker = new object();
|
|||
|
|
|||
|
private static Dictionary<string, DeviceFunc> deviceFuncs = new Dictionary<string, DeviceFunc>();
|
|||
|
|
|||
|
public static string Module = "Device";
|
|||
|
|
|||
|
public static IDeviceManager Manager { private get; set; }
|
|||
|
|
|||
|
public static void Register(string name, DeviceFunc func)
|
|||
|
{
|
|||
|
lock (_locker)
|
|||
|
{
|
|||
|
if (!deviceFuncs.ContainsKey(name))
|
|||
|
{
|
|||
|
deviceFuncs.Add(name, func);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static void UnRegister(string name)
|
|||
|
{
|
|||
|
lock (_locker)
|
|||
|
{
|
|||
|
deviceFuncs.Remove(name);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool CanDo(string name)
|
|||
|
{
|
|||
|
return deviceFuncs.ContainsKey(name);
|
|||
|
}
|
|||
|
|
|||
|
public static bool? Do(string name, int time, bool isClientCmd, params object[] param)
|
|||
|
{
|
|||
|
bool? result = false;
|
|||
|
lock (_locker)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
result = deviceFuncs[name](out var reason, time, param);
|
|||
|
string text = $"Execute:{name},{reason}";
|
|||
|
if (result.HasValue && !result.Value)
|
|||
|
{
|
|||
|
string text2 = $"Failed to do {name}, {reason}";
|
|||
|
EV.PostMessage(Module, EventEnum.GuiCmdExecFailed, Module, text2);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
EV.PostMessage(Module, EventEnum.GuiCmdExecSucc, Module, text);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LOG.Write(ex, $"Device:执行{name}命令发生异常");
|
|||
|
result = false;
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
public static List<IDevice> GetAllDevice()
|
|||
|
{
|
|||
|
if (Manager != null)
|
|||
|
{
|
|||
|
return Manager.GetAllDevice();
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
public static T GetDevice<T>(string name) where T : class, IDevice
|
|||
|
{
|
|||
|
if (Manager != null)
|
|||
|
{
|
|||
|
return Manager.GetDevice<T>(name);
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
public static object GetDevice(string name)
|
|||
|
{
|
|||
|
if (Manager != null)
|
|||
|
{
|
|||
|
return Manager.GetDevice(name);
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
public static List<T> GetDevice<T>() where T : class, IDevice
|
|||
|
{
|
|||
|
if (Manager != null)
|
|||
|
{
|
|||
|
return Manager.GetDevice<T>();
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
public static object GetOptionDevice(string name, Type type)
|
|||
|
{
|
|||
|
if (Manager != null)
|
|||
|
{
|
|||
|
return Manager.GetOptionDevice(name, type);
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|