Class: AsteriskManager::EventListener

Inherits:
Object
  • Object
show all
Defined in:
lib/asterisk-manager/event_listener.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(arguments = {}) ⇒ EventListener

Returns a new instance of EventListener.



9
10
11
12
# File 'lib/asterisk-manager/event_listener.rb', line 9

def initialize(arguments = {})
  self.connection = arguments[:connection]
  self.subscribers = {}
end

Instance Attribute Details

#connectionObject

Returns the value of attribute connection.



5
6
7
# File 'lib/asterisk-manager/event_listener.rb', line 5

def connection
  @connection
end

#listen_threadObject

Returns the value of attribute listen_thread.



5
6
7
# File 'lib/asterisk-manager/event_listener.rb', line 5

def listen_thread
  @listen_thread
end

#subscribersObject

Returns the value of attribute subscribers.



5
6
7
# File 'lib/asterisk-manager/event_listener.rb', line 5

def subscribers
  @subscribers
end

Instance Method Details

#listenObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 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) ⇒ Object



27
28
29
30
31
32
33
# 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) ⇒ Object



14
15
16
17
# 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) ⇒ Object



19
20
21
22
23
24
25
# 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