* This file is part of the ManageWP Worker plugin.
* (c) ManageWP LLC <contact@managewp.com>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
class MWP_Stream_Callable implements MWP_Stream_Interface
/** @var MWP_Stream_Buffer */
* @param callable $source Source of the stream data. The callable MAY
* accept an integer argument used to control the
* amount of data to return. The callable MUST
* return a string when called, or false on error
* @param array $arguments
public function __construct($source, array $arguments = array())
$this->buffer = new MWP_Stream_Buffer();
$this->arguments = $arguments;
$this->arguments = array();
if ($this->source !== null) {
if ($this->source === null && $this->buffer !== null) {
return $this->buffer->eof();
public function isSeekable()
public function seek($offset, $whence = SEEK_SET)
public function read($length)
$data = $this->buffer->read($length);
$readLen = strlen($data);
$this->tellPos += $readLen;
$remaining = $length - $readLen;
$data .= $this->buffer->read($remaining);
$this->tellPos += strlen($data) - $readLen;
public function __toString()
$buffer .= $this->read(1048576);
private function pump($length)
$data = call_user_func_array($this->source, array_merge(array($length), $this->arguments));
if ($data === false || $data === null) {
if ($data instanceof MWP_Stream_Interface) {
$this->buffer->write($data);
$length -= strlen($data);