diff --git a/composer.json b/composer.json index a062a03..ac6a817 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "ext-json": "*", "ext-sockets": "*", "psr/log": "^1.0|^2.0|^3.0", - "spiral/goridge": "^3.0", + "spiral/goridge": "^3.2.0", "symfony/polyfill-php80": "^1.23", "composer-runtime-api": "^2.0" }, @@ -37,7 +37,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "2.3.x-dev" } }, "suggest": { diff --git a/src/Payload.php b/src/Payload.php index 2ef7317..190d895 100644 --- a/src/Payload.php +++ b/src/Payload.php @@ -28,17 +28,21 @@ final class Payload * Execution context (binary). * * @psalm-readonly - * @var string */ public string $header = ''; /** - * @param string|null $body - * @param string|null $header + * End of stream. + * The {@see true} value means the Payload block is last in the stream. + * + * @psalm-readonly */ - public function __construct(?string $body, ?string $header = null) + public bool $eos = true; + + public function __construct(?string $body, ?string $header = null, bool $eos = true) { $this->body = $body ?? ''; $this->header = $header ?? ''; + $this->eos = $eos; } } diff --git a/src/Worker.php b/src/Worker.php index 6e02698..7eafc8b 100644 --- a/src/Worker.php +++ b/src/Worker.php @@ -101,7 +101,7 @@ public function waitPayload(): ?Payload */ public function respond(Payload $payload): void { - $this->send($payload->body, $payload->header); + $this->send($payload->body, $payload->header, $payload->eos); } /** @@ -123,13 +123,16 @@ public function stop(): void } /** - * @param string $body - * @param string $header + * @param bool $eos End of stream */ - private function send(string $body = '', string $header = ''): void + private function send(string $body = '', string $header = '', bool $eos = true): void { $frame = new Frame($header . $body, [\strlen($header)]); + if (!$eos) { + $frame->byte10 = Frame::BYTE10_STREAM; + } + $this->sendFrame($frame); }