diff options
Diffstat (limited to 'assets/php/vendor/react/event-loop/examples/12-generate-yes.php')
-rw-r--r-- | assets/php/vendor/react/event-loop/examples/12-generate-yes.php | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/assets/php/vendor/react/event-loop/examples/12-generate-yes.php b/assets/php/vendor/react/event-loop/examples/12-generate-yes.php new file mode 100644 index 0000000..ebc2beb --- /dev/null +++ b/assets/php/vendor/react/event-loop/examples/12-generate-yes.php @@ -0,0 +1,41 @@ +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +// data can be given as first argument or defaults to "y" +$data = (isset($argv[1]) ? $argv[1] : 'y') . "\n"; + +// repeat data X times in order to fill around 200 KB +$data = str_repeat($data, round(200000 / strlen($data))); + +$loop = React\EventLoop\Factory::create(); + +if (!defined('STDOUT') || stream_set_blocking(STDOUT, false) !== true) { + fwrite(STDERR, 'ERROR: Unable to set STDOUT non-blocking (not CLI or Windows?)' . PHP_EOL); + exit(1); +} + +// write data to STDOUT whenever its write buffer accepts data +// for illustrations purpose only, should use react/stream instead +$loop->addWriteStream(STDOUT, function ($stdout) use ($loop, &$data) { + // try to write data + $r = fwrite($stdout, $data); + + // nothing could be written despite being writable => closed + if ($r === 0) { + $loop->removeWriteStream($stdout); + fclose($stdout); + stream_set_blocking($stdout, true); + fwrite(STDERR, 'Stopped because STDOUT closed' . PHP_EOL); + + return; + } + + // implement a very simple ring buffer, unless everything has been written at once: + // everything written in this iteration will be appended for next iteration + if (isset($data[$r])) { + $data = substr($data, $r) . substr($data, 0, $r); + } +}); + +$loop->run(); |