Exemple #1
0
 /**
  * @param HttpdRequest $request
  * @param HttpdResponse $response
  * @param array $labels
  */
 protected function dispatch(HttpdRequest $request, HttpdResponse $response, array $labels = [])
 {
     $labels['method'] = strtolower($request->getMethod());
     if (empty($this->routes)) {
         $request->subscribeCallback(null, null, function () use($request, $response, $labels) {
             $this->notifyNext(new HttpdEvent("/httpd/request", ['request' => $request, 'response' => $response], $labels));
         });
         return;
     }
     $info = $this->dispatcher->dispatch($request->getMethod(), $request->getPath());
     switch ($info[0]) {
         case Dispatcher::NOT_FOUND:
             $response->sendError("Route does not exist", 404);
             break;
         case Dispatcher::METHOD_NOT_ALLOWED:
             $response->sendError("Method not allowed", 405);
             break;
         case Dispatcher::FOUND:
             $labels['method'] = $request->getMethod();
             $labels['path'] = $request->getPath();
             $labels = array_merge($labels, $info[2]);
             $callable = $info[1];
             $request->setRouteParams($info[2]);
             // For streamable route, subscribe on event
             $this->notifyNext(new HttpdEvent("/httpd/request", ['request' => $request, 'response' => $response], $labels));
             // On end of request (whole data received)
             $request->subscribeCallback(null, null, function () use($request, $response, $callable) {
                 $callable($request, $response);
             });
     }
 }
Exemple #2
0
 /**
  * Wait end of transfer packet to complete
  * @param $data
  */
 public function parseChunk($data)
 {
     if (!$data) {
         return;
     }
     // Detect end of transfer
     if ($end = strpos($data, "0\r\n\r\n")) {
         $data = substr($data, 0, $end);
     }
     $this->buffer .= $data;
     $this->request->onData($data);
     if ($end) {
         $this->buffer = $this->parseChunkedBuffer($this->buffer);
         $this->request->setBody($this->buffer);
         $this->notifyCompleted();
         $this->buffer = '';
     }
 }