Sha256: be7b813aec960b85f095913b2ce7752749571628456dca72bdde9895ed27dd9f

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

# frozen_string_literal: true

require_relative "./input"

module Fusuma
  module Plugin
    module Inputs
      # libinput commands wrapper
      class TimerInput < Input
        DEFAULT_INTERVAL = 0.3
        def config_param_types
          {
            interval: [Float]
          }
        end

        attr_reader :pid

        def io
          @io ||= begin
            reader, writer = create_io
            @pid = start(reader, writer)

            reader
          end
        end

        def start(reader, writer)
          pid = fork do
            timer_loop(reader, writer)
          end
          Process.detach(pid)
          writer.close
          pid
        end

        def timer_loop(reader, writer)
          reader.close
          begin
            loop do
              sleep interval
              writer.puts "timer"
            end
          rescue Errno::EPIPE
            exit 0
          rescue => e
            MultiLogger.error e
          end
        end

        private

        def create_io
          IO.pipe
        end

        def interval
          config_params(:interval) || DEFAULT_INTERVAL
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fusuma-2.5.1 lib/fusuma/plugin/inputs/timer_input.rb
fusuma-2.5.0 lib/fusuma/plugin/inputs/timer_input.rb