コード例 #1
0
ファイル: Relayer.php プロジェクト: cwcw/cms
 /**
  * Treat an event by relaying the received signal
  *
  * @param Streamwide_Engine_Events_Event $event
  * @return void
  * @throws RuntimeException
  */
 public function onSignalReceived(Streamwide_Engine_Events_Event $event)
 {
     $signal = $event->getParam('signal');
     if (null === $signal) {
         return null;
     }
     // update call leg flags
     $this->_updateCallLegFlags($signal->getName());
     // check to see if any of the call legs involved
     // in the relaying process has died
     if ($this->_isCallLegDead) {
         return $this->_handleCallLegDeath($signal->getRemote());
     }
     // relay the signal
     if (false === $this->_relaySignal($signal)) {
         return null;
     }
     // update the call leg parameters
     $this->_updateCallLegParams($signal->getRemote(), $signal->getParams());
     // deal with relay session
     $this->_startOrEndRelaySession($event);
     // dispatch the SIGNAL_RELAYED event
     $signalRelayedEvt = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::SIGNAL_RELAYED);
     $params = array('signal' => $signal, 'from' => $this->_relayFlow === self::LEFT_TO_RIGHT_RELAY ? $this->_leftCallLeg : $this->_rightCallLeg, 'to' => $this->_relayFlow === self::RIGHT_TO_LEFT_RELAY ? $this->_leftCallLeg : $this->_rightCallLeg);
     $signalRelayedEvt->setParams($params);
     return $this->dispatchEvent($signalRelayedEvt);
 }