Beispiel #1
0
        private void PublishEvents(ButtonStateValue state)
        {
            if (state == ButtonStateValue.Pressed)
            {
                _pressedDurationStopwatch.Restart();

                if (!_messageBroker.HasSubscribers <ButtonPressedLongEvent>(Id))
                {
                    _messageBroker.Publish(Id, new ButtonPressedShortEvent());
                }
                else
                {
                    _pressedLongTimeout.Start(Settings.PressedLongDuration);
                }
            }
            else if (state == ButtonStateValue.Released)
            {
                _pressedDurationStopwatch.Stop();

                if (_pressedLongTimeout.IsEnabled && !_pressedLongTimeout.IsElapsed)
                {
                    _pressedLongTimeout.Stop();
                    _messageBroker.Publish(Id, new ButtonPressedShortEvent());
                }

                _log.Verbose($"Button '{Id}' pressed for {_pressedDurationStopwatch.ElapsedMilliseconds} ms.");
            }
        }
        public static bool TryGetButtonState(this IComponent component, out ButtonStateValue value)
        {
            if (component == null)
            {
                throw new ArgumentNullException(nameof(component));
            }

            return(TryGetStateValue <ButtonState, ButtonStateValue>(component, s => s.Value, out value));
        }
Beispiel #3
0
        private void ProcessChangedInputState(ButtonStateValue state)
        {
            if (!Settings.IsEnabled)
            {
                return;
            }

            if (_state == state)
            {
                return;
            }

            var oldState = GetState();

            _state = state;

            OnStateChanged(oldState);
            InvokeTriggers(state);
        }
Beispiel #4
0
 private void InvokeTriggers(ButtonStateValue state)
 {
     if (state == ButtonStateValue.Pressed)
     {
         if (!PressedLongTrigger.IsAnyAttached)
         {
             ((Trigger)PressedShortTrigger).Execute();
         }
         else
         {
             _pressedLongTimeout.Start(Settings.PressedLongDuration);
         }
     }
     else if (state == ButtonStateValue.Released)
     {
         if (!_pressedLongTimeout.IsElapsed)
         {
             _pressedLongTimeout.Stop();
             ((Trigger)PressedShortTrigger).Execute();
         }
     }
 }
Beispiel #5
0
        private void UpdateState(object sender, ButtonAdapterStateChangedEventArgs e)
        {
            var state = e.State == AdapterButtonState.Pressed ? ButtonStateValue.Pressed : ButtonStateValue.Released;

            lock (_syncRoot)
            {
                if (!Settings.IsEnabled)
                {
                    return;
                }

                if (_state == state)
                {
                    return;
                }

                var oldState = GetState();
                _state = state;

                OnStateChanged(oldState);
                PublishEvents(state);
            }
        }