예제 #1
0
        /// <summary>
        /// 전원 상태 감지 시스템을 초기화하고 시작합니다.
        /// 처음 한 번만 호출하거나, Stop()을 먼저 호출한 후에 호출해야 합니다.
        /// </summary>
        public void InitPowerEvents()
        {
            var q = new WqlEventQuery();

            q.EventClassName       = "Win32_PowerManagementEvent";
            managementEventWatcher = new ManagementEventWatcher(q);
            managementEventWatcher.EventArrived += PowerEventArrive;

            if (OnPowerSuspend != null)
            {
                foreach (Delegate d in OnPowerSuspend.GetInvocationList())
                {
                    OnPowerSuspend -= (PowerEvent)d;
                }
            }
            if (OnPowerResume != null)
            {
                foreach (Delegate d in OnPowerResume.GetInvocationList())
                {
                    OnPowerResume -= (PowerEvent)d;
                }
            }

            managementEventWatcher.Start();

            //SystemEvents.PowerModeChanged += OnPowerChange;
        }
예제 #2
0
        public virtual void Update()
        {
            if (_connectedRelay == null)
            {
                return;
            }

            //_energyToConsume = EnergyConsumptionPerSecond * DayNightCycle.main.deltaTime;
            bool requiresEnergy    = GameModeUtils.RequiresPower();
            bool hasPowerToConsume = !requiresEnergy || (this.AvailablePower >= EnergyConsumptionPerSecond);

            if (hasPowerToConsume && _prevPowerState != FCSPowerStates.Powered)
            {
                OnPowerResume?.Invoke();
                _prevPowerState = FCSPowerStates.Powered;
            }
            else if (!hasPowerToConsume && _prevPowerState != FCSPowerStates.Unpowered)
            {
                OnPowerOutage?.Invoke();
                _prevPowerState = FCSPowerStates.Unpowered;
            }

            //if (this.NotAllowToOperate)
            //    return;

            //if (!hasPowerToConsume)
            //    return;

            //if (requiresEnergy)
            //    _connectedRelay.ConsumeEnergy(_energyToConsume, out float amountConsumed);
        }
예제 #3
0
 private void PowerEventArrive(object sender, EventArrivedEventArgs e)
 {
     foreach (PropertyData pd in e.NewEvent.Properties)
     {
         if (pd == null || pd.Value == null)
         {
             continue;
         }
         var name = powerValues.ContainsKey(pd.Value.ToString())
                        ? powerValues[pd.Value.ToString()]
                        : pd.Value.ToString();
         Console.WriteLine("PowerEvent:" + name);
         if (pd.Value.ToString() == "4" && OnPowerSuspend != null &&
             OnPowerSuspend.GetInvocationList().Length > 0)
         {
             OnPowerSuspend();
         }
         else if (pd.Value.ToString() == "7" && OnPowerResume != null &&
                  OnPowerResume.GetInvocationList().Length > 0)
         {
             OnPowerResume();
         }
     }
 }