function main() { $loop = React\EventLoop\Factory::create(); $socket = new React\Socket\Server($loop); $http = new React\Http\Server($socket, $loop); $st = new Storage('im.db'); $http->on('request', function ($request, $response) use($st) { $r = new Request($request, $response); # var_dump($r->request->getHeaders()); if (!array_key_exists("Content-Length", $r->request->getHeaders())) { $r->abort(400, "need json content"); return; } $r->contentLength = intval($r->request->getHeaders()["Content-Length"]); $request->on('data', function ($data) use($r, $st) { $r->addInput($data); if (!$r->readyToProcess()) { return; } if (!($js = $r->parseInput())) { $r->abort(400, "Invalid json"); return; } global $methods; // imported it from Methods.php. // Failed to find how to import it explicitly // (like python's "import Variable from Module") if (!isset($js->method) || !array_key_exists($js->method, $methods)) { $r->abort(400, "Invalid method"); return; } try { $methods[$js->method]($r, $js, $st); } catch (Exception $e) { $r->abort(500, "inernal server error"); } }); }); echo "Server running at http://127.0.0.1:1337\n"; $socket->listen(1337); $loop->run(); }