/** * Kills a call leg * * @param Streamwide_Engine_Call_Leg_Abstract $callLeg * @param boolean $force * @return boolean */ public function kill(Streamwide_Engine_Call_Leg_Abstract $callLeg, $force = false) { if (false === $force && !$callLeg->isAlive()) { $this->dispatchErrorEvent(self::CALL_LEG_NOT_ALIVE_ERR_CODE); return false; } $callLegName = $callLeg->getName(); $signal = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::KILL, $callLegName); if (false === $signal->send()) { $this->dispatchErrorEvent(self::KILL_SIGNAL_SEND_FAILURE_ERR_CODE); return false; } $callLeg->setDead(); $event = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::SUCCESS); $event->setParam('callLeg', $callLeg); $this->dispatchEvent($event); return true; }
/** * Handle CHILD signal. The call leg has died. We need to dispatch an error event * * @param Streamwide_Engine_Signal $signal * @param string $errorCode * @return void */ protected function _handleChildSignal(Streamwide_Engine_Signal $signal, $errorCode) { $this->_unsubscribeFromEngineEvents(); $this->_callLeg->setDead(); return $this->dispatchErrorEvent($errorCode, array('callLeg' => $this->_callLeg)); }