Subversion Repositories cheapmusic

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
103 - 1
<?php
2
namespace GuzzleHttp\Psr7;
3
 
4
use Psr\Http\Message\StreamInterface;
5
 
6
/**
7
 * Stream decorator that begins dropping data once the size of the underlying
8
 * stream becomes too full.
9
 */
10
class DroppingStream implements StreamInterface
11
{
12
    use StreamDecoratorTrait;
13
 
14
    private $maxLength;
15
 
16
    /**
17
     * @param StreamInterface $stream    Underlying stream to decorate.
18
     * @param int             $maxLength Maximum size before dropping data.
19
     */
20
    public function __construct(StreamInterface $stream, $maxLength)
21
    {
22
        $this->stream = $stream;
23
        $this->maxLength = $maxLength;
24
    }
25
 
26
    public function write($string)
27
    {
28
        $diff = $this->maxLength - $this->stream->getSize();
29
 
30
        // Begin returning 0 when the underlying stream is too large.
31
        if ($diff <= 0) {
32
            return 0;
33
        }
34
 
35
        // Write the stream or a subset of the stream if needed.
36
        if (strlen($string) < $diff) {
37
            return $this->stream->write($string);
38
        }
39
 
40
        return $this->stream->write(substr($string, 0, $diff));
41
    }
42
}