mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Use released Utopia coroutine adapter
This commit is contained in:
+1
-1
@@ -5,7 +5,6 @@ require_once __DIR__ . '/init/span.php';
|
||||
|
||||
$registerRequestResources = require __DIR__ . '/init/resources/request.php';
|
||||
|
||||
use Appwrite\Utopia\Http\Adapter\SwooleCoroutine\Server;
|
||||
use Appwrite\Utopia\Request;
|
||||
use Appwrite\Utopia\Response;
|
||||
use Swoole\Table;
|
||||
@@ -22,6 +21,7 @@ use Utopia\Database\Exception\Duplicate as DuplicateException;
|
||||
use Utopia\Database\Helpers\ID;
|
||||
use Utopia\Database\Helpers\Permission;
|
||||
use Utopia\Database\Helpers\Role;
|
||||
use Utopia\Http\Adapter\SwooleCoroutine\Server;
|
||||
use Utopia\Http\Files;
|
||||
use Utopia\Http\Http;
|
||||
use Utopia\Logger\Log;
|
||||
|
||||
Generated
+6
-6
@@ -4325,16 +4325,16 @@
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/http",
|
||||
"version": "0.34.16",
|
||||
"version": "0.34.17",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/http.git",
|
||||
"reference": "2b4021ba3f9d476264ce9fd6703d6c79de9add7f"
|
||||
"reference": "d3e4143b8b06d9823d0c29a06dacefa5a1b93677"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/http/zipball/2b4021ba3f9d476264ce9fd6703d6c79de9add7f",
|
||||
"reference": "2b4021ba3f9d476264ce9fd6703d6c79de9add7f",
|
||||
"url": "https://api.github.com/repos/utopia-php/http/zipball/d3e4143b8b06d9823d0c29a06dacefa5a1b93677",
|
||||
"reference": "d3e4143b8b06d9823d0c29a06dacefa5a1b93677",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4373,9 +4373,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/http/issues",
|
||||
"source": "https://github.com/utopia-php/http/tree/0.34.16"
|
||||
"source": "https://github.com/utopia-php/http/tree/0.34.17"
|
||||
},
|
||||
"time": "2026-03-20T10:39:07+00:00"
|
||||
"time": "2026-04-06T04:40:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/image",
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Appwrite\Utopia\Http\Adapter\SwooleCoroutine;
|
||||
|
||||
use Swoole\Coroutine;
|
||||
use Swoole\Coroutine\Http\Server as SwooleServer;
|
||||
use Swoole\Http\Request as SwooleRequest;
|
||||
use Swoole\Http\Response as SwooleResponse;
|
||||
use Utopia\DI\Container;
|
||||
use Utopia\Http\Adapter;
|
||||
use Utopia\Http\Adapter\SwooleCoroutine\Request;
|
||||
use Utopia\Http\Adapter\SwooleCoroutine\Response;
|
||||
|
||||
class Server extends Adapter
|
||||
{
|
||||
protected const REQUEST_CONTAINER_CONTEXT_KEY = '__utopia_http_request_container';
|
||||
|
||||
protected SwooleServer $server;
|
||||
protected Container $container;
|
||||
|
||||
/** @var callable|null */
|
||||
protected $onStartCallback = null;
|
||||
|
||||
public function __construct(
|
||||
string $host,
|
||||
?string $port = null,
|
||||
array $settings = [],
|
||||
?Container $container = null,
|
||||
) {
|
||||
$this->server = new SwooleServer($host, $port, false, true);
|
||||
$this->server->set(\array_merge($settings, [
|
||||
'http_parse_cookie' => false,
|
||||
]));
|
||||
$this->container = $container ?? new Container();
|
||||
}
|
||||
|
||||
public function onRequest(callable $callback)
|
||||
{
|
||||
$this->server->handle('/', function (SwooleRequest $request, SwooleResponse $response) use ($callback) {
|
||||
$requestContainer = new Container($this->container);
|
||||
$requestContainer->set('swooleRequest', fn () => $request);
|
||||
$requestContainer->set('swooleResponse', fn () => $response);
|
||||
|
||||
Coroutine::getContext()[self::REQUEST_CONTAINER_CONTEXT_KEY] = $requestContainer;
|
||||
|
||||
try {
|
||||
\call_user_func($callback, new Request($request), new Response($response));
|
||||
} finally {
|
||||
unset(Coroutine::getContext()[self::REQUEST_CONTAINER_CONTEXT_KEY]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function getContainer(): Container
|
||||
{
|
||||
if (Coroutine::getCid() !== -1) {
|
||||
return Coroutine::getContext()[self::REQUEST_CONTAINER_CONTEXT_KEY] ?? $this->container;
|
||||
}
|
||||
|
||||
return $this->container;
|
||||
}
|
||||
|
||||
public function getServer(): SwooleServer
|
||||
{
|
||||
return $this->server;
|
||||
}
|
||||
|
||||
public function onStart(callable $callback)
|
||||
{
|
||||
$this->onStartCallback = $callback;
|
||||
}
|
||||
|
||||
public function start()
|
||||
{
|
||||
$startServer = function (): void {
|
||||
if ($this->onStartCallback) {
|
||||
\call_user_func($this->onStartCallback, $this);
|
||||
}
|
||||
|
||||
$this->server->start();
|
||||
};
|
||||
|
||||
if (Coroutine::getCid() !== -1) {
|
||||
$startServer();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
\Swoole\Coroutine\run($startServer);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user