diff --git a/lib/ResourceInputStream.php b/lib/ResourceInputStream.php index e3999db..8859daf 100644 --- a/lib/ResourceInputStream.php +++ b/lib/ResourceInputStream.php @@ -204,6 +204,11 @@ public function getResource() return $this->resource; } + public function setChunkSize(int $chunkSize) + { + $this->chunkSize = $chunkSize; + } + /** * References the read watcher, so the loop keeps running in case there's an active read. * diff --git a/lib/ResourceOutputStream.php b/lib/ResourceOutputStream.php index f34184b..afe0e46 100644 --- a/lib/ResourceOutputStream.php +++ b/lib/ResourceOutputStream.php @@ -51,13 +51,13 @@ public function __construct($stream, int $chunkSize = null) \stream_set_write_buffer($stream, 0); $this->resource = $stream; - $this->chunkSize = $chunkSize; + $this->chunkSize = &$chunkSize; $writes = $this->writes = new \SplQueue; $writable = &$this->writable; $resource = &$this->resource; - $this->watcher = Loop::onWritable($stream, static function ($watcher, $stream) use ($writes, $chunkSize, &$writable, &$resource) { + $this->watcher = Loop::onWritable($stream, static function ($watcher, $stream) use ($writes, &$chunkSize, &$writable, &$resource) { static $emptyWrites = 0; try { @@ -274,6 +274,11 @@ public function getResource() return $this->resource; } + public function setChunkSize(int $chunkSize) + { + $this->chunkSize = $chunkSize; + } + public function __destruct() { if ($this->resource !== null) { diff --git a/test/ResourceStreamTest.php b/test/ResourceStreamTest.php index 58d0fa8..6dd966c 100644 --- a/test/ResourceStreamTest.php +++ b/test/ResourceStreamTest.php @@ -274,4 +274,19 @@ public function testIssue47() $this->assertStringEqualsFile(__FILE__, $buffer); }); } + + public function testSetChunkSize() + { + Loop::run(function () { + list($a, $b) = $this->getStreamPair(); + $a->setChunkSize(1); + $b->setChunkSize(1); + + $this->assertSame(3, yield $a->write('foo')); + $this->assertSame('f', yield $b->read()); + + $b->setChunkSize(3); + $this->assertSame('oo', yield $b->read()); + }); + } }