1--TEST--
2swoole_server: last time
3--SKIPIF--
4<?php
5require __DIR__ . '/../include/skipif.inc';
6?>
7--FILE--
8<?php
9require __DIR__ . '/../include/bootstrap.php';
10
11use Swoole\Server;
12
13$pm = new SwooleTest\ProcessManager;
14
15$pm->parentFunc = function ($pid) use ($pm) {
16    Co\Run(function () use ($pm) {
17        $cli = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
18        $r = $cli->connect(TCP_SERVER_HOST, $pm->getFreePort(), 1);
19        Assert::assert($r);
20        $cli->send("test1\r\ntest2\r\n");
21        $result = [json_decode($cli->recv(), true), json_decode($cli->recv(), true)];
22        Assert::lessThanEq($result[0]['php_time'] - $result[0]['last_dispatch_time'], 0.01);
23        Assert::greaterThanEq($result[1]['php_time'] - $result[1]['last_dispatch_time'], 0.3);
24        $cli->close();
25        echo "SUCCESS\n";
26    });
27    $pm->kill();
28};
29
30$pm->childFunc = function () use ($pm) {
31    $serv = new Server(TCP_SERVER_HOST, $pm->getFreePort());
32    $serv->set([
33        "worker_num" => 1,
34        'log_file' => '/dev/null',
35        'open_eof_split' => true,
36        'package_eof' => "\r\n",
37    ]);
38    $serv->on("WorkerStart", function (Server $serv) use ($pm) {
39        $pm->wakeup();
40    });
41    $serv->on("Receive", function (Server $serv, $fd, $rid, $data) {
42        $info = $serv->getClientInfo($fd);
43        $info ['php_time'] = microtime(true);
44        $serv->send($fd, json_encode($info));
45        if (trim($data) == 'test1') {
46            usleep(300000);
47        }
48    });
49    $serv->start();
50};
51
52$pm->childFirst();
53$pm->run();
54?>
55--EXPECT--
56SUCCESS
57