diff --git a/composer.json b/composer.json index 4b93228..5599b45 100644 --- a/composer.json +++ b/composer.json @@ -15,9 +15,9 @@ }, "require": { "php": ">=5.3", - "clue/multicast-react": "~1.0|~0.2.0", - "react/event-loop": "~0.4.0|~0.3.0", + "clue/multicast-react": "^1.0 || ^0.2", "react/dns": "~0.4.0|~0.3.0", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", "react/promise": "^2.1 || ^1.2.1" }, "require-dev": { diff --git a/src/MulticastExecutor.php b/src/MulticastExecutor.php index 8422d54..3c181d6 100644 --- a/src/MulticastExecutor.php +++ b/src/MulticastExecutor.php @@ -72,9 +72,9 @@ public function doQuery($nameserver, $queryData, $name) $parser = $this->parser; $loop = $this->loop; - $deferred = new Deferred(function ($_, $reject) use (&$conn, &$timer, $name) { + $deferred = new Deferred(function ($_, $reject) use (&$conn, &$timer, $loop, $name) { $conn->close(); - $timer->cancel(); + $loop->cancelTimer($timer); $reject(new \RuntimeException(sprintf("DNS query for %s cancelled", $name))); }); @@ -86,12 +86,12 @@ public function doQuery($nameserver, $queryData, $name) $conn = $this->factory->createSender(); - $conn->on('message', function ($data) use ($conn, $parser, $deferred, $timer) { + $conn->on('message', function ($data) use ($conn, $parser, $deferred, $timer, $loop) { $response = new Message(); $responseReady = $parser->parseChunk($data, $response); $conn->close(); - $timer->cancel(); + $loop->cancelTimer($timer); if (!$responseReady) { $deferred->reject(new BadServerException('Invalid response received')); diff --git a/tests/MulticastExecutorTest.php b/tests/MulticastExecutorTest.php index dc059c2..a2c87b7 100644 --- a/tests/MulticastExecutorTest.php +++ b/tests/MulticastExecutorTest.php @@ -47,9 +47,13 @@ public function testCancellingPromiseWillCloseSocketAndReject() $socket->expects($this->once())->method('send')->with($this->equalTo('message'), $this->equalTo($this->nameserver)); $this->sockets->expects($this->once())->method('createSender')->will($this->returnValue($socket)); - $timer = $this->getMockBuilder('React\EventLoop\Timer\TimerInterface')->getMock(); - $timer->expects($this->once())->method('cancel'); + // prefer newer EventLoop 1.0/0.5+ TimerInterface or fall back to legacy namespace + $timer = $this->getMockBuilder( + interface_exists('React\EventLoop\TimerInterface') ? 'React\EventLoop\TimerInterface' : 'React\EventLoop\Timer\TimerInterface' + )->getMock(); + $this->loop->expects($this->once())->method('addTimer')->willReturn($timer); + $this->loop->expects($this->once())->method('cancelTimer')->with($timer); $this->dumper->expects($this->once())->method('toBinary')->will($this->returnValue('message'));