Passed
Push — master ( 2f01ca...ac7767 )
by PHPinnacle
06:39
created

StaticDispatcher::dispatch()   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 1
Bugs 0 Features 0
Metric Value
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
c 1
b 0
f 0
cc 1
eloc 1
nc 1
nop 2
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\Task;
14
use PHPinnacle\Ensign\Dispatcher;
15
use PHPinnacle\Ensign\StaticDispatcher;
16
17
/**
18
 * @param string   $signal
19
 * @param callable $handler
20
 */
21
function ensign_signal(string $signal, callable $handler): void
22
{
23
    StaticDispatcher::instance()->register($signal, $handler);
24
}
25
26
/**
27
 * @param string    $signal
28
 * @param mixed  ...$arguments
29
 *
30
 * @return Task
31
 */
32
function ensign_dispatch(string $signal, ...$arguments): Task
33
{
34
    return StaticDispatcher::instance()->dispatch($signal, ...$arguments);
35
}
36
37
/**
38
 * @param array      $signals
39
 * @param Dispatcher $dispatcher
40
 */
41
function ensign_pcntl_signals(array $signals, Dispatcher $dispatcher = null): void
42
{
43
    $dispatcher = $dispatcher ?: StaticDispatcher::instance();
44
45
    foreach ($signals as $signal) {
46
        // OS signal support check
47
        if (!$sigNo = \constant($signal)) {
48
            continue;
49
        }
50
51
        $handler = function (string $watcherId, int $sigNo, $sigInfo = null) use ($dispatcher, $signal) {
52
            yield $dispatcher->dispatch($signal, $sigNo, $sigInfo, $watcherId);
53
        };
54
55
        \Amp\Loop::onSignal($sigNo, $handler);
56
    }
57
}
58
59
/**
60
 * @param array $exclude
61
 *
62
 * @return array
63
 */
64
function pcntl_signal_list(array $exclude = []): array
65
{
66
    return \array_diff([
67
        'SIGHUP',
68
        'SIGINT',
69
        'SIGQUIT',
70
        'SIGILL',
71
        'SIGTRAP',
72
        'SIGABRT',
73
        'SIGIOT',
74
        'SIGBUS',
75
        'SIGFPE',
76
        // 'SIGKILL',
77
        'SIGUSR1',
78
        'SIGSEGV',
79
        'SIGUSR2',
80
        'SIGPIPE',
81
        'SIGALRM',
82
        'SIGTERM',
83
        'SIGSTKFLT',
84
        'SIGCLD',
85
        'SIGCHLD',
86
        'SIGCONT',
87
        // 'SIGSTOP',
88
        'SIGTSTP',
89
        'SIGTTIN',
90
        'SIGTTOU',
91
        'SIGURG',
92
        'SIGXCPU',
93
        'SIGXFSZ',
94
        'SIGVTALRM',
95
        'SIGPROF',
96
        'SIGWINCH',
97
        'SIGPOLL',
98
        'SIGIO',
99
        'SIGPWR',
100
        'SIGSYS',
101
    ], $exclude);
102
}
103