将 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
32 lines
1.3 KiB
Go
32 lines
1.3 KiB
Go
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 事件 Handler(Task 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)),
|
||
)
|