Class: Gisele::VM::EventManager

Inherits:
Component show all
Defined in:
lib/gisele/vm/event_manager.rb

Instance Method Summary collapse

Methods inherited from Component

#connected!, #connected?, #registered, #registered!, #registered?, #unregistered, #vm

Constructor Details

#initializeEventManager

Returns a new instance of EventManager.



5
6
7
8
# File 'lib/gisele/vm/event_manager.rb', line 5

def initialize
  super()
  @listeners = []
end

Instance Method Details

#connectObject



10
11
12
13
14
15
16
# File 'lib/gisele/vm/event_manager.rb', line 10

def connect
  super
  @channel, @names = EM::Channel.new, {}
  @listeners.each do |l|
    em_subscribe(l)
  end
end

#disconnectObject



18
19
20
21
22
23
24
# File 'lib/gisele/vm/event_manager.rb', line 18

def disconnect
  super
  @listeners.each do |l|
    em_unsubscribe(l)
  end
  @channel = @names = nil
end

#event(event) ⇒ Object



41
42
43
44
45
46
# File 'lib/gisele/vm/event_manager.rb', line 41

def event(event)
  debug(event.to_s)
  @channel.push(event) if connected?
rescue Exception => ex
  error error_message(ex, "Error when processing `#{event.to_s}`")
end

#subscribe(a = nil, &b) ⇒ Object



26
27
28
29
# File 'lib/gisele/vm/event_manager.rb', line 26

def subscribe(a = nil, &b)
  @listeners << (a || b)
  em_subscribe(@listeners.last) if connected?
end

#subscribed?(l) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/gisele/vm/event_manager.rb', line 37

def subscribed?(l)
  @listeners.include?(l)
end

#unsubscribe(l) ⇒ Object



31
32
33
34
35
# File 'lib/gisele/vm/event_manager.rb', line 31

def unsubscribe(l)
  if @listeners.delete(l) and connected?
    em_unsubscribe(l)
  end
end