class AsteriskManager::EventListener

Attributes

connection[RW]
listen_thread[RW]
subscribers[RW]

Public Class Methods

new(arguments = {}) click to toggle source
# File lib/asterisk-manager/event_listener.rb, line 9
def initialize(arguments = {})
  self.connection = arguments[:connection]
  self.subscribers = {}
end

Public Instance Methods

listen() click to toggle source
# File lib/asterisk-manager/event_listener.rb, line 35
def listen
  self.listen_thread = Thread.new do
    event_attributes = {}
    loop do
      line = connection.read_line
      if line == "\r\n"
        notify_subscribers Event.new(event_attributes)
        event_attributes = {}
      else
        key, value = line.chomp.split(': ', 2)
        event_attributes[key] = value
      end
    end
  end
end
notify_subscribers(event) click to toggle source
# File lib/asterisk-manager/event_listener.rb, line 27
def notify_subscribers(event)
  subscribers.each_pair do |subscriber, event_types|
    if event_types.include?(event.type)
      subscriber.receive_event(event)
    end
  end
end
subscribe(subscriber, *event_types) click to toggle source
# File lib/asterisk-manager/event_listener.rb, line 14
def subscribe(subscriber, *event_types)
  subscribers[subscriber] ||= []
  subscribers[subscriber]  |= event_types
end
unsubscribe(subscriber, *event_types) click to toggle source
# File lib/asterisk-manager/event_listener.rb, line 19
def unsubscribe(subscriber, *event_types)
  if event_types
    subscribers[subscriber] -= event_types
  else
    subscribers.delete subscriber
  end
end