Пример #1
0
 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;
 }
Пример #2
0
 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)
             }
         }
     }
 }
Пример #3
0
 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;
 }
Пример #4
0
                    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());