Beispiel #1
0
 /**
  * @override
  * @inheritDoc
  */
 public function start()
 {
     if ($this->flowController->isRunning) {
         return;
     }
     // TODO KRF-107
     $this->addPeriodicTimer(1, function () {
         usleep(1);
     });
     $this->flowController->isRunning = true;
     $this->startTickQueue->tick();
     while ($this->flowController->isRunning) {
         $this->nextTickQueue->tick();
         $this->futureTickQueue->tick();
         $this->timers->tick();
         // Next-tick or future-tick queues have pending callbacks ...
         if (!$this->flowController->isRunning || !$this->nextTickQueue->isEmpty() || !$this->futureTickQueue->isEmpty()) {
             $timeout = 0;
         } else {
             if ($scheduledAt = $this->timers->getFirst()) {
                 $timeout = $scheduledAt - $this->timers->getTime();
                 $timeout = $timeout < 0 ? 0 : $timeout * self::MICROSECONDS_PER_SECOND;
             } else {
                 if ($this->readStreams || $this->writeStreams) {
                     $timeout = null;
                 } else {
                     break;
                 }
             }
         }
         $this->waitForStreamActivity($timeout);
     }
 }