function StreamSelectDriver::activate
Overrides AbstractDriver::activate
File
-
vendor/
revolt/ event-loop/ src/ EventLoop/ Driver/ StreamSelectDriver.php, line 146
Class
Namespace
Revolt\EventLoop\DriverCode
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
}
}
}