public function parse($content) { $result = array(); $parser = uv_http_parser_init(\UV::HTTP_REQUEST); //set up http parser uv_http_parser_execute($parser, $content, $result); return $result; }
public function onRead($client, $nread, $buffer) { //echo $buffer; //echo "--Error: " . uv_err_name(uv_last_error(uv_default_loop())) . PHP_EOL; if ($nread < 0) { //echo "[NREAD={$nread}]\n"; uv_shutdown($client, array($this, "onShutdown")); } else { if ($nread == 0) { // nothing to do. //echo "[NREAD=0]\n"; } else { $result = array(); if (uv_http_parser_execute($this->parsers[(int) $client], $buffer, $result)) { $response = new HttpResponse($this, $client); $closure = $this->closure; $closure($result, $response, $client); } else { // nothing to do. (waiting next buffer) } } } }
public function __invoke(ServiceManagerInterface $serviceManager, array $moreParams = []) { if (!isset($moreParams['buffer'])) { throw new Exception\UnexpectedValueException('Could not parse request.'); } $result = []; if (!\uv_http_parser_execute(\uv_http_parser_init(\UV::HTTP_REQUEST), $moreParams['buffer'], $result)) { throw new Exception\UnexpectedValueException('Could not parse request.'); } if (!isset($result['REQUEST_METHOD'])) { throw new Exception\BadRequestException('No request method found or this method is not supported.'); } if (!isset($result['PATH'])) { throw new Exception\BadRequestException('Invalid request path specified.'); } $request = new Request($result['REQUEST_METHOD'], $result['PATH']); $method = $result['REQUEST_METHOD']; if (!in_array($method, ['GET', 'HEAD']) && isset($result['HEADERS']) && isset($result['HEADERS']['BODY'])) { $postData = []; parse_str($result['HEADERS']['BODY'], $postData); $request->setPostParams(new ArrayObject($postData)); } if (isset($result['QUERY'])) { $queryData = []; parse_str($result['QUERY'], $queryData); $request->setQueryParams(new ArrayObject($queryData)); } if (isset($result['HEADERS'])) { $request->setHeaders(new ArrayObject($result['HEADERS'])); if (isset($result['HEADERS']['COOKIE'])) { $cookieData = []; parse_str($result['HEADERS']['COOKIE'], $cookieData); $request->setCookieParams(new ArrayObject($cookieData)); } } return $request; }
unset($clients[(int) $client]); }); }); return; } else { if ($nread == 0) { if (uv_last_error() == UV::EOF) { uv_shutdown($client, function ($client) use(&$parsers, &$clients) { uv_close($client, function ($client) use(&$parsers, &$clients) { unset($parsers[(int) $client]); unset($clients[(int) $client]); }); }); return; } } else { $result = array(); if (uv_http_parser_execute($parsers[(int) $client], $buffer, $result)) { $response = "HTTP/1.1 200 OK\r\n\r\nHello World"; uv_write($client, $response, function ($client) use(&$parsers, &$clients) { uv_close($client, function ($client) use(&$parsers, &$clients) { unset($parsers[(int) $client]); unset($clients[(int) $client]); }); }); } } } }); }); uv_run(uv_default_loop());