public function __invoke(ServiceManagerInterface $serviceManager, array $moreParams = [])
 {
     if (!isset($moreParams['buffer'])) {
         throw new Exception\UnexpectedValueException('Could not parse request.');
     }
     /** @var RequestParser $requestParser */
     $requestParser = $serviceManager->get('RequestParser');
     /** @var Request $request */
     $request = null;
     $requestParser->on(['state'], function (Event $event, $method, $path, $version) use(&$request) {
         $request = new Request($method, $path, $version);
         $event->getEventEmitter()->on(['header'], function (Event $e, $headerName, $headerValue) use($request) {
             /** @var Request $request */
             $name = \str_replace('-', '_', \strtoupper($headerName));
             if ($name === 'COOKIE') {
                 $cookieData = [];
                 parse_str($headerValue, $cookieData);
                 $request->setCookieParams(new ArrayObject($cookieData));
             } else {
                 $request->setHeader($name, $headerValue);
             }
         });
         $event->getEventEmitter()->on(['body'], function (Event $e, $body) use($request) {
             /** @var Request $request */
             if (!in_array($request->getMethod(), ['GET', 'HEAD']) && !empty($body)) {
                 $postData = [];
                 parse_str($body, $postData);
                 $request->setPostParams(new ArrayObject($postData));
             }
         });
     });
     $requestParser->parse($moreParams['buffer']);
     return $request;
 }
 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;
 }
 /**
  * @depends testGetPath
  */
 public function testGetParamsFromCookie(Request $request)
 {
     $request->setCookieParams(new \ArrayObject(['bay' => 65]));
     $this->assertEquals(65, $request->getParam('bay'));
 }