2019-09-06 23:53:10 +08:00

115 lines
2.5 KiB
PHP
Executable File

--TEST--
swoole_client: onBufferFull & onBufferEmpty
--SKIPIF--
<?php require __DIR__ . '/../include/skipif.inc'; ?>
--INI--
assert.active=1
assert.warning=1
assert.bail=0
assert.quiet_eval=0
--FILE--
<?php
require_once __DIR__ . '/../include/bootstrap.php';
require_once __DIR__ . '/../include/swoole.inc';
$port = get_one_free_port();
$pm = new ProcessManager;
$pm->parentFunc = function ($pid) use ($port)
{
Swoole\Async::set(['log_level' => 5, 'display_errors' => false]);
$client = new Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->set(['socket_buffer_size' => 1 * 1024 * 1024,]);
$client->buffer = array();
$client->on("connect", function (Swoole\Client $cli)
{
for ($i = 0; $i < 1024; $i++)
{
$data = str_repeat('A', 8192);
if ($cli->send($data) === false and $cli->errCode == 1008) {
$cli->buffer[] = $data;
}
}
});
$client->on("receive", function (Swoole\Client $cli, $data)
{
$cli->send(pack('N', 8) . 'shutdown');
$cli->close();
assert($data === md5_file(TEST_IMAGE));
});
$client->on("error", function($cli){
echo "Connect failed\n";
});
$client->on("close", function($cli){
});
$client->on("bufferEmpty", function (Swoole\Client $cli)
{
echo "bufferEmpty\n";
foreach ($cli->buffer as $k => $data)
{
if ($cli->send($data) === false and $cli->errCode == 1008)
{
break;
}
else
{
unset($cli->buffer[$k]);
}
}
if (count($cli->buffer) == 0)
{
$cli->close();
}
});
$client->on("bufferFull", function (Swoole\Client $cli)
{
echo "bufferFull\n";
});
$client->connect(TCP_SERVER_HOST, $port, 0.5);
Swoole\Event::wait();
};
$pm->childFunc = function () use ($pm, $port)
{
$socket = stream_socket_server("tcp://0.0.0.0:{$port}", $errno, $errstr) or die("$errstr ($errno)<br />\n");
$pm->wakeup();
while ($conn = stream_socket_accept($socket))
{
for ($i = 0; $i < 4; $i++)
{
usleep(500000);
for ($j = 0; $j < 256; $j++)
{
$data = fread($conn, 8192);
}
}
fclose($conn);
break;
}
fclose($socket);
};
$pm->childFirst();
$pm->run();
?>
--EXPECT--
bufferFull
bufferEmpty
bufferFull
bufferEmpty
bufferFull
bufferEmpty
bufferFull
bufferEmpty