Exemplo n.º 1
0
 public function testResultingStreamBuffer()
 {
     $stream = $this->getMock('React\\Stream\\WritableStreamInterface');
     $buffered = '';
     $stream->expects($this->any())->method('write')->will($this->returnCallback(function ($data) use(&$buffered) {
         $buffered .= $data;
     }));
     $channel = new BufferedChannel();
     // initially nothing
     $channel->writeMessage('hello', 'world');
     $this->assertEquals('', $buffered);
     // connecting will send messages buffered in channel
     $channel->connect($stream, 0);
     $this->assertEquals("id: 0\nevent: world\ndata: hello\n\n", $buffered);
 }
Exemplo n.º 2
0
    if ($request->getPath() === '/') {
        $response->writeHead('200', array('Content-Type' => 'text/html'));
        $response->end(file_get_contents(__DIR__ . '/../01-simple-periodic/eventsource.html'));
        return;
    }
    echo 'connected' . PHP_EOL;
    $headers = $request->getHeaders();
    $id = isset($headers['Last-Event-ID']) ? $headers['Last-Event-ID'] : null;
    $response->writeHead(200, array('Content-Type' => 'text/event-stream'));
    $channel->connect($response, $id);
    $response->on('close', function () use($response, $channel) {
        echo 'disconnected' . PHP_EOL;
        $channel->disconnect($response);
    });
});
$port = isset($argv[2]) ? $argv[2] : 8000;
$connector = new TcpConnector($loop);
$connector->create('127.0.0.1', $port)->then(function (Stream $stream) use($channel) {
    $buffer = '';
    $stream->on('data', function ($data) use(&$buffer, $channel) {
        $buffer .= $data;
        while (($pos = strpos($buffer, "\n")) !== false) {
            $channel->writeMessage(substr($buffer, 0, $pos));
            $buffer = substr($buffer, $pos + 1);
        }
    });
}, 'printf');
$socket->listen(isset($argv[1]) ? $argv[1] : 0, '0.0.0.0');
echo 'Server now listening on http://localhost:' . $socket->getPort() . ' (port is first parameter)' . PHP_EOL;
echo 'Connecting to plain text chat on port ' . $port . ' (port is second parameter)' . PHP_EOL;
$loop->run();
 public function provideListeners(ListenerAcceptorInterface $acceptor)
 {
     $acceptor->addListener('sse', function ($event, $data) {
         $this->channel->writeMessage(json_encode($data));
     });
 }
Exemplo n.º 4
0
require __DIR__ . '/../../vendor/autoload.php';
use Clue\React\Sse\BufferedChannel;
use React\Http\Request;
use React\Http\Response;
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$channel = new BufferedChannel();
$http = new React\Http\Server($socket);
$http->on('request', function (Request $request, Response $response) use($channel) {
    if ($request->getPath() === '/') {
        $response->writeHead('200', array('Content-Type' => 'text/html'));
        $response->end(file_get_contents(__DIR__ . '/eventsource.html'));
        return;
    }
    echo 'connected' . PHP_EOL;
    $headers = $request->getHeaders();
    $id = isset($headers['Last-Event-ID']) ? $headers['Last-Event-ID'] : null;
    $response->writeHead(200, array('Content-Type' => 'text/event-stream'));
    $channel->connect($response, $id);
    $response->on('close', function () use($response, $channel) {
        echo 'disconnected' . PHP_EOL;
        $channel->disconnect($response);
    });
});
$loop->addPeriodicTimer(2.0, function () use($channel) {
    $channel->writeMessage('ticking ' . mt_rand(1, 5) . '...');
});
$socket->listen(isset($argv[1]) ? $argv[1] : 0, '0.0.0.0');
echo 'Server now listening on http://localhost:' . $socket->getPort() . ' (port is first parameter)' . PHP_EOL;
echo 'This will send a message every 2 seconds' . PHP_EOL;
$loop->run();
Exemplo n.º 5
0
$http = new React\Http\Server($socket);
$http->on('request', function (Request $request, Response $response) use($channel) {
    if ($request->getPath() === '/') {
        $response->writeHead('200', array('Content-Type' => 'text/html'));
        $response->end(file_get_contents(__DIR__ . '/../01-simple-periodic/eventsource.html'));
        return;
    }
    echo 'connected' . PHP_EOL;
    $headers = $request->getHeaders();
    $id = isset($headers['Last-Event-ID']) ? $headers['Last-Event-ID'] : null;
    $response->writeHead(200, array('Content-Type' => 'text/event-stream'));
    $channel->connect($response, $id);
    $response->on('close', function () use($response, $channel) {
        echo 'disconnected' . PHP_EOL;
        $channel->disconnect($response);
    });
});
$red = isset($argv[2]) ? $argv[2] : 'channel';
$factory = new Factory($loop);
$factory->createClient()->then(function (Clue\React\Redis\Client $client) use($channel, $red) {
    $client->on('message', function ($topic, $message) use($channel) {
        $channel->writeMessage($message);
    });
    return $client->subscribe($red);
})->then(null, function ($e) {
    echo 'ERROR: Unable to subscribe to Redis channel: ' . $e;
});
$socket->listen(isset($argv[1]) ? $argv[1] : 0, '0.0.0.0');
echo 'Server now listening on http://localhost:' . $socket->getPort() . ' (port is first parameter)' . PHP_EOL;
echo 'Connecting to Redis PubSub channel "' . $red . '" (channel is second parameter)' . PHP_EOL;
$loop->run();