<?php

require 'vendor/autoload.php';

use React\EventLoop\Factory as EventLoopFactory;
use Symfony\Component\HttpClient\NativeHttpClient;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use React\Promise\Stream;

$loop = EventLoopFactory::create();

$client = new NativeHttpClient();

function load($url, \React\EventLoop\LoopInterface $loop, HttpClientInterface $client) {
//    $def = new Deferred();
    $response = $client->request('GET', $url);

    $stream = new \React\Stream\ReadableResourceStream($response->toStream(), $loop);
    return $stream;
//    $loop->addReadStream($response->toStream(), function ($stream) use ($def) {
////        var_dump(stream_get_meta_data($stream));
//        echo "HELO\n";
//        $def->resolve();
//    });
//    return Stream\unwrapReadable(Stream\buffer($stream));

//    return $def->promise();
}

//load('https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-10.2.0-amd64-cinnamon.iso', $loop, $client)
//    ->on('pipe', function () {
//        echo "hello.";
//    })
//    ->on('end', function () {
//        echo "Loaded cinnamon\n";
//    });
//
//load('https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-10.2.0-amd64-standard.iso', $loop, $client)
//    ->on('data', function () {
//        echo "world.";
//    })
//    ->on('end', function () {
//        echo "Loaded standard\n";
//    });

load('http://localhost:8000/long-to-execute', $loop, $client)
    ->on('data', function ($data) {
        echo "hello.";
        var_dump($data);
    })
    ->on('end', function () {
        echo "Loaded long\n";
    });

load('http://localhost:8001/faster', $loop, $client)
    ->on('data', function ($data) {
        echo "world.";
        var_dump($data);
    })
    ->on('end', function () {
        echo "Loaded fast\n";
    });

echo "Not blocking at this state\n";

$loop->run();

//$response = $client->request('GET', 'https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-10.2.0-amd64-standard.iso');
//$streamResource = $response->toStream();
//
//file_put_contents('foo.iso', stream_get_contents($streamResource));