Example #1
0
 /**
  * Run the worker.
  */
 public function run()
 {
     pcntl_signal_dispatch();
     if ($this->service == null || !$this->service->isAlive()) {
         throw new \RuntimeException('Service not running.');
     }
     $workerHandlerSocket = $this->socketFactory->createRequest(Factory::MODE_CONNECT, $this->workerHandlerAddress);
     $serviceSocket = $this->socketFactory->createRequest(Factory::MODE_BIND, $this->serviceAddress);
     $this->worker = new Worker();
     $this->worker->setLogger($this->getLogger());
     $comm = new WorkerCommunication($this->worker, $workerHandlerSocket, $serviceSocket);
     $comm->setLogger($this->getLogger());
     $comm->setDelay($this->delay);
     $this->registerSignalHandler();
     $this->running = true;
     $comm->start();
     while (true) {
         $comm->process();
         pcntl_signal_dispatch();
         if (!$this->service->isAlive()) {
             $this->worker->onServiceDown();
         }
         if ($this->worker->getState() == Worker::INVALID) {
             $this->stop();
             break;
         }
     }
     // Kill the service.
     $this->service->killAndWait();
     $this->worker->onServiceDown();
     $this->getLogger()->debug('Run completed with state: ' . $this->worker->getState());
 }