123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Aitex.Core.Util;
- using Aitex.Core.RT.Log;
- using Aitex.Core.RT.Event;
- using Aitex.Core.RT.Device;
- namespace Aitex.Core.RT.Device
- {
- public class DEVICE
- {
- public static IDeviceManager Manager { set; private get; }
- /// <summary>
- /// 注册命令执行方法的定义
- /// </summary>
- /// <param name="parameter1">命令参数1</param>
- /// <param name="parameter2">命令参数2</param>
- /// <param name="cmdExecutingTime_ms">命令执行时间</param>
- /// <param name="reason">如果执行失败,在此写明失败理由</param>
- /// <returns>True:执行成功 | False:执行失败</returns>
- 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";
- /// <summary>
- /// 注册反应腔命令
- /// </summary>
- /// <param name="name">命令名</param>
- /// <param name="func">命令执行</param>
- public static void Register(string name, DeviceFunc func)
- {
- lock (_locker)
- {
- if(!deviceFuncs.ContainsKey(name))
- deviceFuncs.Add(name, func);
- }
- }
- /// <summary>
- /// 反注册命令
- /// </summary>
- /// <param name="cmdName"></param>
- public static void UnRegister(string name)
- {
- lock (_locker)
- {
- deviceFuncs.Remove(name);
- }
- }
- /// <summary>
- /// 检测命令是否支持
- /// </summary>
- /// <param name="cmdName"></param>
- /// <returns></returns>
- public static bool CanDo(string name)
- {
- return deviceFuncs.ContainsKey(name);
- }
- /// <summary>
- /// 执行命令
- /// </summary>
- /// <param name="cmdName">命令名</param>
- /// <param name="param1">参数1</param>
- /// <param name="param2">参数2</param>
- /// <param name="time">时间(单位:ms)</param>
- /// <param name="isClientCmd">是否来自客户端</param>
- /// <returns>True:命令执行成功, False:命令执行失败, Nulltime, :命令执行结果未知</returns>
- public static bool? Do(string name, int time, bool isClientCmd, params object[] param)
- {
- bool? ret = false;
- string reason;
- string cmd = name;
- lock (_locker)
- {
- try
- {
-
- //执行命令
- ret = deviceFuncs[name].Invoke(out reason, time, param);
- string result = string.Format("Execute:{0},{1}", name, reason);
- //LOG.Write(result);
- if (ret.HasValue && !ret.Value)
- {
- string msg = String.Format("Failed to do {0}, {1}", name, reason);
- EV.PostMessage(Module, EventEnum.GuiCmdExecFailed, Module, msg);
- }
- else
- {
- EV.PostMessage(Module, EventEnum.GuiCmdExecSucc, Module, result);
- }
- }
- catch (Exception ex)
- {
- LOG.WriteExeption(string.Format("Device:执行{0}命令发生异常",name), ex);
- ret = false;
- }
- }
- return ret;
- }
- 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 List<T> GetDevice<T>() where T : class, IDevice
- {
- if (Manager != null)
- return Manager.GetDevice<T>();
- return null;
- }
- }
- }
|