diff --git a/.gitignore b/.gitignore index 58be7c72..ff27cd12 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +examples/file_stream_write.php.time vendor .phpunit.result.cache diff --git a/examples/file_stream_read.php b/examples/file_stream_read.php new file mode 100644 index 00000000..48eb4362 --- /dev/null +++ b/examples/file_stream_read.php @@ -0,0 +1,49 @@ +getContents($offset, READ_CHUNK_SIZE)->then( + function (string $contents) use (&$read, $stream, &$offset, $file): void { + $length = strlen($contents); + if ($length === 0) { + $stream->end(''); + return; + } + $offset += $length; + $stream->write($contents); + $read(); + }, + function (Throwable $throwable) use ($stream) { + $stream->emit('error', $throwable); + $stream->close(); + } + ); + }; + + $read(); + + return $stream; +} + +Factory::create()->detect(__FILE__)->then(function (FileInterface $file) { + $stream = streamFile($file); + $stream->on('data', function (string $contents): void { + echo $contents; + }); + $stream->on('error', function (Throwable $throwable): void { + echo $throwable; + }); +})->done(); diff --git a/examples/file_stream_write.php b/examples/file_stream_write.php new file mode 100644 index 00000000..8a5c3c51 --- /dev/null +++ b/examples/file_stream_write.php @@ -0,0 +1,43 @@ +on('data', function ($data) use (&$buffer, &$writing, $file): void { + $buffer .= $data; + + if ($writing === false) { + $writing = true; + $writeData = $buffer; + $buffer = ''; + $file->putContents($writeData, FILE_APPEND)->then(function (int $bytesWritten) use (&$buffer, &$writing, $writeData): void { + $writing = false; + $buffer = substr($writeData, $bytesWritten) . $buffer; + })->done(); + } + }); +} + +file_put_contents(__FILE__ . '.time', '', FILE_APPEND); +Factory::create()->detect(__FILE__ . '.time')->then(function (FileInterface $file) { + $stream = new ThroughStream(); + streamFile($file, $stream); + for ($i = 0; $i < 13; $i++) { + Loop::addTimer($i, function () use ($stream): void { + $stream->write(time() . PHP_EOL); + }); + } + Loop::addTimer(15, function () use ($stream): void { + $stream->end(time() . PHP_EOL); + }); +})->done();