-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathServer.php
More file actions
executable file
·51 lines (41 loc) · 1.39 KB
/
Server.php
File metadata and controls
executable file
·51 lines (41 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
namespace Utopia\Http\Adapter\Swoole;
use Swoole\Coroutine;
use Utopia\Http\Adapter;
use Swoole\Coroutine\Http\Server as SwooleServer;
use Swoole\Http\Request as SwooleRequest;
use Swoole\Http\Response as SwooleResponse;
use Utopia\Http\Http;
use function Swoole\Coroutine\run;
class Server extends Adapter
{
protected SwooleServer $server;
public function __construct(string $host, ?string $port = null, array $settings = [])
{
$this->server = new SwooleServer($host, $port);
$this->server->set(\array_merge($settings, [
'enable_coroutine' => true
]));
}
public function onRequest(callable $callback)
{
$this->server->handle('/', function (SwooleRequest $request, SwooleResponse $response) use ($callback) {
$context = \strval(Coroutine::getCid());
Http::setResource('swooleRequest', fn () => $request, [], $context);
Http::setResource('swooleResponse', fn () => $response, [], $context);
call_user_func($callback, new Request($request), new Response($response), $context);
});
}
public function onStart(callable $callback)
{
call_user_func($callback, $this);
}
public function start()
{
if (Coroutine::getCid() === -1) {
run(fn () => $this->server->start());
} else {
$this->server->start();
}
}
}