lib/adhearsion/initializer/asterisk.rb in sevenscale-adhearsion-0.7.1003 vs lib/adhearsion/initializer/asterisk.rb in sevenscale-adhearsion-0.8.0
- old
+ new
@@ -6,13 +6,13 @@
cattr_accessor :config, :agi_server, :ami_client
class << self
def start
- self.config = Adhearsion::AHN_CONFIG.asterisk
+ self.config = AHN_CONFIG.asterisk
self.agi_server = initialize_agi
- self.ami_client = initialize_ami if config.ami_enabled?
+ self.ami_client = VoIP::Asterisk.manager_interface = initialize_ami if config.ami_enabled?
join_server_thread_after_initialized
end
def stop
agi_server.stop
@@ -20,36 +20,58 @@
end
private
def initialize_agi
- Adhearsion::VoIP::Asterisk::AGI::Server.new :host => config.listening_host,
- :port => config.listening_port
+ VoIP::Asterisk::AGI::Server.new :host => config.listening_host,
+ :port => config.listening_port
end
def initialize_ami
options = ami_options
start_ami_after_initialized
- Adhearsion::VoIP::Asterisk::AMI.new options[:username], options[:password],
- options[:host], :port => options[:port],
- :events => options[:events]
+ returning VoIP::Asterisk::Manager::ManagerInterface.new(options) do
+ class << VoIP::Asterisk
+ if respond_to?(:manager_interface)
+ ahn_log.warn "Asterisk.manager_interface already initialized?"
+ else
+ def manager_interface
+ # ahn_log.ami.warn "Warning! This Asterisk.manager_interface() notation is for Adhearsion version 0.8.0 only. Subsequent versions of Adhearsion will use a feature called SuperManager. Migrating to use SuperManager will be very simple. See http://docs.adhearsion.com/AMI for more information."
+ Adhearsion::Initializer::AsteriskInitializer.ami_client
+ end
+ end
+ end
+ end
end
def ami_options
%w(host port username password events).inject({}) do |options, property|
options[property.to_sym] = config.ami.send property
options
end
end
def join_server_thread_after_initialized
- Adhearsion::Hooks::AfterInitialized.create_hook { agi_server.start }
- Adhearsion::Hooks::ThreadsJoinedAfterInitialized.create_hook { agi_server.join }
+ Events.register_callback(:after_initialized) do
+ begin
+ agi_server.start
+ rescue => e
+ ahn_log.fatal "Failed to start AGI server! #{e.inspect}"
+ abort
+ end
+ end
+ IMPORTANT_THREADS << agi_server
end
def start_ami_after_initialized
- Adhearsion::Hooks::AfterInitialized.create_hook do
- ami_client.connect!
+ Events.register_callback(:after_initialized) do
+ begin
+ self.ami_client.connect!
+ rescue Errno::ECONNREFUSED
+ ahn_log.ami.error "Connection refused when connecting to AMI! Please check your configuration."
+ rescue => e
+ ahn_log.ami.error "Error connecting to AMI! #{e.inspect}"
+ end
end
end
end
end