/** * Handles request event * * @param HttpRequestEvent $event * * @throws NotFoundHttpException */ public function onRequest(HttpRequestEvent $event) { $event->getResponse()->getHeaders()->set('X-Powered-By', 'ThinFrame/Karma (v0.2, engine ReactPHP)'); $matcher = new UrlMatcher($this->routeCollection, new RequestContext('', $event->getRequest()->getMethod())); try { $route = $matcher->match($event->getRequest()->getPath()); $this->handleRoute($route, $event->getRequest(), $event->getResponse()); $event->stopPropagation(); } catch (ResourceNotFoundException $exception) { throw new NotFoundHttpException(); } }
/** * Handle http request * * @param HttpRequestEvent $event */ public function onRequest(HttpRequestEvent $event) { $filePath = $event->getRequest()->getPath(); foreach ($this->application->getMetadata() as $name => $metadata) { /* @var $metadata \PhpCollection\Map */ if ($metadata->containsKey('assets')) { $assumedFilePath = $metadata->get('application_path')->get() . DIRECTORY_SEPARATOR . $metadata->get('assets')->get() . DIRECTORY_SEPARATOR . $filePath; $assumedFilePath = realpath($assumedFilePath); if (file_exists($assumedFilePath) && is_file($assumedFilePath)) { $event->stopPropagation(); $fileStream = new Stream(fopen($assumedFilePath, 'r'), $this->serverLoop); $event->getResponse()->getHeaders()->set('Content-Type', MimeTypeGuesser::getMimeType($assumedFilePath)); $event->getResponse()->dispatchHeaders(); $fileStream->pipe($event->getResponse()->getReactResponse()); $fileStream->on('end', 'gc_collect_cycles'); gc_collect_cycles(); } } } }