bindUser($clientId, $userId); if ($group) { Gateway::joinGroup($clientId, $group); } } /** * 构建标准化消息 */ protected function buildMessage(int $userId, string $name, string $text, string $type = 'received'): string { $message = [ 'userId' => $userId, 'name' => $name, 'text' => $text, 'timestamp' => date('Y-m-d\TH:i:sP'), // ISO 8601格式时间 'type' => $type ]; return json_encode($message); } /** * 发送消息给指定用户 */ public function sendToUser(int $toUserId, int $fromUserId, string $fromUserName, string $text): void { $message = $this->buildMessage($fromUserId, $fromUserName, $text); Gateway::sendToUid($toUserId, $message); } /** * 广播消息给所有用户(可排除指定用户) */ public function broadcastMessage(int $fromUserId, string $fromUserName, string $text, ?int $excludeUserId = null): void { $message = $this->buildMessage($fromUserId, $fromUserName, $text); $excludeList = $excludeUserId ? [$excludeUserId] : []; Gateway::sendToAll($message, null, $excludeList); } /** * 发送消息到指定分组 */ public function sendToGroup(string $group, int $fromUserId, string $fromUserName, string $text, ?int $excludeUserId = null): void { $message = $this->buildMessage($fromUserId, $fromUserName, $text); $excludeClientIds = []; if ($excludeUserId) { $excludeClientIds = $this->getClientIdsByUserId($excludeUserId); } Gateway::sendToGroup($group, $message, $excludeClientIds); } /** * 发送系统消息 */ public function sendSystemMessage(string $text, $target = null): void { $message = $this->buildMessage(0, 'System', $text, 'system'); if (is_int($target)) { // 发送给特定用户 Gateway::sendToUid($target, $message); } elseif (is_string($target)) { // 发送到分组 Gateway::sendToGroup($target, $message); } else { // 全局广播 Gateway::sendToAll($message); } } }