function EvDriver::activate
Overrides AbstractDriver::activate
File
-
vendor/
revolt/ event-loop/ src/ EventLoop/ Driver/ EvDriver.php, line 163
Class
Namespace
Revolt\EventLoop\DriverCode
protected function activate(array $callbacks) : void {
$this->handle
->nowUpdate();
$now = $this->now();
foreach ($callbacks as $callback) {
if (!isset($this->events[$id = $callback->id])) {
if ($callback instanceof StreamReadableCallback) {
\assert(\is_resource($callback->stream));
$this->events[$id] = $this->handle
->io($callback->stream, \Ev::READ, $this->ioCallback, $callback);
}
elseif ($callback instanceof StreamWritableCallback) {
\assert(\is_resource($callback->stream));
$this->events[$id] = $this->handle
->io($callback->stream, \Ev::WRITE, $this->ioCallback, $callback);
}
elseif ($callback instanceof TimerCallback) {
$interval = $callback->interval;
$this->events[$id] = $this->handle
->timer(\max(0, $callback->expiration - $now), $callback->repeat ? $interval : 0, $this->timerCallback, $callback);
}
elseif ($callback instanceof SignalCallback) {
$this->events[$id] = $this->handle
->signal($callback->signal, $this->signalCallback, $callback);
}
else {
// @codeCoverageIgnoreStart
throw new \Error("Unknown callback type: " . \get_class($callback));
// @codeCoverageIgnoreEnd
}
}
else {
$this->events[$id]
->start();
}
if ($callback instanceof SignalCallback) {
/** @psalm-suppress PropertyTypeCoercion */
$this->signals[$id] = $this->events[$id];
}
}
}