Skip to content
This repository has been archived by the owner on Nov 26, 2023. It is now read-only.

Innmind/async-stream

Repository files navigation

Async Stream

Build Status codecov Type Coverage

Async implementation of innmind/stream to allow switching to another task when reading, writing or watching for streams.

Installation

composer require innmind/async-stream

Usage

use Innmind\Async\Stream\Streams;
use Innmind\Stream\Streams as Synchronous;
use Innmind\TimeContinuum\Earth\Clock;
use Innmind\Url\Path;
use Innmind\Mantle\{
    Source\Predetermined,
    Suspend,
    Forerunner,
};

$clock = new Clock;
$synchronous = Synchronous::fromAmbientAuthority();
$source = Predetermined::of(
    static function(Suspend $suspend) use ($clock, $synchronous) {
        $stream = Streams::of($synchronous, $suspend, $clock)
            ->readable()
            ->open(Path::of('fixtures/first.txt'));

        while (!$stream->end()) {
            echo $stream->readLine()->match(
                static fn($line) => $line->toString(),
                static fn() => '',
            );
        }
    },
    static function(Suspend $suspend) use ($clock, $synchronous) {
        $stream = Streams::of($synchronous, $suspend, $clock)
            ->readable()
            ->open(Path::of('fixtures/second.txt'));

        while (!$stream->end()) {
            echo $stream->readLine()->match(
                static fn($line) => $line->toString(),
                static fn() => '',
            );
        }
    },
);

Forerunner::of($clock)(null, $source); // will print interlaced lines of both files

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages