4
4
5
5
use React \EventLoop \Tick \FutureTickQueue ;
6
6
use React \EventLoop \Timer \Timer ;
7
- use React \EventLoop \Timer \TimerInterface ;
8
7
use SplObjectStorage ;
9
8
10
9
/**
@@ -15,12 +14,12 @@ class LibUvLoop implements LoopInterface
15
14
private $ uv ;
16
15
private $ futureTickQueue ;
17
16
private $ timerEvents ;
18
- private $ events = [] ;
19
- private $ flags = [] ;
20
- private $ listeners = [] ;
17
+ private $ events = array () ;
18
+ private $ flags = array () ;
19
+ private $ listeners = array () ;
21
20
private $ running ;
22
21
private $ signals ;
23
- private $ signalEvents = [] ;
22
+ private $ signalEvents = array () ;
24
23
private $ streamListener ;
25
24
26
25
public function __construct ()
@@ -30,27 +29,13 @@ public function __construct()
30
29
$ this ->timerEvents = new SplObjectStorage ();
31
30
$ this ->streamListener = $ this ->createStreamListener ();
32
31
33
- $ this ->signals = new SignalsHandler (
34
- $ this ,
35
- function ($ signal ) {
36
- $ this ->signalEvents [$ signal ] = \uv_signal_init ($ this ->uv );
37
- \uv_signal_start ($ this ->signalEvents [$ signal ], function () use ($ signal ) {
38
- $ this ->signals ->call ($ signal );
39
- }, $ signal );
40
- },
41
- function ($ signal ) {
42
- if ($ this ->signals ->count ($ signal ) === 0 ) {
43
- \uv_signal_stop ($ this ->signalEvents [$ signal ]);
44
- unset($ this ->signalEvents [$ signal ]);
45
- }
46
- }
47
- );
32
+ $ this ->signals = new SignalsHandler ();
48
33
}
49
34
50
35
/**
51
36
* {@inheritdoc}
52
37
*/
53
- public function addReadStream ($ stream , callable $ listener )
38
+ public function addReadStream ($ stream , $ listener )
54
39
{
55
40
if (isset ($ this ->listeners [(int ) $ stream ]['read ' ])) {
56
41
return ;
@@ -63,7 +48,7 @@ public function addReadStream($stream, callable $listener)
63
48
/**
64
49
* {@inheritdoc}
65
50
*/
66
- public function addWriteStream ($ stream , callable $ listener )
51
+ public function addWriteStream ($ stream , $ listener )
67
52
{
68
53
if (isset ($ this ->listeners [(int ) $ stream ]['write ' ])) {
69
54
return ;
@@ -104,7 +89,7 @@ public function removeWriteStream($stream)
104
89
/**
105
90
* {@inheritdoc}
106
91
*/
107
- public function addTimer ($ interval , callable $ callback )
92
+ public function addTimer ($ interval , $ callback )
108
93
{
109
94
$ timer = new Timer ( $ interval , $ callback , false );
110
95
@@ -120,7 +105,7 @@ public function addTimer($interval, callable $callback)
120
105
$ this ->timerEvents ->attach ($ timer , $ event );
121
106
\uv_timer_start (
122
107
$ event ,
123
- $ interval * 1000 ,
108
+ ( int )( $ interval * 1000 ) ,
124
109
0 ,
125
110
$ callback
126
111
);
@@ -131,7 +116,7 @@ public function addTimer($interval, callable $callback)
131
116
/**
132
117
* {@inheritdoc}
133
118
*/
134
- public function addPeriodicTimer ($ interval , callable $ callback )
119
+ public function addPeriodicTimer ($ interval , $ callback )
135
120
{
136
121
$ timer = new Timer ($ interval , $ callback , true );
137
122
@@ -173,19 +158,32 @@ public function isTimerActive(TimerInterface $timer)
173
158
/**
174
159
* {@inheritdoc}
175
160
*/
176
- public function futureTick (callable $ listener )
161
+ public function futureTick ($ listener )
177
162
{
178
163
$ this ->futureTickQueue ->add ($ listener );
179
164
}
180
165
181
- public function addSignal ($ signal , callable $ listener )
166
+ public function addSignal ($ signal , $ listener )
182
167
{
183
168
$ this ->signals ->add ($ signal , $ listener );
169
+
170
+ if (!isset ($ this ->signalEvents [$ signal ])) {
171
+ $ signals = $ this ->signals ;
172
+ $ this ->signalEvents [$ signal ] = \uv_signal_init ($ this ->uv );
173
+ \uv_signal_start ($ this ->signalEvents [$ signal ], function () use ($ signals , $ signal ) {
174
+ $ signals ->call ($ signal );
175
+ }, $ signal );
176
+ }
184
177
}
185
178
186
- public function removeSignal ($ signal , callable $ listener )
179
+ public function removeSignal ($ signal , $ listener )
187
180
{
188
181
$ this ->signals ->remove ($ signal , $ listener );
182
+
183
+ if (isset ($ this ->signalEvents [$ signal ]) && $ this ->signals ->count ($ signal ) === 0 ) {
184
+ \uv_signal_stop ($ this ->signalEvents [$ signal ]);
185
+ unset($ this ->signalEvents [$ signal ]);
186
+ }
189
187
}
190
188
191
189
/**
0 commit comments