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