Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. StreamSelectDriver.php

function StreamSelectDriver::activate

Overrides AbstractDriver::activate

File

vendor/revolt/event-loop/src/EventLoop/Driver/StreamSelectDriver.php, line 146

Class

StreamSelectDriver

Namespace

Revolt\EventLoop\Driver

Code

protected function activate(array $callbacks) : void {
    foreach ($callbacks as $callback) {
        if ($callback instanceof StreamReadableCallback) {
            \assert(\is_resource($callback->stream));
            $streamId = (int) $callback->stream;
            $this->readCallbacks[$streamId][$callback->id] = $callback;
            $this->readStreams[$streamId] = $callback->stream;
        }
        elseif ($callback instanceof StreamWritableCallback) {
            \assert(\is_resource($callback->stream));
            $streamId = (int) $callback->stream;
            $this->writeCallbacks[$streamId][$callback->id] = $callback;
            $this->writeStreams[$streamId] = $callback->stream;
        }
        elseif ($callback instanceof TimerCallback) {
            $this->timerQueue
                ->insert($callback);
        }
        elseif ($callback instanceof SignalCallback) {
            if (!isset($this->signalCallbacks[$callback->signal])) {
                \set_error_handler(static function (int $errno, string $errstr) : bool {
                    throw new UnsupportedFeatureException(\sprintf("Failed to register signal handler; Errno: %d; %s", $errno, $errstr));
                });
                // Avoid bug in Psalm handling of first-class callables by assigning to a temp variable.
                $handler = $this->handleSignal(...);
                try {
                    \pcntl_signal($callback->signal, $handler);
                } finally {
                    \restore_error_handler();
                }
            }
            $this->signalCallbacks[$callback->signal][$callback->id] = $callback;
        }
        else {
            // @codeCoverageIgnoreStart
            throw new \Error("Unknown callback type");
            // @codeCoverageIgnoreEnd
        }
    }
}
RSS feed
Powered by Drupal