<?php
include "skipif.inc";
skip_client_test();
-_ext("ev");
-
+_ext("event");
?>
---XFAIL--
-ext-ev leaks
--FILE--
<?php
echo "Test\n";
class UserHandler implements http\Client\Curl\User
{
+ private $evbase;
private $client;
private $run;
private $ios = [];
private $timeout;
- function __construct(http\Client $client) {
+ function __construct(http\Client $client, EventBase $evbase) {
+ $this->evbase = $evbase;
$this->client = $client;
}
function timer(int $timeout_ms) {
echo "T";
if (isset($this->timeout)) {
- $this->timeout->set($timeout_ms/1000, 0);
- $this->timeout->start();
+ $this->timeout->add($timeout_ms/1000);
} else {
- $this->timeout = new EvTimer($timeout_ms/1000, 0, function() {
+ $this->timeout = Event::timer($this->evbase, function() {
if (!call_user_func($this->run, $this->client)) {
if ($this->timeout) {
- $this->timeout->stop();
+ $this->timeout->del();
$this->timeout = null;
}
}
});
+ $this->timeout->add($timeout_ms/1000);
}
}
case self::POLL_REMOVE:
if (isset($this->ios[(int) $socket])) {
echo "U";
- $this->ios[(int) $socket]->stop();
+ $this->ios[(int) $socket]->del();
unset($this->ios[(int) $socket]);
}
break;
default:
$ev = 0;
if ($action & self::POLL_IN) {
- $ev |= Ev::READ;
+ $ev |= Event::READ;
}
if ($action & self::POLL_OUT) {
- $ev |= Ev::WRITE;
+ $ev |= Event::WRITE;
}
if (isset($this->ios[(int) $socket])) {
- $this->ios[(int) $socket]->set($socket, $ev);
+ $this->ios[(int) $socket]->set($this->evbase,
+ $socket, $ev, $this->onEvent($socket));
} else {
- $this->ios[(int) $socket] = new EvIo($socket, $ev, function($watcher, $events) use($socket) {
- $action = 0;
- if ($events & Ev::READ) {
- $action |= self::POLL_IN;
- }
- if ($events & Ev::WRITE) {
- $action |= self::POLL_OUT;
- }
- if (!call_user_func($this->run, $this->client, $socket, $action)) {
- if ($this->timeout) {
- $this->timeout->stop();
- $this->timeout = null;
- }
- }
- });
+ $this->ios[(int) $socket] = new Event($this->evbase,
+ $socket, $ev, $this->onEvent($socket));
}
break;
}
}
+ function onEvent($socket) {
+ return function($watcher, $events) use($socket) {
+ $action = 0;
+ if ($events & Ev::READ) {
+ $action |= self::POLL_IN;
+ }
+ if ($events & Ev::WRITE) {
+ $action |= self::POLL_OUT;
+ }
+ if (!call_user_func($this->run, $this->client, $socket, $action)) {
+ if ($this->timeout) {
+ $this->timeout->del();
+ $this->timeout = null;
+ }
+ }
+ };
+ }
+
function once() {
- throw new BadMethodCallException("this test uses Ev::run()");
+ throw new BadMethodCallException("this test uses EventBase::loop()");
}
function wait(int $timeout_ms = null) {
- throw new BadMethodCallException("this test uses Ev::run()");
+ throw new BadMethodCallException("this test uses EventBase::loop()");
}
function send() {
- throw new BadMethodCallException("this test uses Ev::run()");
+ throw new BadMethodCallException("this test uses EventBase::loop()");
}
}
include "helper/server.inc";
server("proxy.inc", function($port) {
+ $evbase = new EventBase;
$client = new http\Client;
$client->configure([
- "use_eventloop" => new UserHandler($client)
+ "use_eventloop" => new UserHandler($client, $evbase)
]);
$client->enqueue(new http\Client\Request("GET", "http://localhost:$port/"), function($r) {
var_dump($r->getResponseCode());
});
- Ev::run();
+ $evbase->loop();
});
?>
===DONE===
--EXPECTREGEX--
Test
-T[ST]+U+int\(200\)
+T*[ST]+U+T*int\(200\)
===DONE===