public void Process(InputMessageConverter inputMessage)
    {
        var input  = inputMessage.GetInputDescriptor <AxisMessage>();
        var device = _joystickCollection.GetDevice(input.DeviceId);

        device.SetAxis(input.Axis, input.Value);
        _logger.LogInformation($"Axis: {input.DeviceId} {input.Axis} {input.Value}");
    }
    public void Process(InputMessageConverter inputMessage)
    {
        var input  = inputMessage.GetInputDescriptor <JoystickMessage>();
        var device = _joystickCollection.GetDevice(input.DeviceId);

        device.SetButton(input.Button, input.IsPressed);
        _logger.LogInformation($"Button: {input.DeviceId} {input.Button} {input.IsPressed}");
    }
    public void Process(InputMessage input)
    {
        var inputMessage = new InputMessageConverter(input.ExtensionData);

        foreach (var inputProcessor in _inputProcessors)
        {
            if (inputProcessor.InputType == input.Type)
            {
                inputProcessor.Process(inputMessage);
            }
        }
    }
    public void Process(InputMessageConverter inputMessage)
    {
        var input = inputMessage.GetInputDescriptor <CommandMessage>();

        var startInfo = new ProcessStartInfo {
            FileName        = input.Command,
            Arguments       = input.Args,
            UseShellExecute = true,
        };

        System.Diagnostics.Process.Start(startInfo);
        _logger.LogInformation($"Command: {input.Command} {input.Args}");
    }
    public void Process(InputMessageConverter inputMessage)
    {
        var input = inputMessage.GetInputDescriptor <KeyboardMessage>();

        var virtualKey = KeyChord.GetVirtualKey(input.Key);

        if (virtualKey != 0)
        {
            Keyboard.SetKey(virtualKey, (ModifierKeys)input.Modifiers, input.IsPressed);
        }
        else if (input.Key.Length > 1)
        {
            throw new ArgumentException($"Invalid input key '{input.Key}'.");
        }
        else
        {
            Keyboard.SetKey(input.Key[0], (ModifierKeys)input.Modifiers, input.IsPressed);
        }
        _logger.LogInformation($"Key: {input.Key} {input.IsPressed}");
    }
    public void Process(InputMessage input2)
    {
        var inputMessage = new InputMessageConverter(input2.ExtensionData);
        var input        = inputMessage.GetInputDescriptor <MacroMessage>();

        foreach (var action in input.Actions)
        {
            if (action.Type == InputType.Delay)
            {
                var inputMessage3 = new InputMessageConverter(action.ExtensionData);
                var input3        = inputMessage3.GetInputDescriptor <DelayMessage>();
                _logger.LogInformation($"Delay: {input3.Delay}");
                Thread.Sleep(input3.Delay);
            }
            else
            {
                _inputProcessor.Process(action);
            }
        }
    }