Skip to content

Commit 33325a9

Browse files
committed
Add headers to the client
1 parent dba6a0a commit 33325a9

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

src/Client.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ class Client extends Observable
2626
private $loop;
2727
private $connector;
2828
private $keepAlive;
29+
private $headers;
2930

30-
public function __construct(string $url, bool $useMessageObject = false, array $subProtocols = [], LoopInterface $loop = null, ConnectorInterface $connector = null, int $keepAlive = 60000)
31+
public function __construct(string $url, bool $useMessageObject = false, array $subProtocols = [], LoopInterface $loop = null, ConnectorInterface $connector = null, int $keepAlive = 60000, array $headers = [])
3132
{
3233
$parsedUrl = parse_url($url);
3334
if (!isset($parsedUrl['scheme']) || !in_array($parsedUrl['scheme'], ['wss', 'ws'])) {
@@ -48,6 +49,7 @@ public function __construct(string $url, bool $useMessageObject = false, array $
4849
$this->loop = $loop ?: \EventLoop\getLoop();
4950
$this->connector = $connector;
5051
$this->keepAlive = $keepAlive;
52+
$this->headers = $headers;
5153
}
5254

5355
public function _subscribe(ObserverInterface $clientObserver): DisposableInterface
@@ -72,6 +74,10 @@ public function _subscribe(ObserverInterface $clientObserver): DisposableInterfa
7274
$flatHeaders[$k] = $v[0];
7375
}
7476

77+
foreach ($this->headers as $k => $v) {
78+
$flatHeaders[$k] = $v;
79+
}
80+
7581
$request = $client->request('GET', $this->url, $flatHeaders, '1.1');
7682

7783
$request->on('error', function ($error) use ($clientObserver) {

test/ClientTest.php

+51
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
namespace Rx\Websocket\Test;
44

55
use React\EventLoop\Factory;
6+
use React\Socket\ConnectionInterface;
7+
use React\Socket\ConnectorInterface;
8+
use function React\Promise\resolve;
9+
use function RingCentral\Psr7\parse_request;
610

711
class ClientTest extends \PHPUnit\Framework\TestCase
812
{
@@ -26,4 +30,51 @@ function ($err) use (&$errored) {
2630

2731
$this->assertTrue($errored);
2832
}
33+
34+
public function testPassthroughOfHeaders() {
35+
$writtenData = '';
36+
37+
$connection = $this->getMockBuilder(ConnectionInterface::class)
38+
->getMock();
39+
$connection
40+
->method('write')
41+
->with($this->callback(function($data) use (&$writtenData) { $writtenData .= $data; }))
42+
->willReturn(true);
43+
44+
45+
$connector = $this->getMockBuilder(ConnectorInterface::class)
46+
->getMock();
47+
48+
$connector
49+
->expects($this->once())
50+
->method('connect')
51+
->willReturn(resolve($connection));
52+
53+
$loop = Factory::create();
54+
55+
// expecting connection error
56+
$client = new \Rx\Websocket\Client(
57+
'ws://127.0.0.1:12340/',
58+
false,
59+
[],
60+
$loop,
61+
$connector,
62+
60000,
63+
[
64+
'X-Test-Header' => 'test header value'
65+
]
66+
);
67+
68+
$client->subscribe(
69+
null,
70+
function ($err) use (&$errored) {
71+
$errored = true;
72+
}
73+
);
74+
75+
// This should be the Request
76+
$requestRaw = $writtenData;
77+
$request = parse_request($requestRaw);
78+
$this->assertEquals(['test header value'], $request->getHeader('X-Test-Header'));
79+
}
2980
}

0 commit comments

Comments
 (0)