Files
chatroom/routes/channels.php

45 lines
1.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
use Illuminate\Support\Facades\Broadcast;
Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
return (int) $user->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);
});