init
This commit is contained in:
82
vendor/react/stream/src/CompositeStream.php
vendored
Executable file
82
vendor/react/stream/src/CompositeStream.php
vendored
Executable file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
namespace React\Stream;
|
||||
|
||||
use Evenement\EventEmitter;
|
||||
|
||||
final class CompositeStream extends EventEmitter implements DuplexStreamInterface
|
||||
{
|
||||
private $readable;
|
||||
private $writable;
|
||||
private $closed = false;
|
||||
|
||||
public function __construct(ReadableStreamInterface $readable, WritableStreamInterface $writable)
|
||||
{
|
||||
$this->readable = $readable;
|
||||
$this->writable = $writable;
|
||||
|
||||
if (!$readable->isReadable() || !$writable->isWritable()) {
|
||||
return $this->close();
|
||||
}
|
||||
|
||||
Util::forwardEvents($this->readable, $this, array('data', 'end', 'error'));
|
||||
Util::forwardEvents($this->writable, $this, array('drain', 'error', 'pipe'));
|
||||
|
||||
$this->readable->on('close', array($this, 'close'));
|
||||
$this->writable->on('close', array($this, 'close'));
|
||||
}
|
||||
|
||||
public function isReadable()
|
||||
{
|
||||
return $this->readable->isReadable();
|
||||
}
|
||||
|
||||
public function pause()
|
||||
{
|
||||
$this->readable->pause();
|
||||
}
|
||||
|
||||
public function resume()
|
||||
{
|
||||
if (!$this->writable->isWritable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->readable->resume();
|
||||
}
|
||||
|
||||
public function pipe(WritableStreamInterface $dest, array $options = array())
|
||||
{
|
||||
return Util::pipe($this, $dest, $options);
|
||||
}
|
||||
|
||||
public function isWritable()
|
||||
{
|
||||
return $this->writable->isWritable();
|
||||
}
|
||||
|
||||
public function write($data)
|
||||
{
|
||||
return $this->writable->write($data);
|
||||
}
|
||||
|
||||
public function end($data = null)
|
||||
{
|
||||
$this->readable->pause();
|
||||
$this->writable->end($data);
|
||||
}
|
||||
|
||||
public function close()
|
||||
{
|
||||
if ($this->closed) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->closed = true;
|
||||
$this->readable->close();
|
||||
$this->writable->close();
|
||||
|
||||
$this->emit('close');
|
||||
$this->removeAllListeners();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user