Method: Adhearsion::CallController::Dial::Dial#split
- Defined in:
- lib/adhearsion/call_controller/dial.rb
permalink #split(targets = {}) ⇒ Object
Split calls party to the dial Marks the end time in the status of each join, but does not unblock #dial until one of the calls ends Optionally executes call controllers on calls once split, where ‘current_dial’ is available in controller metadata in order to perform further operations on the Dial, including rejoining and termination.
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
# File 'lib/adhearsion/call_controller/dial.rb', line 230 def split(targets = {}) @splitting = true calls_to_split = @calls.map do |call| ignoring_ended_calls do [call.id, call] if call.active? end end.compact logger.info "Splitting off peer calls #{calls_to_split.map(&:first).join ", "}" calls_to_split.each do |id, call| ignoring_ended_calls do logger.debug "Unjoining peer #{call.id} from #{join_target}" ignoring_missing_joins { call.unjoin join_target } if split_controller = targets[:others] logger.info "Executing controller #{split_controller} on split call #{call.id}" call.execute_controller split_controller.new(call, 'current_dial' => self), targets[:others_callback] end end end ignoring_ended_calls do if join_target != @call logger.debug "Unjoining main call #{@call.id} from #{join_target}" @call.unjoin join_target end if split_controller = targets[:main] logger.info "Executing controller #{split_controller} on main call" @call.execute_controller split_controller.new(@call, 'current_dial' => self), targets[:main_callback] end end end |