summaryrefslogtreecommitdiff
path: root/php-src/PSR7Client.php
diff options
context:
space:
mode:
Diffstat (limited to 'php-src/PSR7Client.php')
-rw-r--r--php-src/PSR7Client.php158
1 files changed, 0 insertions, 158 deletions
diff --git a/php-src/PSR7Client.php b/php-src/PSR7Client.php
deleted file mode 100644
index e8d93fe8..00000000
--- a/php-src/PSR7Client.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-/**
- * High-performance PHP process supervisor and load balancer written in Go
- *
- * @author Wolfy-J
- */
-
-namespace Spiral\RoadRunner;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Zend\Diactoros;
-
-/**
- * Manages PSR-7 request and response.
- */
-class PSR7Client
-{
- /**
- * @varWorker
- */
- private $worker;
-
- /**
- * @param Worker $worker
- */
- public function __construct(Worker $worker)
- {
- $this->worker = $worker;
- }
-
- /**
- * @return Worker
- */
- public function getWorker(): Worker
- {
- return $this->worker;
- }
-
- /**
- * @return ServerRequestInterface|null
- */
- public function acceptRequest()
- {
- $body = $this->worker->receive($ctx);
- if (empty($body) && empty($ctx)) {
- // termination request
- return null;
- }
-
- if (empty($ctx = json_decode($ctx, true))) {
- // invalid context
- return null;
- }
-
- parse_str($ctx['rawQuery'], $query);
-
- $bodyStream = 'php://input';
- $parsedBody = null;
- if ($ctx['parsed']) {
- $parsedBody = json_decode($body, true);
- } elseif ($body != null) {
- $bodyStream = new Diactoros\Stream("php://memory", "rwb");
- $bodyStream->write($body);
- }
-
- $_SERVER = $this->configureServer($ctx);
-
- $request = new Diactoros\ServerRequest(
- $_SERVER,
- $this->wrapUploads($ctx['uploads']),
- $ctx['uri'],
- $ctx['method'],
- $bodyStream,
- $ctx['headers'],
- $ctx['cookies'],
- $query,
- $parsedBody,
- $ctx['protocol']
- );
-
- if (!empty($ctx['attributes'])) {
- foreach ($ctx['attributes'] as $key => $value) {
- $request = $request->withAttribute($key, $value);
- }
- }
-
- return $request;
- }
-
- /**
- * Send response to the application server.
- *
- * @param ResponseInterface $response
- */
- public function respond(ResponseInterface $response)
- {
- $headers = $response->getHeaders();
- if (empty($headers)) {
- // this is required to represent empty header set as map and not as array
- $headers = new \stdClass();
- }
-
- $this->worker->send($response->getBody(), json_encode([
- 'status' => $response->getStatusCode(),
- 'headers' => $headers
- ]));
- }
-
- /**
- * Returns altered copy of _SERVER variable. Sets ip-address,
- * request-time and other values.
- *
- * @param array $ctx
- * @return array
- */
- protected function configureServer(array $ctx): array
- {
- $server = $_SERVER;
- $server['REQUEST_TIME'] = time();
- $server['REQUEST_TIME_FLOAT'] = microtime(true);
- $server['REMOTE_ADDR'] = $ctx['attributes']['ipAddress'] ?? $ctx['remoteAddr'] ?? '127.0.0.1';
-
- return $server;
- }
-
- /**
- * Wraps all uploaded files with UploadedFile.
- *
- * @param array $files
- *
- * @return array
- */
- private function wrapUploads($files): array
- {
- if (empty($files)) {
- return [];
- }
-
- $result = [];
- foreach ($files as $index => $f) {
- if (!isset($f['name'])) {
- $result[$index] = $this->wrapUploads($f);
- continue;
- }
-
- $result[$index] = new Diactoros\UploadedFile(
- $f['tmpName'],
- $f['size'],
- $f['error'],
- $f['name'],
- $f['mime']
- );
- }
-
- return $result;
- }
-} \ No newline at end of file