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