CapMousse\ReactRestify\Routing\Route::run PHP Method

run() public method

Run the current route
public run ( Request $request, CapMousse\ReactRestify\Http\Response $response, Callable $next ) : Void
$request CapMousse\ReactRestify\Http\Request
$response CapMousse\ReactRestify\Http\Response
$next Callable
return Void
    public function run(Request $request, Response $response, $next)
    {
        if (is_string($this->action)) {
            $this->action = explode(':', $this->action);
            $this->action[0] = new $action[0]();
        }
        if (in_array($this->method, array('PUT', 'POST'))) {
            $dataResult = "";
            $headers = $request->httpRequest->getHeaders();
            //Get data chunck by chunk
            $request->httpRequest->on('data', function ($data) use($headers, $request, &$dataResult) {
                $dataResult .= $data;
                if (isset($headers["Content-Length"])) {
                    if (strlen($dataResult) == $headers["Content-Length"]) {
                        $request->httpRequest->close();
                    }
                } else {
                    $request->httpRequest->close();
                }
            });
            //Wait request end to launch route
            $request->httpRequest->on('end', function () use($request, $response, $next, &$dataResult) {
                if ($dataResult !== null) {
                    parse_str($dataResult, $data);
                    $request->setData($data);
                }
                call_user_func_array($this->action, array($request, $response, $next));
                $this->emit('after', [$request, $response, $this]);
            });
        } else {
            call_user_func_array($this->action, array($request, $response, $next));
            $this->emit('after', [$request, $response, $this]);
        }
    }