/** * Handles a key press (delegates to internal methods) * * @param Streamwide_Engine_Events_Event $event * @return void */ public function onKeyPressed(Streamwide_Engine_Events_Event $event) { $eventType = $event->getEventType(); $key = $event->getParam('receivedKey'); $promptType = $event->getContextParam('promptType'); switch ($eventType) { case Streamwide_Engine_Events_Event::KEY: $this->_handleValidKey($key, $promptType); break; case Streamwide_Engine_Events_Event::UNEXPECTED_KEY: $this->_handleInvalidKey($key, $promptType); break; } }
/** * Deal with the 2 possible timeout types * * @param Streamwide_Engine_Events_Event $event * @return void */ public function onTimeout(Streamwide_Engine_Events_Event $event) { $timeoutType = $event->getContextParam('timeoutType'); if (self::TIMEOUT_FIRSTDIGIT === $timeoutType) { $shouldPromptOnNoInput = !empty($this->_options[self::OPT_NO_INPUT_PROMPT_PLAYLIST]); if ($shouldPromptOnNoInput) { $this->_saveTry(); $this->_counter->decrement(); if ($this->_counter->hasMoreTries()) { $this->_listenForKeyPresses(self::PROMPT_NO_INPUT); $this->_playNoInputPrompt(); } else { $this->dispatchErrorEvent(self::NO_TRIES_LEFT_ERR_CODE); } } else { $this->_retry(); } } elseif (self::TIMEOUT_INTERDIGIT === $timeoutType) { $this->_timer->reset(); $this->_mediaPlayer->reset(); $this->_dtmfHandler->reset(); $event = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::FINISHED); $event->setParam('number', $this->_number); $this->dispatchEvent($event); } else { throw new RuntimeException('Invalid context'); } }