Passed
Push — master ( 151619...8ae005 )
by PHPinnacle
03:00
created

StaticDispatcher::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 0
crap 2
1
<?php
2
/**
3
 * This file is part of PHPinnacle/Ensign.
4
 *
5
 * (c) PHPinnacle Team <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
declare(strict_types = 1);
12
13
use PHPinnacle\Ensign\Dispatcher;
14
use PHPinnacle\Ensign\Task;
15
16
function __ensign_dispatcher(): Dispatcher
17
{
18
    static $dispatcher;
19
20
    return $dispatcher ?: $dispatcher = Dispatcher::amp();
21
}
22
23
/**
24
 * @param string   $signal
25
 * @param callable $handler
26
 */
27
function ensign_signal(string $signal, callable $handler): void
28
{
29
    __ensign_dispatcher()->register($signal, $handler);
30
}
31
32
/**
33
 * @param string    $signal
34
 * @param mixed  ...$arguments
35
 *
36
 * @return Task
37
 */
38
function ensign_dispatch(string $signal, ...$arguments): Task
39
{
40
    return __ensign_dispatcher()->dispatch($signal, ...$arguments);
41
}
42
43
/**
44
 * @param array      $signals
45
 * @param Dispatcher $dispatcher
46
 *
47
 * @throws \Amp\Loop\UnsupportedFeatureException
48
 */
49
function ensign_pcntl_signals(array $signals, Dispatcher $dispatcher = null): void
50
{
51
    $dispatcher = $dispatcher ?: __ensign_dispatcher();
52
53
    foreach ($signals as $signal) {
54
        // OS signal support check
55
        if (!$sigNo = \constant($signal)) {
56
            continue;
57
        }
58
59
        $handler = function (string $watcherId, int $sigNo, $sigInfo = null) use ($dispatcher, $signal) {
60
            yield $dispatcher->dispatch($signal, $sigNo, $sigInfo, $watcherId);
61
        };
62
63
        \Amp\Loop::onSignal($sigNo, $handler);
64
    }
65
}
66
67
/**
68
 * @param array $exclude
69
 *
70
 * @return array
71
 */
72
function pcntl_signal_list(array $exclude = []): array
73
{
74
    return \array_diff([
75
        'SIGHUP',
76
        'SIGINT',
77
        'SIGQUIT',
78
        'SIGILL',
79
        'SIGTRAP',
80
        'SIGABRT',
81
        'SIGIOT',
82
        'SIGBUS',
83
        'SIGFPE',
84
        // 'SIGKILL',
85
        'SIGUSR1',
86
        'SIGSEGV',
87
        'SIGUSR2',
88
        'SIGPIPE',
89
        'SIGALRM',
90
        'SIGTERM',
91
        'SIGSTKFLT',
92
        'SIGCLD',
93
        'SIGCHLD',
94
        'SIGCONT',
95
        // 'SIGSTOP',
96
        'SIGTSTP',
97
        'SIGTTIN',
98
        'SIGTTOU',
99
        'SIGURG',
100
        'SIGXCPU',
101
        'SIGXFSZ',
102
        'SIGVTALRM',
103
        'SIGPROF',
104
        'SIGWINCH',
105
        'SIGPOLL',
106
        'SIGIO',
107
        'SIGPWR',
108
        'SIGSYS',
109
    ], $exclude);
110
}
111