Files
EchoChat/backend/go-service/app/meeting/provider.go
bujinyuan 096563d3ea feat(phase2e-2): WebSocket 信令协议 13 事件全量落地(Task 6)
将 meeting.* 事件族从 Task 5 的 PublishToUser 循环升级为完整 WS 信令协议:
抽离统一广播层、扩容 MediaOrchestrator 接口、实现 8 个 C→S 事件业务逻辑
+ Redis 资源追踪 + host 权限校验,端到端 18/18 PASS。

核心产出:
- 新建 MeetingBroadcaster(统一广播层,REST/WS 共用)
- 新建 MeetingSignalService 8 C→S 事件 + cleanupUserResources
- 新建 MeetingWSHandler 薄层 controller
- MediaOrchestrator 扩容 9 方法 + NoopMediaOrchestrator 占位(Task 7 替换)
- C→S 白名单机制防恶意伪造广播事件
- Redis Set 资源追踪防 mediasoup 端资源泄漏

文档同步:
- docs/api/frontend/meeting.md 追加 §WebSocket 信令协议(Task 6)200 行
- docs/progress/CURRENT_STATUS.md + project-context.mdc + 实施计划 Task 6 

Made-with: Cursor
2026-04-21 17:10:32 +08:00

32 lines
1.3 KiB
Go
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.

package meeting
import (
"github.com/echochat/backend/app/meeting/controller"
"github.com/echochat/backend/app/meeting/dao"
"github.com/echochat/backend/app/meeting/service"
"github.com/google/wire"
)
// MeetingSet 会议模块 Wire Provider Set
// 对外暴露:
// - *service.MeetingService —— REST 业务服务Task 5
// - *service.MeetingBroadcaster —— WS 广播中枢Task 6 新增,供 SignalService 复用)
// - *service.MeetingSignalService —— WS 信令事件业务逻辑Task 6
// - *controller.MeetingController —— REST API 控制器
// - *controller.MeetingWSHandler —— WS 事件 HandlerTask 6启动时自动注册到 Hub
// 依赖的接口 NotifyPusher / UserInfoResolver / OnlineChecker 由上游 wire.Bind 绑定具体实现
var MeetingSet = wire.NewSet(
dao.NewMeetingRoomDAO,
dao.NewMeetingParticipantDAO,
dao.NewMeetingChatDAO,
service.NewMeetingBroadcaster,
service.NewMeetingService,
service.NewMeetingSignalService,
controller.NewMeetingController,
controller.NewMeetingWSHandler,
// MediaOrchestrator 目前使用 Noop 实现Task 7 将替换为 node_client.NodeClient
service.NewNoopMediaOrchestrator,
wire.Bind(new(service.MediaOrchestrator), new(*service.NoopMediaOrchestrator)),
)