Sha256: 139cdede1f500f0fcceae22afd4f9d4a5b64d597b27f595ab3a301ea50f646d6

Contents?: true

Size: 1.05 KB

Versions: 2

Compression:

Stored size: 1.05 KB

Contents

require_relative 'event/basic_event'
require_relative 'event/parser'
require_relative 'event/dispatcher'
require_relative 'log/parser'

module Torkify

  # Connect the socket reader and observers, and dispatch events.
  class Conductor
    # Create with a set of observers.
    def initialize(observers)
      @dispatcher = Event::Dispatcher.new observers
    end

    def observers
      @dispatcher.observers
    end

    def observers=(*args)
      @dispatcher.send :observers=, *args
    end

    # Start reading from the reader, which is an IO-like object.
    #
    # Parse each line and dispatch it as an event object to all observers.
    def start(reader)
      dispatch Event::BasicEvent.new 'startup'
      parser = Event::Parser.new

      while line = reader.gets
        Torkify.logger.debug { "Read line: #{line}" }
        events = parser.parse line
        dispatch(*events)
      end

      dispatch Event::BasicEvent.new 'shutdown'
    end

    protected
    def dispatch(*events)
      events.each { |event| @dispatcher.dispatch(event) }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
torkify-0.0.3 lib/torkify/conductor.rb
torkify-0.0.2 lib/torkify/conductor.rb