id === (int) $id; }); // 聊天室房间 Presence Channel 鉴权与成员信息抓取 Broadcast::channel('room.{roomId}', function ($user, $roomId) { // 这里未来可以增加判断:比如该房间是否被锁定,或者该用户是否在此房间的黑名单中 // 凡是通过了这个判断的人(返回一个数组),他就会成功建立 WebSocket, // 且他的这个数组信息会被 Reverb 推送给这个房间内的所有其他人 (joining / here 事件)。 $superLevel = (int) \App\Models\Sysparam::getValue('superlevel', '100'); return [ 'id' => $user->id, 'username' => $user->username, 'user_level' => $user->user_level, 'sex' => $user->sex, 'headface' => $user->headface, // 通过 accessor 读取 usersf,默认 1.gif 'vip_icon' => $user->vipIcon(), 'vip_name' => $user->vipName(), 'vip_color' => $user->isVip() ? ($user->vipLevel?->color ?? '') : '', 'is_admin' => $user->user_level >= $superLevel, ]; }); // 用户私有频道鉴权(好友通知:FriendAdded / FriendRemoved / BannerNotification) // 使用数字 ID 命名频道,避免中文用户名导致 Pusher 频道名验证失败。 Broadcast::channel('user.{id}', function ($user, $id) { return (int) $user->id === (int) $id; }); // 五子棋对局私有频道(仅对局双方可订阅,用于实时同步落子) Broadcast::channel('gomoku.{gameId}', function ($user, $gameId) { $game = \App\Models\GomokuGame::find($gameId); if (! $game) { return false; } return $game->belongsToUser($user->id); });