lib/punchblock/connection/freeswitch.rb
# encoding: utf-8
require 'ruby_fs'
module Punchblock
module Connection
class Freeswitch < GenericConnection
attr_reader :translator, :stream
attr_accessor :event_handler
def initialize(options = {})
@translator = Translator::Freeswitch.new self
@stream_options = options.values_at(:host, :port, :password)
@stream = new_fs_stream
super()
end
def run
pb_logger.debug "Starting the RubyFS stream"
start_stream
raise DisconnectedError
end
def stop
stream.shutdown
translator.terminate
end
def write(command, options)
translator.async.execute_command command, options
end
def handle_event(event)
event_handler.call event if event_handler.respond_to?(:call)
end
private
def new_fs_stream
RubyFS::Stream.new(*@stream_options, lambda { |e| translator.async.handle_es_event e }, event_mask)
end
def event_mask
%w{CHANNEL_PARK CHANNEL_ANSWER CHANNEL_STATE CHANNEL_HANGUP CHANNEL_BRIDGE CHANNEL_UNBRIDGE CHANNEL_EXECUTE_COMPLETE DTMF RECORD_STOP}
end
def start_stream
@stream = new_fs_stream unless @stream.alive?
@stream.run
end
end
end
end