Sha256: a1cf23278241d1845872a41d4f77952cb56e9813ea33fba4f20042e711482fa6

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true

require_relative './input.rb'

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 :writer

        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 StandardError => 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

1 entries across 1 versions & 1 rubygems

Version Path
fusuma-2.0.0.pre lib/fusuma/plugin/inputs/timer_input.rb