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]);
}
}