forked from reactphp/reactphp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathResponse.php
More file actions
126 lines (100 loc) · 2.53 KB
/
Copy pathResponse.php
File metadata and controls
126 lines (100 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
namespace React\HttpClient;
use Evenement\EventEmitter;
use React\EventLoop\LoopInterface;
use React\Stream\ReadableStreamInterface;
use React\Stream\Stream;
use React\Stream\Util;
use React\Stream\WritableStreamInterface;
class Response extends EventEmitter implements ReadableStreamInterface
{
private $stream;
private $protocol;
private $version;
private $code;
private $reasonPhrase;
private $headers;
private $readable = true;
public function __construct(Stream $stream, $protocol, $version, $code, $reasonPhrase, $headers)
{
$this->stream = $stream;
$this->protocol = $protocol;
$this->version = $version;
$this->code = $code;
$this->reasonPhrase = $reasonPhrase;
$this->headers = $headers;
$stream->on('data', array($this, 'handleData'));
$stream->on('error', array($this, 'handleError'));
$stream->on('end', array($this, 'handleEnd'));
}
public function getProtocol()
{
return $this->protocol;
}
public function getVersion()
{
return $this->version;
}
public function getCode()
{
return $this->code;
}
public function getReasonPhrase()
{
return $this->reasonPhrase;
}
public function getHeaders()
{
return $this->headers;
}
public function handleData($data)
{
$this->emit('data', array($data, $this));
}
public function handleEnd()
{
$this->close();
}
public function handleError(\Exception $error)
{
$this->emit('error', array(new \RuntimeException(
"An error occurred in the underlying stream",
0,
$error
), $this));
$this->close($error);
}
public function close(\Exception $error = null)
{
if (!$this->readable) {
return;
}
$this->readable = false;
$this->emit('end', array($error, $this));
$this->removeAllListeners();
$this->stream->end();
}
public function isReadable()
{
return $this->readable;
}
public function pause()
{
if (!$this->readable) {
return;
}
$this->stream->pause();
}
public function resume()
{
if (!$this->readable) {
return;
}
$this->stream->resume();
}
public function pipe(WritableStreamInterface $dest, array $options = array())
{
Util::pipe($this, $dest, $options);
return $dest;
}
}