You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

62 lines
1.5 KiB

<?php
require __DIR__ . '/../vendor/autoload.php';
$bootstrap = new Movim\Bootstrap;
$bootstrap->boot(true);
use App\Workers\AvatarHandler\AvatarHandler;
use Psr\Http\Message\ServerRequestInterface;
use React\EventLoop\Loop;
use React\Http\HttpServer;
use React\Http\Message\Response;
use React\Promise\Promise;
use React\Socket\SocketServer;
$loop = Loop::get();
$resolver = new AvatarHandler;
$handler = function (ServerRequestInterface $request) use ($resolver) {
return new Promise(function ($resolve) use ($request, $resolver) {
$query = null;
$data = json_decode((string)$request->getBody());
if (!$data) return;
switch ($request->getUri()->getPath()) {
case '/url':
$query = $resolver->url(
jid: $data->jid,
url: $data->url,
node: $data->node,
banner: $data->banner
);
break;
case '/base64':
$query = $resolver->base64(
jid: $data->jid,
type: $data->type
);
break;
}
if ($query) {
$query->then(function ($data) use ($resolve) {
$resolve(Response::json($data));
});
}
});
};
$server = new HttpServer($handler);
$server->on('error', function (\Throwable $e) {
\logError($e);
});
$path = 'unix://' . AVATAR_HANDLER_SOCKET;
$server->listen(new SocketServer($path));
$loop->run();