Exemplo n.º 1
0
 protected function dispatchIfNotExists($id, $parameters, $domain, $locale)
 {
     if (null === $domain) {
         $domain = 'messages';
     }
     $id = (string) $id;
     if ($this->getCatalogue()->defines($id, $domain)) {
         return;
     }
     $event = new MissingTranslationEvent($id, $parameters, $domain, $locale === null ? $this->getCatalogue()->getLocale() : $locale);
     $this->eventDispatcher->dispatch(MissingTranslationEvent::EVENT_NAME, $event);
 }
Exemplo n.º 2
0
 /**
  * Flushes all queue changes to the server.
  *
  * @param \SplQueue $queue
  */
 public function flush(\SplQueue $queue)
 {
     if ($this->locked) {
         $this->memcache->delete('queue.manager');
         $this->memcache->set('queue.manager', serialize($queue));
         $this->locked = false;
         $this->memcache->delete('queue.manager.lock');
     } else {
         $this->eventDispatcher->dispatch('queue.manager.flushed', new ManagerFlushedEvent(ManagerFlushedEvent::STATUS_FLUSH_FAILED_NOLOCK));
     }
 }
Exemplo n.º 3
0
 /**
  * Registers all event listeners related to the manager.
  *
  * @param bool $verbose
  */
 public function registerListeners($verbose = false)
 {
     $output = $this->output;
     $this->eventDispatcher->addListener('queue.process_queued', function (ProcessQueuedEvent $event) use($verbose, &$output) {
         $output->writeln('<info>Process \'' . $event->getId() . '\' was added to the queue.</info>');
     });
     $this->eventDispatcher->addListener('queue.process_failed', function (ProcessFinishedEvent $event) use(&$output) {
         $status = [2 => 'TIMEOUT', 3 => 'ERROR IN RESPONSE'];
         $this->output->writeln('<error>Process \'' . $event->getName() . '\' was killed with an error.</error>');
         $this->output->writeln('<error>Status: ' . $status[$event->getStatus()] . '</error>');
         $this->memcache->delete('queue.process.processlist.' . $event->getName());
     });
     $this->eventDispatcher->addListener('queue.manager.retrieved', function (ManagerRetrievedEvent $event) use($verbose, &$output) {
         $errors = [ManagerRetrievedEvent::RETRIEVAL_STATUS_FAILED => 'Failed to retrieve the manager. Key not found.'];
         $warnings = [ManagerRetrievedEvent::RETRIEVAL_STATUS_FAILED_LOCKED => 'Attempted to retrieve the manager, but it was locked. Retrying in a few moments.'];
         if (isset($errors[$event->getStatus()])) {
             $this->output->writeln('<error>' . $errors[$event->getStatus()] . '</error>');
         }
         if (isset($warnings[$event->getStatus()]) && $verbose) {
             $this->output->writeln('<bg=yellow>' . $warnings[$event->getStatus()] . '</>');
         }
     });
     $this->eventDispatcher->addListener('queue.manager.flushed', function (ManagerFlushedEvent $event) use($verbose, &$output) {
         switch ($event->getStatus()) {
             case ManagerFlushedEvent::STATUS_FLUSH_FAILED_NOLOCK:
                 $output->writeln('<error>Could not flush the queue to the queue server. ' . 'Reason: the queue manager is locked.</error>');
                 break;
             case ManagerFlushedEvent::STATUS_FLUSH_FAILED:
                 $output->writeln('<error>Could not flush the queue to the queue server. ' . 'Reason: the server is unreachable.');
                 break;
             case ManagerRetrievedEvent::RETRIEVAL_STATUS_SUCCESS:
                 if ($verbose) {
                     $output->writeln('<info>The queue manager has been flushed.</info>');
                 }
                 break;
         }
     });
     $this->eventDispatcher->addListener('queue.process_ended', function (ProcessFinishedEvent $event) use($verbose, &$output) {
         $output->writeln('<info>Process \'' . $event->getName() . '\' has finished.</info>');
         if ($verbose && !empty($event->getOutput())) {
             $output->writeln('Output: ' . $event->getOutput());
         }
         $this->memcache->delete('queue.process.processlist.' . $event->getName());
     });
     $this->eventDispatcher->addListener('queue.process_started', function (ProcessStartedEvent $event) use($verbose, &$output) {
         $output->writeln('<info>Process \'' . $event->getName() . '\' has just been dispatched.</info>');
     });
 }
Exemplo n.º 4
0
 /**
  * Registers all listeners.
  */
 protected function registerListeners()
 {
     $printEvents = ['foreman.process.added' => ['message' => '<info>Process %s was added to the queue.</info>', 'properties' => ['name']], 'foreman.process.finished' => ['message' => '<info>Process %s has ended successfully.' . "\n%s</info>", 'properties' => ['name', 'output']], 'foreman.process.failed' => ['message' => '<error>>Process %s failed. Reason: %s.' . "\n%s</error>", 'properties' => ['name', 'reason', 'output']], 'foreman.process.started' => ['message' => '<info>Process %s has started.</info>', 'properties' => ['name']]];
     $output = $this->output;
     foreach ($printEvents as $index => $messageData) {
         $this->eventDispatcher->addListener($index, function ($event) use(&$output, $messageData) {
             $properties = $messageData['properties'];
             $values = [];
             $accessor = PropertyAccess::createPropertyAccessor();
             foreach ($properties as $property) {
                 $values[] = $accessor->getValue($event, $property);
             }
             $output->writeln(sprintf($messageData['message'], ...$values));
         });
     }
 }
 public function testDispatchReusedEventNested()
 {
     $nestedCall = false;
     $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
     $dispatcher->addListener('foo', function (Event $e) use($dispatcher) {
         $dispatcher->dispatch('bar', $e);
     });
     $dispatcher->addListener('bar', function (Event $e) use(&$nestedCall) {
         $nestedCall = true;
     });
     $this->assertFalse($nestedCall);
     $dispatcher->dispatch('foo');
     $this->assertTrue($nestedCall);
 }
 public function testListenerCanRemoveItselfWhenExecuted()
 {
     $eventDispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
     $listener1 = function ($event, $eventName, EventDispatcherInterface $dispatcher) use(&$listener1) {
         $dispatcher->removeListener('foo', $listener1);
     };
     $eventDispatcher->addListener('foo', $listener1);
     $eventDispatcher->addListener('foo', function () {
     });
     $eventDispatcher->dispatch('foo');
     $this->assertCount(1, $eventDispatcher->getListeners('foo'), 'expected listener1 to be removed');
 }