Esempio n. 1
0
 public function dispatch(Pebble_Http_Request $request)
 {
     $response = new Pebble_Http_Response();
     if ($methodName = $this->_getRoute($request)) {
         $response->setStatusCode(Pebble_Http_Response::HTTP_STATUS_200);
         try {
             ob_start();
             $statusCode = $this->{$methodName}($request);
             $responseBody = ob_get_contents();
             ob_end_clean();
             $response->setBody($responseBody);
             if ($statusCode !== null) {
                 $response->setStatusCode($statusCode);
             }
         } catch (Exception $e) {
             $this->_500($response, $e);
         }
         return $response;
     } else {
         if (file_exists(getcwd() . $request->getUrl())) {
             $filename = getcwd() . $request->getUrl();
             if (is_file($filename)) {
                 $file = file_get_contents($file);
                 $response->setBody($file);
                 $response->setStatusCode(Pebble_Http_Response::HTTP_STATUS_200);
             } else {
                 $this->_404($response);
             }
         } else {
             if (file_exists(PEBBLE_ROOT . '/resources' . $request->getUrl())) {
                 $filename = PEBBLE_ROOT . '/resources' . $request->getUrl();
                 if (!is_file($filename)) {
                     $this->_404($response);
                 } else {
                     $file = file_get_contents($filename);
                     $response->setBody($file);
                     $response->setStatusCode(Pebble_Http_Response::HTTP_STATUS_200);
                 }
             } else {
                 $this->_404($response);
             }
         }
     }
     return $response;
 }
Esempio n. 2
0
 public static function serve()
 {
     $options = self::$_options;
     $sock = self::$_socket;
     $bound = socket_bind($sock, $options['bind_address'], $options['listen_port']);
     if (!$bound) {
         return;
     }
     socket_listen($sock);
     echo "Server is listening on port " . $options['listen_port'] . PHP_EOL;
     while (self::$_continue) {
         $childSocket = socket_accept($sock);
         $input = socket_read($childSocket, 1024);
         if ($input) {
             $request = new Pebble_Http_Request($input);
             if ($options['verbose']) {
                 echo $request;
             }
             try {
                 $response = self::$_dispatcher->dispatch($request);
             } catch (Exception $e) {
                 echo "Uncaught Exception: " . $e->getMessage() . PHP_EOL;
                 $response = new Pebble_Http_Response();
                 $response->setStatusCode(Pebble_Http_Response::HTTP_STATUS_SERVER_ERROR);
             }
             if ($options['verbose']) {
                 echo " (" . $response->getStatusCode() . ")" . PHP_EOL;
             }
             socket_write($childSocket, $response->__toString());
             socket_close($childSocket);
             unset($childSocket);
         } else {
             echo "Socket Error: " . socket_last_error($childSocket) . "\n";
         }
     }
     socket_close(self::$_socket);
 }