1--TEST--
2swoole_server/task: timer
3--SKIPIF--
4<?php
5require __DIR__ . '/../../include/skipif.inc';
6?>
7--FILE--
8<?php
9require __DIR__ . '/../../include/bootstrap.php';
10
11use Swoole\Coroutine\Http\Client;
12use Swoole\Server\Task;
13use Swoole\WebSocket\Frame;
14use Swoole\WebSocket\Server;
15
16use function Swoole\Coroutine\run;
17
18$pm = new SwooleTest\ProcessManager;
19$pm->parentFunc = function (int $pid) use ($pm) {
20    run(function () use ($pm) {
21        $cli = new Client('127.0.0.1', $pm->getFreePort());
22        $cli->set(['websocket_compression' => true, ]);
23        $cli->upgrade('/');
24        $cli->push('Hello Swoole');
25        $data = $cli->recv(5);
26        Assert::eq($data->data, 'OK');
27        echo "DONE\n";
28    });
29    $pm->kill();
30};
31$pm->childFunc = function () use ($pm) {
32    $http = new Server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS);
33    $http->set([
34        'worker_num' => 1,
35        'task_worker_num' => 1,
36        'event_object' => true,
37        'log_file' => '/dev/null',
38    ]);
39    $http->on('message', function (Server $server, Frame $frame) {
40        $server->task(['fd' => $frame->fd]);
41    });
42    $http->on('WorkerStart', function (Server $server, int $workerId) {
43        if ($server->taskworker) {
44            swoole_timer_after(1, function () use ($server, $workerId) {
45                var_dump("after1 : " . time());
46            });
47            // never callback
48            swoole_timer_after(10000, function () use ($server, $workerId) {
49                var_dump("after2 : " . time());
50            });
51        }
52    });
53    $http->on('task', function (Server $server, Task $task) {
54        var_dump('begin : ' . time());
55        swoole_timer_after(2000, function () use ($server, $task) {
56            var_dump('end : ' . time());
57            Assert::true($server->push($task->data['fd'], "OK"));
58        });
59    });
60    $http->start();
61};
62$pm->childFirst();
63$pm->run();
64?>
65--EXPECTF--
66string(19) "after1 : %d"
67string(18) "begin : %d"
68string(16) "end : %d"
69DONE
70