Class: Torkify::Conductor

Inherits:
Object
  • Object
show all
Defined in:
lib/torkify/conductor.rb

Overview

Connect the socket reader and observers, and dispatch events.

Instance Method Summary collapse

Constructor Details

#initialize(observers) ⇒ Conductor

Create with a set of observers.



11
12
13
# File 'lib/torkify/conductor.rb', line 11

def initialize(observers)
  @dispatcher = Event::Dispatcher.new observers
end

Instance Method Details

#observersObject



15
16
17
# File 'lib/torkify/conductor.rb', line 15

def observers
  @dispatcher.observers
end

#observers=(*args) ⇒ Object



19
20
21
# File 'lib/torkify/conductor.rb', line 19

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

#start(reader) ⇒ Object

Start reading from the reader, which is an IO-like object.

Parse each line and dispatch it as an event object to all observers.



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/torkify/conductor.rb', line 26

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