Skip to content

Commit 0418749

Browse files
committed
All streamed messages are now events
1 parent 5152243 commit 0418749

File tree

8 files changed

+291
-20
lines changed

8 files changed

+291
-20
lines changed

composer.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
"name": "api-clients/pusher",
33
"homepage": "https://php-api-clients.org/clients/pusher",
44
"license": "MIT",
5+
"minimum-stability": "dev",
6+
"prefer-stable": true,
57
"authors": [
68
{
79
"name": "Cees-Jan Kiewiet",
@@ -11,6 +13,7 @@
1113
"require": {
1214
"php": "^7.0",
1315
"api-clients/command-bus": "^2.0",
16+
"api-clients/rx-operators": "dev-master",
1417
"api-clients/service": "dev-master",
1518
"clue/block-react": "^1.1",
1619
"ocramius/package-versions": "^1.1",

composer.lock

Lines changed: 134 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/reddit-async.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?php
22

3+
use ApiClients\Client\Pusher\Event;
34
use React\EventLoop\Factory;
45
use Rx\Observer\CallbackObserver;
56
use ApiClients\Client\Pusher\AsyncClient;
@@ -17,10 +18,10 @@
1718
$subReddits = $argv;
1819
array_shift($subReddits);
1920
foreach ($subReddits as $subReddit) {
20-
$client->channel($subReddit)->subscribe(new CallbackObserver(function ($event) {
21-
echo 'Channel: ', $event->channel, PHP_EOL;
22-
echo 'Event: ', $event->event, PHP_EOL;
23-
echo 'Data: ', $event->data, PHP_EOL;
21+
$client->channel($subReddit)->subscribe(new CallbackObserver(function (Event $event) {
22+
echo 'Channel: ', $event->getChannel(), PHP_EOL;
23+
echo 'Event: ', $event->getEvent(), PHP_EOL;
24+
echo 'Data: ', json_encode($event->getData()), PHP_EOL;
2425
}));
2526
}
2627

examples/reddit-single.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php declare(strict_types=1);
22

33
use ApiClients\Client\Pusher\Client;
4+
use ApiClients\Client\Pusher\Event;
45

56
require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor/autoload.php';
67

@@ -10,8 +11,8 @@
1011
*/
1112
$client = new Client(require 'reddit.key.php');
1213

13-
$client->channel((string) $argv[1], function ($event) {
14-
echo 'Channel: ', $event->channel, PHP_EOL;
15-
echo 'Event: ', $event->event, PHP_EOL;
16-
echo 'Data: ', $event->data, PHP_EOL;
14+
$client->channel((string) $argv[1], function (Event $event) {
15+
echo 'Channel: ', $event->getChannel(), PHP_EOL;
16+
echo 'Event: ', $event->getEvent(), PHP_EOL;
17+
echo 'Data: ', json_encode($event->getData()), PHP_EOL;
1718
});

examples/reddit.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php declare(strict_types=1);
22

33
use ApiClients\Client\Pusher\Client;
4+
use ApiClients\Client\Pusher\Event;
45

56
require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor/autoload.php';
67

@@ -12,8 +13,8 @@
1213

1314
$subReddits = $argv;
1415
array_shift($subReddits);
15-
$client->channels($subReddits, function ($event) {
16-
echo 'Channel: ', $event->channel, PHP_EOL;
17-
echo 'Event: ', $event->event, PHP_EOL;
18-
echo 'Data: ', $event->data, PHP_EOL;
16+
$client->channels($subReddits, function (Event $event) {
17+
echo 'Channel: ', $event->getChannel(), PHP_EOL;
18+
echo 'Event: ', $event->getEvent(), PHP_EOL;
19+
echo 'Data: ', json_encode($event->getData()), PHP_EOL;
1920
});

src/AsyncClient.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ public function __construct(LoopInterface $loop, string $app)
4646
->flatMap(function (MessageSubject $ms) {
4747
return $ms;
4848
})
49-
->map('json_decode');
49+
->_ApiClients_jsonDecode()
50+
->map(function (array $message) {
51+
return Event::createFromMessage($message);
52+
});
5053
}
5154

5255
/**
@@ -61,8 +64,8 @@ public function channel(string $channel): Observable
6164
return $this->channels[$channel];
6265
}
6366

64-
$channelMessages = $this->messages->filter(function ($event) use ($channel) {
65-
return isset($event->channel) && $event->channel == $channel;
67+
$channelMessages = $this->messages->filter(function (Event $event) use ($channel) {
68+
return $event->getChannel() !== '' && $event->getChannel() === $channel;
6669
});
6770

6871
$events = Observable::create(function (
@@ -73,8 +76,8 @@ public function channel(string $channel): Observable
7376
$channelMessages
7477
) {
7578
$subscription = $channelMessages
76-
->filter(function ($msg) {
77-
return $msg->event !== 'pusher_internal:subscription_succeeded';
79+
->filter(function (Event $event) {
80+
return $event->getEvent() !== 'pusher_internal:subscription_succeeded';
7881
})
7982
->subscribe($observer, $scheduler);
8083

src/Event.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace ApiClients\Client\Pusher;
4+
5+
final class Event
6+
{
7+
/**
8+
* @var string
9+
*/
10+
private $event;
11+
12+
/**
13+
* @var string
14+
*/
15+
private $channel;
16+
17+
/**
18+
* @var array
19+
*/
20+
private $data;
21+
22+
public static function createFromMessage(array $message): self
23+
{
24+
return new self(
25+
$message['event'],
26+
json_decode($message['data'], true),
27+
isset($message['channel']) ? $message['channel'] : ''
28+
);
29+
}
30+
31+
/**
32+
* @param string $event
33+
* @param array $data
34+
* @param string $channel
35+
*/
36+
public function __construct(string $event, array $data, string $channel = '')
37+
{
38+
$this->event = $event;
39+
$this->data = $data;
40+
$this->channel = $channel;
41+
}
42+
43+
/**
44+
* @return string
45+
*/
46+
public function getEvent()
47+
{
48+
return $this->event;
49+
}
50+
51+
/**
52+
* @return string
53+
*/
54+
public function getChannel()
55+
{
56+
return $this->channel;
57+
}
58+
59+
/**
60+
* @return array
61+
*/
62+
public function getData()
63+
{
64+
return $this->data;
65+
}
66+
}

0 commit comments

Comments
 (0)