/** * Starts the relayer object * * @param Streamwide_Engine_Events_Event $event * @return void */ public function onConnect(Streamwide_Engine_Events_Event $event) { $this->_relayer->setLeftCallLeg($this->_widget->getLeftCallLeg()); $this->_relayer->setRightCallLeg($this->_widget->getRightCallLeg()); if (!$this->_relayer->isRunning()) { $this->_relayer->start(); } // Do we need to treat a MOVED signal? $specification = Streamwide_Engine_NotifyFilter_Factory::factory(Streamwide_Engine_NotifyFilter_Factory::T_EVT_PARAM, Streamwide_Engine_NotifyFilter_Factory::FILTER_INSTANCE_OF, array('moved', 'Streamwide_Engine_Signal')); if ($specification->isSatisfiedBy($event)) { $movedSignal = $event->getParam('moved'); $event = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::MOVED); $event->setParam('signal', $movedSignal); return $this->_relayer->onSignalReceived($event); } }
/** * Starts the relayer if it is not started * * @return boolean */ protected function _startRelayer() { // Notify filter that is satisfied by an event object that has an OKMOVED signal // and that has a "from" parameter that is an instance of Streamwide_Engine_Media_Server_Call_Leg. // The OKMOVED signal has to have a "direction" parameter with a value that is present in the // _allowedNewDirections property $notifyFilter = Streamwide_Engine_NotifyFilter_Factory::factory(Streamwide_Engine_NotifyFilter_Factory::T_EVT_SIG_PARAM_NAME, Streamwide_Engine_NotifyFilter_Factory::FILTER_EQUAL_TO, Streamwide_Engine_Signal::OKMOVED)->logicalAnd(Streamwide_Engine_NotifyFilter_Factory::factory(Streamwide_Engine_NotifyFilter_Factory::T_EVT_PARAM, Streamwide_Engine_NotifyFilter_Factory::FILTER_INSTANCE_OF, array('from', 'Streamwide_Engine_Media_Server_Call_Leg')))->logicalAnd(Streamwide_Engine_NotifyFilter_Factory::factory(Streamwide_Engine_NotifyFilter_Factory::T_EVT_SIG_PARAM_PARAM, Streamwide_Engine_NotifyFilter_Factory::FILTER_IN_ARRAY, array('direction', $this->_allowedNewDirections))); $this->_relayer->addEventListener(Streamwide_Engine_Events_Event::SIGNAL_RELAYED, array('callback' => array($this, 'onSignalRelayed'), 'options' => array('notifyFilter' => $notifyFilter, 'autoRemove' => 'before'))); if (!$this->_relayer->isRunning()) { $started = $this->_relayer->start(); if (!$started) { $this->_relayer->removeEventListener(Streamwide_Engine_Events_Event::SIGNAL_RELAYED, array('callback' => array($this, 'onSignalRelayed'))); return false; } } return true; }