class Adhearsion::Calls
This manages the list of calls the Adhearsion
service receives
Public Class Methods
new()
click to toggle source
# File lib/adhearsion/calls.rb, line 9 def initialize @mutex = ::Monitor.new @calls = {} restart_supervisor end
Public Instance Methods
<<(call)
click to toggle source
# File lib/adhearsion/calls.rb, line 15 def <<(call) @supervisor.link call @mutex.synchronize do self[call.id] = call by_uri[call.uri] = call end self end
remove_inactive_call(call)
click to toggle source
# File lib/adhearsion/calls.rb, line 24 def remove_inactive_call(call) if call_is_dead?(call) call_id = key call delete call_id if call_id remove_call_uri call elsif call.respond_to?(:id) delete call.id remove_call_uri call else call_actor = delete call remove_call_uri call_actor end end
restart_supervisor()
click to toggle source
# File lib/adhearsion/calls.rb, line 53 def restart_supervisor @supervisor.terminate if @supervisor @supervisor = Supervisor.new self end
with_tag(tag)
click to toggle source
# File lib/adhearsion/calls.rb, line 39 def with_tag(tag) values.find_all do |call| begin call.tagged_with? tag rescue Call::ExpiredError false end end end
with_uri(uri)
click to toggle source
# File lib/adhearsion/calls.rb, line 49 def with_uri(uri) by_uri[uri] end
Private Instance Methods
by_uri()
click to toggle source
# File lib/adhearsion/calls.rb, line 60 def by_uri @by_uri ||= {} end
call_is_dead?(call)
click to toggle source
# File lib/adhearsion/calls.rb, line 69 def call_is_dead?(call) !call.alive? rescue ::NoMethodError false end
method_missing(method, *args, &block)
click to toggle source
# File lib/adhearsion/calls.rb, line 75 def method_missing(method, *args, &block) @mutex.synchronize do @calls.send method, *args, &block end end
remove_call_uri(call)
click to toggle source
# File lib/adhearsion/calls.rb, line 64 def remove_call_uri(call) uri = by_uri.key call by_uri.delete uri if uri end