Files
nnterp-react-admin/app/Events/UserOnline.php
2026-03-13 20:49:46 +08:00

56 lines
1.7 KiB
PHP

<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Config;
class UserOnline implements ShouldBroadcastNow
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $userId;
public function __construct($userId)
{
$this->userId = $userId;
// Set dynamic Pusher config
$this->configurePusher();
}
private function configurePusher()
{
$pusherKey = admin_setting('pusher_app_key');
$pusherSecret = admin_setting('pusher_app_secret');
$pusherAppId = admin_setting('pusher_app_id');
$pusherCluster = admin_setting('pusher_app_cluster');
if ($pusherKey && $pusherSecret && $pusherAppId) {
Config::set('broadcasting.default', 'pusher');
Config::set('broadcasting.connections.pusher.key', $pusherKey);
Config::set('broadcasting.connections.pusher.secret', $pusherSecret);
Config::set('broadcasting.connections.pusher.app_id', $pusherAppId);
Config::set('broadcasting.connections.pusher.options.cluster', $pusherCluster);
}
}
public function broadcastOn()
{
// Broadcast to all users' messenger channels
$channels = [];
$users = \App\Models\User::all();
foreach ($users as $user) {
$channels[] = new Channel("messenger.{$user->id}");
}
return $channels;
}
public function broadcastAs()
{
return 'UserOnline';
}
}