Inheritance: implements IoManager
Example #1
0
 /**
  * {@inheritdoc}
  */
 protected function dispatch(bool $blocking)
 {
     $timeout = $blocking ? $this->timerManager->getInterval() : 0;
     // Use stream_select() if there are any streams in the loop.
     if (!$this->pollManager->isEmpty() || !$this->awaitManager->isEmpty()) {
         $seconds = (int) $timeout;
         $microseconds = ($timeout - $seconds) * self::MICROSEC_PER_SEC;
         $read = $this->pollManager->getPending();
         $write = $this->awaitManager->getPending();
         $except = null;
         // Error reporting suppressed since stream_select() emits an E_WARNING if it is interrupted by a signal.
         $count = @stream_select($read, $write, $except, null === $timeout ? null : $seconds, $microseconds);
         if ($count) {
             $this->pollManager->handle($read);
             $this->awaitManager->handle($write);
         }
     } elseif (0 < $timeout) {
         // Otherwise sleep with usleep() if $timeout > 0.
         usleep($timeout * self::MICROSEC_PER_SEC);
     }
     $this->timerManager->tick();
     // Call any pending timers.
 }