connection = $connection; $this->connectionManager = $connectionManager; } public function respond() { if ($this->connection->hasBufferedAllData()) { $clientConnection = $this->connectionManager->findConnectionForSubdomain($this->detectSubdomain()); if (is_null($clientConnection)) { $this->connection->send(\GuzzleHttp\Psr7\str(new Response(404, [], 'Not found'))); $this->connection->close(); return; } $this->copyDataToClient($clientConnection); } } protected function detectSubdomain(): ?string { $host = $this->connection->getRequest()->getHeader('Host')[0]; $domainParts = explode('.', $host); return trim($domainParts[0]); } protected function passRequestThroughModifiers(string $requestId, Request $request, Connection $clientConnection): Request { foreach ($this->requestModifiers as $requestModifier) { $request = app($requestModifier)->modify($request, $requestId, $clientConnection, $this->connectionManager); } return $request; } protected function copyDataToClient(Connection $clientConnection) { $requestId = uniqid(); $request = $this->passRequestThroughModifiers($requestId, $this->connection->getRequest(), $clientConnection); $clientConnection->pipeRequestThroughProxy($this->connection, $requestId, $request); unset($this->connection->buffer); } }