Skip to content

Commit 4732a2c

Browse files
authored
Merge pull request #17 from chaz6chez/patch-1
feat: compatible with workerman 5.x events
2 parents 4dfd42d + 724a33d commit 4732a2c

File tree

1 file changed

+63
-14
lines changed

1 file changed

+63
-14
lines changed

src/Client.php

+63-14
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ class Client extends \Bunny\Async\Client
2222
/** @var null|callable 重启事件回调 */
2323
protected $restartCallback = null;
2424

25+
/**
26+
* Version 5.x uses a new event interface
27+
* @return bool
28+
*/
29+
public static function isNewEventInterface(): bool
30+
{
31+
return version_compare(Worker::VERSION, '5.0.0', '>=');
32+
}
33+
2534
/**
2635
* Client constructor.
2736
* @param array $options = [
@@ -87,23 +96,44 @@ protected function flushWriteBuffer()
8796
} else {
8897
$deferred = new Promise\Deferred();
8998

90-
$this->eventLoop->add($this->getStream(), EventInterface::EV_WRITE, function ($stream) use ($deferred) {
99+
$streamFunction = function ($stream) use ($deferred) {
91100
try {
92101
$this->write();
93102

94103
if ($this->writeBuffer->isEmpty()) {
95-
$this->eventLoop->del($stream, EventInterface::EV_WRITE);
104+
// support workerman 5.x
105+
if (method_exists($this->eventLoop, 'offWritable')) {
106+
$this->eventLoop->offWritable($stream);
107+
}
108+
// ver earlier than 5.x
109+
else {
110+
$this->eventLoop->del($stream, EventInterface::EV_WRITE);
111+
}
96112
$this->flushWriteBufferPromise = null;
97113
$deferred->resolve(true);
98114
}
99115

100116
} catch (\Exception $e) {
101-
$this->eventLoop->del($stream, EventInterface::EV_WRITE);
117+
// support workerman 5.x
118+
if (method_exists($this->eventLoop, 'offWritable')) {
119+
$this->eventLoop->offWritable($stream);
120+
}
121+
// ver earlier than 5.x
122+
else {
123+
$this->eventLoop->del($stream, EventInterface::EV_WRITE);
124+
}
102125
$this->flushWriteBufferPromise = null;
103126
$deferred->reject($e);
104127
}
105-
});
106-
128+
};
129+
// support workerman 5.x
130+
if (method_exists($this->eventLoop, 'onWritable')) {
131+
$this->eventLoop->onWritable($this->getStream(), $streamFunction);
132+
}
133+
// ver earlier than 5.x
134+
else {
135+
$this->eventLoop->add($this->getStream(), EventInterface::EV_WRITE, $streamFunction);
136+
}
107137
return $this->flushWriteBufferPromise = $deferred->promise();
108138
}
109139
}
@@ -155,7 +185,14 @@ public function connect()
155185
$this->writer->appendProtocolHeader($this->writeBuffer);
156186

157187
try {
158-
$this->eventLoop->add($this->getStream(), EventInterface::EV_READ, [$this, "onDataAvailable"]);
188+
// support workerman 5.x
189+
if (method_exists($this->eventLoop, 'onReadable')) {
190+
$this->eventLoop->onReadable($this->getStream(), [$this, "onDataAvailable"]);
191+
}
192+
// ver earlier than 5.x
193+
else {
194+
$this->eventLoop->add($this->getStream(), EventInterface::EV_READ, [$this, "onDataAvailable"]);
195+
}
159196
} catch (\Exception $e) {
160197
return Promise\reject($e);
161198
}
@@ -239,7 +276,14 @@ public function disconnect($replyCode = 0, $replyText = "")
239276
}
240277
return $this->connectionClose($replyCode, $replyText, 0, 0);
241278
})->then(function () use ($replyCode, $replyText){
242-
$this->eventLoop->del($this->getStream(), EventInterface::EV_READ);
279+
// support workerman 5.x
280+
if (method_exists($this->eventLoop, 'offReadable')) {
281+
$this->eventLoop->offReadable($this->getStream());
282+
}
283+
// ver earlier than 5.x
284+
else {
285+
$this->eventLoop->del($this->getStream(), EventInterface::EV_READ);
286+
}
243287
$this->closeStream();
244288
$this->init();
245289
if ($replyCode !== 0) {
@@ -252,13 +296,18 @@ public function disconnect($replyCode = 0, $replyText = "")
252296
// 延迟重启
253297
if (($restartInterval = $this->options['restart_interval'] ?? 0) > 0) {
254298
Worker::log("RabbitMQ client will restart in $restartInterval seconds. ");
255-
$this->eventLoop->add(
256-
$restartInterval,
257-
EventInterface::EV_TIMER_ONCE,
258-
function () use ($replyCode, $replyText, $restartInterval) {
259-
Worker::stopAll(0,"RabbitMQ client disconnected: [{$replyCode}] {$replyText}");
260-
}
261-
);
299+
300+
$timerFunction = function () use ($replyCode, $replyText, $restartInterval) {
301+
Worker::stopAll(0,"RabbitMQ client disconnected: [{$replyCode}] {$replyText}");
302+
};
303+
// support workerman 5.x
304+
if (method_exists($this->eventLoop, 'delay')) {
305+
$this->eventLoop->delay($restartInterval, $timerFunction);
306+
}
307+
// ver earlier than 5.x
308+
else {
309+
$this->eventLoop->add($restartInterval, EventInterface::EV_TIMER_ONCE, $timerFunction);
310+
}
262311
return null;
263312
}
264313
// 立即重启

0 commit comments

Comments
 (0)