protected function handleSse(Request $request, Response $response)
 {
     $headers = $request->getHeaders();
     $id = isset($headers['Last-Event-ID']) ? $headers['Last-Event-ID'] : null;
     $response->writeHead(200, array('Content-Type' => 'text/event-stream'));
     $this->channel->connect($response, $id);
     $response->on('close', function () use($response) {
         $this->channel->disconnect($response);
     });
 }
Exemplo n.º 2
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.º 3
0
use React\Stream\Stream;
$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__ . '/../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);
        }