Skip to content

Commit 3342378

Browse files
committed
decouple message handling
1 parent 97a657a commit 3342378

File tree

5 files changed

+45
-7
lines changed

5 files changed

+45
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Laravel\Reverb\Protocols\Pusher;
4+
5+
use Laravel\Reverb\Servers\Reverb\Contracts\PubSubIncomingMessageHandler;
6+
7+
class PusherPubSubIncomingMessageHandler implements PubSubIncomingMessageHandler
8+
{
9+
/**
10+
* Handle an incoming message from the PubSub provider.
11+
*/
12+
public function handle(string $payload): void
13+
{
14+
$event = json_decode($payload, true);
15+
16+
EventDispatcher::dispatchSynchronously(
17+
unserialize($event['application']),
18+
$event['payload']
19+
);
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Laravel\Reverb\Servers\Reverb\Contracts;
4+
5+
interface PubSubIncomingMessageHandler
6+
{
7+
/**
8+
* Handle an incoming message from the PubSub provider.
9+
*/
10+
public function handle(string $payload): void;
11+
}

src/Servers/Reverb/Factory.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@
77
use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
88
use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
99
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\ChannelController;
10-
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\ChannelsController;
1110
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\ChannelUsersController;
11+
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\ChannelsController;
1212
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\ConnectionsController;
1313
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\EventsBatchController;
1414
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\EventsController;
1515
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\PusherController;
1616
use Laravel\Reverb\Protocols\Pusher\Http\Controllers\UsersTerminateController;
1717
use Laravel\Reverb\Protocols\Pusher\Managers\ArrayChannelConnectionManager;
1818
use Laravel\Reverb\Protocols\Pusher\Managers\ArrayChannelManager;
19+
use Laravel\Reverb\Protocols\Pusher\PusherPubSubIncomingMessageHandler;
1920
use Laravel\Reverb\Protocols\Pusher\Server as PusherServer;
21+
use Laravel\Reverb\Servers\Reverb\Contracts\PubSubIncomingMessageHandler;
2022
use Laravel\Reverb\Servers\Reverb\Http\Route;
2123
use Laravel\Reverb\Servers\Reverb\Http\Router;
2224
use Laravel\Reverb\Servers\Reverb\Http\Server as HttpServer;
@@ -63,6 +65,11 @@ public static function makePusherServer(): Router
6365
fn () => new ArrayChannelConnectionManager
6466
);
6567

68+
app()->singleton(
69+
PubSubIncomingMessageHandler::class,
70+
fn () => new PusherPubSubIncomingMessageHandler,
71+
);
72+
6673
return new Router(new UrlMatcher(static::pusherRoutes(), new RequestContext));
6774
}
6875

src/Servers/Reverb/Publishing/RedisPubSubProvider.php

+3-6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Illuminate\Support\Facades\Config;
66
use Laravel\Reverb\Protocols\Pusher\EventDispatcher;
7+
use Laravel\Reverb\Servers\Reverb\Contracts\PubSubIncomingMessageHandler;
78
use Laravel\Reverb\Servers\Reverb\Contracts\PubSubProvider;
89
use React\EventLoop\LoopInterface;
910
use RuntimeException;
@@ -15,6 +16,7 @@ class RedisPubSubProvider implements PubSubProvider
1516
protected $subscribingClient;
1617

1718
public function __construct(protected RedisClientFactory $clientFactory,
19+
protected PubSubIncomingMessageHandler $messageHandler,
1820
protected string $channel)
1921
{
2022
}
@@ -38,12 +40,7 @@ public function subscribe(): void
3840
$this->subscribingClient->subscribe($this->channel);
3941

4042
$this->subscribingClient->on('message', function (string $channel, string $payload) {
41-
$event = json_decode($payload, true);
42-
43-
EventDispatcher::dispatchSynchronously(
44-
unserialize($event['application']),
45-
$event['payload']
46-
);
43+
$this->messageHandler->handle($payload);
4744
});
4845
}
4946

src/Servers/Reverb/ReverbServerProvider.php

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Laravel\Reverb\Contracts\ServerProvider;
88
use Laravel\Reverb\Servers\Reverb\Console\Commands\RestartServer;
99
use Laravel\Reverb\Servers\Reverb\Console\Commands\StartServer;
10+
use Laravel\Reverb\Servers\Reverb\Contracts\PubSubIncomingMessageHandler;
1011
use Laravel\Reverb\Servers\Reverb\Contracts\PubSubProvider;
1112
use Laravel\Reverb\Servers\Reverb\Publishing\RedisClientFactory;
1213
use Laravel\Reverb\Servers\Reverb\Publishing\RedisPubSubProvider;
@@ -35,6 +36,7 @@ public function register(): void
3536
{
3637
$this->app->singleton(PubSubProvider::class, fn ($app) => new RedisPubSubProvider(
3738
$app->make(RedisClientFactory::class),
39+
$app->make(PubSubIncomingMessageHandler::class),
3840
$this->config['scaling']['channel'] ?? 'reverb'
3941
));
4042
}

0 commit comments

Comments
 (0)