/** * @dataProvider PHPExtra\EventManager\Worker\WorkerQueueTest::workers * * @param Worker[]|array $workers */ public function testReturnWorkersInLifoOrder(array $workers) { $event = $this->getMock('PHPExtra\\EventManager\\Event\\Event'); /** @var Event $event */ $this->queue->addWorker($workers[0]); $this->queue->addWorker($workers[1]); $this->queue->addWorker($workers[2]); $output = array(); foreach ($this->queue->getWorkersFor($event) as $worker) { /** @var Worker $worker */ $output[] = $worker->getMethodName(); } $this->assertEquals(array('dummy3', 'dummy2', 'dummy1'), $output); }
/** * {@inheritdoc} */ public function emit(Event $event) { $previousRunningEvent = $this->runningEvent; $this->runningEvent = $event; $workers = $this->workerQueue->getWorkersFor($event); if (count($workers) > 0) { foreach ($workers as $worker) { $this->runWorker($worker, $event); } } else { $this->logger->debug(sprintf('Event %s has no workers', get_class($event))); } $this->runningEvent = $previousRunningEvent; return $this; }