Subiendo proyecto completo sin restricciones de git ignore
This commit is contained in:
152
vendor/laravel/framework/src/Illuminate/Console/Signals.php
vendored
Normal file
152
vendor/laravel/framework/src/Illuminate/Console/Signals.php
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Console;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
class Signals
|
||||
{
|
||||
/**
|
||||
* The signal registry instance.
|
||||
*
|
||||
* @var \Symfony\Component\Console\SignalRegistry\SignalRegistry
|
||||
*/
|
||||
protected $registry;
|
||||
|
||||
/**
|
||||
* The signal registry's previous list of handlers.
|
||||
*
|
||||
* @var array<int, array<int, callable>>|null
|
||||
*/
|
||||
protected $previousHandlers;
|
||||
|
||||
/**
|
||||
* The current availability resolver, if any.
|
||||
*
|
||||
* @var (callable(): bool)|null
|
||||
*/
|
||||
protected static $availabilityResolver;
|
||||
|
||||
/**
|
||||
* Create a new signal registrar instance.
|
||||
*
|
||||
* @param \Symfony\Component\Console\SignalRegistry\SignalRegistry $registry
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($registry)
|
||||
{
|
||||
$this->registry = $registry;
|
||||
|
||||
$this->previousHandlers = $this->getHandlers();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new signal handler.
|
||||
*
|
||||
* @param int $signal
|
||||
* @param callable(int $signal): void $callback
|
||||
* @return void
|
||||
*/
|
||||
public function register($signal, $callback)
|
||||
{
|
||||
$this->previousHandlers[$signal] ??= $this->initializeSignal($signal);
|
||||
|
||||
with($this->getHandlers(), function ($handlers) use ($signal) {
|
||||
$handlers[$signal] ??= $this->initializeSignal($signal);
|
||||
|
||||
$this->setHandlers($handlers);
|
||||
});
|
||||
|
||||
$this->registry->register($signal, $callback);
|
||||
|
||||
with($this->getHandlers(), function ($handlers) use ($signal) {
|
||||
$lastHandlerInserted = array_pop($handlers[$signal]);
|
||||
|
||||
array_unshift($handlers[$signal], $lastHandlerInserted);
|
||||
|
||||
$this->setHandlers($handlers);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the signal's existing handler in array format.
|
||||
*
|
||||
* @return array<int, callable(int $signal): void>
|
||||
*/
|
||||
protected function initializeSignal($signal)
|
||||
{
|
||||
return is_callable($existingHandler = pcntl_signal_get_handler($signal))
|
||||
? [$existingHandler]
|
||||
: null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister the current signal handlers.
|
||||
*
|
||||
* @return array<int, array<int, callable(int $signal): void>>
|
||||
*/
|
||||
public function unregister()
|
||||
{
|
||||
$previousHandlers = $this->previousHandlers;
|
||||
|
||||
foreach ($previousHandlers as $signal => $handler) {
|
||||
if (is_null($handler)) {
|
||||
pcntl_signal($signal, SIG_DFL);
|
||||
|
||||
unset($previousHandlers[$signal]);
|
||||
}
|
||||
}
|
||||
|
||||
$this->setHandlers($previousHandlers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the given callback if "signals" should be used and are available.
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return void
|
||||
*/
|
||||
public static function whenAvailable($callback)
|
||||
{
|
||||
$resolver = static::$availabilityResolver;
|
||||
|
||||
if ($resolver()) {
|
||||
$callback();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the registry's handlers.
|
||||
*
|
||||
* @return array<int, array<int, callable>>
|
||||
*/
|
||||
protected function getHandlers()
|
||||
{
|
||||
return (fn () => $this->signalHandlers)
|
||||
->call($this->registry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the registry's handlers.
|
||||
*
|
||||
* @param array<int, array<int, callable(int $signal):void>> $handlers
|
||||
* @return void
|
||||
*/
|
||||
protected function setHandlers($handlers)
|
||||
{
|
||||
(fn () => $this->signalHandlers = $handlers)
|
||||
->call($this->registry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the availability resolver.
|
||||
*
|
||||
* @param callable(): bool
|
||||
* @return void
|
||||
*/
|
||||
public static function resolveAvailabilityUsing($resolver)
|
||||
{
|
||||
static::$availabilityResolver = $resolver;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user