Exemple #1
0
 public function onReceive(SwooleServer $server, $fd, $fromId, $data)
 {
     if ($this->debug) {
         $this->debugData = [];
         Timer::start();
     }
     $length = unpack('N', $data)[1];
     $data = unserialize(substr($data, -$length));
     $_REQUEST = $_GET = $_POST = isset($data['request']) ? $data['request'] : [];
     $_COOKIE = isset($data['cookies']) ? $data['cookies'] : [];
     $_FILES = isset($data['files']) ? $data['files'] : [];
     $_SERVER = isset($data['server']) ? $data['server'] : [];
     foreach ($this->environmentVariables as $k => $v) {
         $_SERVER[$k] = $v;
     }
     $this->reset();
     ob_start();
     $response = Router::dispatch();
     $extraContent = ob_get_clean();
     $headers = $this->parseResponseHeaders($response);
     $body = $response->getContent();
     $result = serialize(['headers' => $headers, 'body' => $body . $extraContent, 'meta' => $this->debug ? $this->getDebugInfo($server) : ['service' => 1]]);
     $server->send($fd, pack('N', $outputLength = strlen($result)), $fromId);
     if ($outputLength >= $this->config['buffer_output_size']) {
         foreach (str_split($result, $this->config['chunk_output_size']) as $chunk) {
             $server->send($fd, $chunk, $fromId);
         }
     } else {
         $server->send($fd, $result, $fromId);
     }
 }