示例#1
0
 public static IList <IDevice> GetAllDevices(this IDeviceGroup deviceGroup)
 {
     return(deviceGroup
            .GetAllNodesUsingTraverseFromTopLeft()
            .SelectMany(x => x.Devices)
            .ToList());
 }
示例#2
0
 void AppendParent(IDeviceGroup deviceGroup, IDeviceGroup parent = null)
 {
     deviceGroup.Parent = parent;
     foreach (var @group in deviceGroup.DeviceGroups)
     {
         AppendParent(group, deviceGroup);
     }
 }
示例#3
0
//        private void NotifyMissedDeviceName(string deviceName)
//        {
//            Debug.WriteLine("deviceName is not be found: " + deviceName);
//            MissedDeviceCount++;
//        }
//
//        public IDevice<T> GetDevice<T>(string deviceName)
//        {
//            var device = Context.Devices.SingleOrDefault(x => x.Name == deviceName);
//            var deviceT = device as IDevice<T>;
//            if (deviceT != null) return deviceT;
//
//            NotifyMissedDeviceName(deviceName);
//            MissedDeviceCount++;
//
//            IDevice sharedDevice;
//            var isExist = _sharedDevices.TryGetValue(deviceName, out sharedDevice);
//            if (isExist)
//                return sharedDevice as IDevice<T>;
//
//            var newDevice = ServiceLocator.GetInstance<ISimpleDevice<T>>();
//            _sharedDevices.Add(deviceName, newDevice);
//
//            return newDevice;
//        }

        public void Initialize(IDeviceGroup context)
        {
            OnInitializing(context);

            _context = context;

            OnInitialized(context);
        }
示例#4
0
        public static IDevice GetDevice(this IDeviceGroup deviceGroup, string deviceName, Type dataType)
        {
            MethodInfo mi = typeof(IDeviceGroup).GetMethod("GetDevice");

            mi = mi.MakeGenericMethod(new Type[] { dataType });

            var o = mi.Invoke(deviceGroup, new object[] { deviceName });

            return(o as IDevice);
        }
示例#5
0
        public void Reset()
        {
            OnResetting(Context);

            var context = _context;

            _context = null;

            OnReset(context);
        }
示例#6
0
 public Mood(
     IDeviceGroup deviceGroup,
     Request moodRequest,
     int id,
     Func <int, Task <IDevice> > getDeviceFunc)
 {
     _moodRequest   = moodRequest;
     _getDeviceFunc = getDeviceFunc;
     DeviceGroup    = deviceGroup;
     Id             = id;
 }
示例#7
0
        public void Initial()
        {
            string wurflDataFile  = HttpContext.Current.Server.MapPath(Constants.WurflDataFilePath);
            string wurflPatchFile = HttpContext.Current.Server.MapPath(Constants.WurflPatchFilePath);

            InMemoryConfigurer configurer = new InMemoryConfigurer().MainFile(wurflDataFile).PatchFile(wurflPatchFile);
            IWURFLManager      manager    = WURFLManagerBuilder.Build(configurer);

            AppCtx.Cache.AddObject(Constants.WurflManagerCacheKey, manager);

            #region 初始化所有的设备组实现类
            if (deviceGroups == null)
            {
                deviceGroups = new List <IDeviceGroup>();
            }
            if (deviceGroups.Count == 0)
            {
                GeneralConfigInfo si = GeneralConfigs.GetConfig();
                if (string.IsNullOrEmpty(si.DeviceGroups))
                {
                    Exception ex = new Exception("请配置IDeviceGroup设备组接口的实现类,在general.config里配置。");
                    Framework.LogHelper.WriteLog(GetType(), ex);
                    throw ex;
                }
                string[] DeviceGroups = si.DeviceGroups.Split(';');
                foreach (string s in DeviceGroups)
                {
                    Assembly     assembly  = Assembly.Load(s.Split(',')[1]);
                    string       className = s.Split(',')[0];
                    IDeviceGroup gGroup    = (IDeviceGroup)assembly.CreateInstance(className, true);
                    gGroup.Initial();
                    deviceGroups.Add(gGroup);
                }
                deviceGroups.Sort(new DeviceGroupComparer());
                deviceGroups.Reverse();
            }

            #endregion
        }
示例#8
0
 protected virtual void OnInitializing(IDeviceGroup context)
 {
 }
示例#9
0
 protected override void OnInitialized(IDeviceGroup context)
 {
     base.OnInitialized(context);
 }
示例#10
0
 protected virtual void OnBindingTo(IDeviceGroup context)
 {
 }
示例#11
0
        protected override void OnInitialized(IDeviceGroup context)
        {
            base.OnInitialized(context);

            var type = this.GetType();

/*            foreach (var prop in type.GetProperties())
 *          {
 *              var attri = prop.GetCustomAttributes(typeof(DeviceAttribute), false).FirstOrDefault() as DeviceAttribute;
 *              if (attri == null) continue;
 *
 *              var dataType = prop.PropertyType.GetGenericArguments()[0];
 *
 *              string deviceName;
 *              if (attri.Key == null || string.IsNullOrEmpty(attri.Key.ToString()))
 *              {
 *                  var i = prop.Name.LastIndexOf("Device", System.StringComparison.Ordinal);
 *                  if (i == -1)
 *                  {
 *                      throw new InvalidOperationException("DeviceAttribute must declare name end with [Device]");
 *                  }
 *                  deviceName = prop.Name.Remove(i, "Device".Count());
 *              }
 *              else
 *              {
 *                  deviceName = attri.Key.ToString();
 *              }
 *
 *              var device = Context.GetDevice(deviceName, dataType);
 *              this.SetPropertyValue(prop.Name, device);
 *          }*/

            var attributePropertyInfos = type.GetAttributePropertyInfos(typeof(DeviceAttribute), false);

            foreach (var attributePropertyInfo in attributePropertyInfos)
            {
//                var attri = prop.GetCustomAttributes(typeof(DeviceAttribute), false).FirstOrDefault() as DeviceAttribute;
//                if (attri == null) continue;

                var attri    = (DeviceAttribute)attributePropertyInfo.Attribute;
                var prop     = attributePropertyInfo.PropertyInfo;
                var dataType = prop.PropertyType.GetGenericArguments()[0];

                string deviceName;
                if (attri.Key == null || string.IsNullOrEmpty(attri.Key.ToString()))
                {
                    var i = prop.Name.LastIndexOf("Device", System.StringComparison.Ordinal);
                    if (i == -1)
                    {
                        throw new InvalidOperationException("DeviceAttribute must declare name end with [Device]");
                    }
                    deviceName = prop.Name.Remove(i, "Device".Count());
                }
                else
                {
                    deviceName = attri.Key.ToString();
                }

                var device = Context.GetDevice(deviceName, dataType);
                this.SetPropertyValue(prop.Name, device);
            }
        }
示例#12
0
 /// <summary>TRUE allows a device to change states only once</summary>
 public void device_group_change_only_once_more_set(IDeviceGroup device_group, bool boolean)
 {
 }
示例#13
0
 /// <summary>changes the desired value of the specified device group.</summary>
 public void device_group_set(IDevice device, IDeviceGroup device_group, float real)
 {
 }
示例#14
0
 protected virtual void OnReset(IDeviceGroup context)
 {
 }
示例#15
0
 public static IDevice <T> GetDevice <T>(this IDeviceGroup deviceGroup, object deviceName)
 {
     return(deviceGroup.GetDevice <T>(deviceName.ToString()));
 }
示例#16
0
 public static IDeviceGroup GetDeviceGroupByName(this IDeviceGroup deviceGroup, string deviceGroupName)
 {
     return(GetDeviceGroupsByName(deviceGroup, deviceGroupName).FirstOrDefault());
 }
示例#17
0
 public static IEnumerable <IDeviceGroup> GetDeviceGroupsByName(this IDeviceGroup deviceGroup,
                                                                string deviceGroupName,
                                                                int count)
 {
     return(GetDeviceGroupsByName(deviceGroup, deviceGroupName).Take(count));
 }
示例#18
0
 public static IEnumerable <IDeviceGroup> GetDeviceGroupsByName(this IDeviceGroup deviceGroup,
                                                                string deviceGroupName)
 {
     return(deviceGroup.DeviceGroups.Where(x => x.Name == deviceGroupName));
 }
示例#19
0
        public void BindingTo(IDeviceGroup context)
        {
            _context = context;

            OnBindingTo(context);
        }
示例#20
0
 public static IRetainedSubject <T> GetSharedSubject <T>(this IDeviceGroup deviceGroup, object deviceName)
 {
     return(deviceGroup.GetSharedSubject <T>(deviceName.ToString()));
 }
示例#21
0
 /// <summary>returns the desired value of the specified device group.</summary>
 public float device_group_get(IDeviceGroup device_group)
 {
     return(default(float));
 }
示例#22
0
 public static IDevice <bool> GetBooleanDevice(this IDeviceGroup deviceGroup, object deviceName)
 {
     return(deviceGroup.GetDevice <bool>(deviceName.ToString()));
 }
示例#23
0
 /// <summary>instantaneously changes the value of the specified device group.</summary>
 public void device_group_set_immediate(IDeviceGroup device_group, float real)
 {
 }
示例#24
0
 public static IDevice <int> GetInt32Device(this IDeviceGroup deviceGroup, object deviceName)
 {
     return(deviceGroup.GetDevice <int>(deviceName.ToString()));
 }