@tencent-rtc/mcp 1.6.6 → 1.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/knowledge/build-index.js +3 -0
- package/knowledge/content-loader.js +3 -1
- package/knowledge/search/filter-pool.js +12 -4
- package/knowledge/search/query-normalizer.js +76 -0
- package/knowledge/search/search-knowledge.js +104 -5
- package/package.json +1 -1
- package/resource/_schema/feature-aliases.yaml +1 -0
- package/resource/_schema/query-normalization.yaml +9 -0
- package/resource/index/manifest.json +1 -1
- package/resource/integration/callkit/preset/android/integration.md +3 -14
- package/resource/integration/callkit/preset/flutter/integration.md +1 -12
- package/resource/integration/callkit/preset/ios/integration.md +2 -12
- package/resource/integration/callkit/preset/react/integration.md +1 -14
- package/resource/integration/callkit/preset/vue/integration.md +1 -14
- package/resource/integration/chat/preset/android/integration.md +6 -13
- package/resource/integration/chat/preset/flutter/integration.md +1 -8
- package/resource/integration/chat/preset/ios/integration.md +4 -12
- package/resource/integration/chat/preset/react/integration.md +6 -16
- package/resource/integration/chat/preset/vue/integration.md +0 -9
- package/resource/integration/livekit/preset/live/android/live-audience-integration.md +2 -6
- package/resource/integration/livekit/preset/live/android/live-host-integration.md +1 -11
- package/resource/integration/livekit/preset/live/android/live-list-integration.md +2 -6
- package/resource/integration/livekit/preset/live/android/prepare-integration.md +2 -7
- package/resource/integration/livekit/preset/live/ios/live-audience-integration.md +2 -7
- package/resource/integration/livekit/preset/live/ios/live-host-integration.md +1 -13
- package/resource/integration/livekit/preset/live/ios/live-list-integration.md +2 -10
- package/resource/integration/livekit/preset/live/ios/prepare-integration.md +3 -8
- package/resource/integration/livekit/preset/live/vue/live-list-integration.md +0 -4
- package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +1 -5
- package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +2 -7
- package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +2 -8
- package/resource/integration/roomkit/preset/vue/integration.md +0 -11
- package/resource/knowledge/callkit/core-sdk/android/answer-call.md +0 -7
- package/resource/knowledge/callkit/core-sdk/android/make-call.md +0 -8
- package/resource/knowledge/callkit/core-sdk/android/offline-push.md +1 -9
- package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +2 -8
- package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +2 -8
- package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +1 -16
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +0 -8
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +0 -8
- package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +0 -11
- package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +178 -200
- package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +195 -217
- package/resource/knowledge/callkit/faq/android.md +4 -14
- package/resource/knowledge/callkit/faq/common.md +0 -2
- package/resource/knowledge/callkit/faq/error-code.md +2 -4
- package/resource/knowledge/callkit/faq/ios.md +1 -4
- package/resource/knowledge/callkit/preset/android/api.md +0 -6
- package/resource/knowledge/callkit/preset/ios/api.md +0 -4
- package/resource/knowledge/callkit/preset/react/api.md +3 -4
- package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +3 -4
- package/resource/knowledge/callkit/preset/vue/api.md +3 -4
- package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +3 -4
- package/resource/knowledge/chat/preset/android/features/chat-setting.md +0 -5
- package/resource/knowledge/chat/preset/android/features/contact-list.md +0 -7
- package/resource/knowledge/chat/preset/android/features/conversation-list.md +0 -6
- package/resource/knowledge/chat/preset/android/features/language.md +0 -8
- package/resource/knowledge/chat/preset/android/features/message-input.md +0 -6
- package/resource/knowledge/chat/preset/android/features/message-list.md +0 -8
- package/resource/knowledge/chat/preset/android/features/search.md +0 -7
- package/resource/knowledge/chat/preset/android/features/theme.md +0 -4
- package/resource/knowledge/chat/preset/android-view/integration.md +0 -6
- package/resource/knowledge/chat/preset/flutter/features/chat-setting.md +0 -4
- package/resource/knowledge/chat/preset/flutter/features/contact-list.md +0 -9
- package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +0 -7
- package/resource/knowledge/chat/preset/flutter/features/language.md +0 -5
- package/resource/knowledge/chat/preset/flutter/features/message-input.md +0 -6
- package/resource/knowledge/chat/preset/flutter/features/message-list.md +0 -8
- package/resource/knowledge/chat/preset/flutter/features/search.md +0 -5
- package/resource/knowledge/chat/preset/flutter/features/theme.md +0 -4
- package/resource/knowledge/chat/preset/ios/features/chat-setting.md +0 -5
- package/resource/knowledge/chat/preset/ios/features/contact-list.md +0 -5
- package/resource/knowledge/chat/preset/ios/features/conversation-list.md +0 -7
- package/resource/knowledge/chat/preset/ios/features/language.md +1 -8
- package/resource/knowledge/chat/preset/ios/features/message-input.md +0 -6
- package/resource/knowledge/chat/preset/ios/features/message-list.md +0 -8
- package/resource/knowledge/chat/preset/ios/features/search.md +0 -5
- package/resource/knowledge/chat/preset/ios/features/theme.md +0 -4
- package/resource/knowledge/chat/preset/ios-uikit/integration.md +0 -6
- package/resource/knowledge/chat/preset/react/features/contact-list.md +0 -23
- package/resource/knowledge/chat/preset/react/features/conversation-actions.md +2 -11
- package/resource/knowledge/chat/preset/react/features/conversation-list.md +4 -26
- package/resource/knowledge/chat/preset/react/features/conversation-preview.md +0 -6
- package/resource/knowledge/chat/preset/react/features/search.md +0 -1
- package/resource/knowledge/chat/preset/react/features/theme.md +0 -1
- package/resource/knowledge/chat/preset/vue/features/contact-list.md +3 -9
- package/resource/knowledge/chat/preset/vue/features/conversation-actions.md +0 -3
- package/resource/knowledge/chat/preset/vue/features/conversation-list.md +2 -13
- package/resource/knowledge/chat/preset/vue/features/conversation-preview.md +2 -3
- package/resource/knowledge/chat/preset/vue/features/conversation-search.md +1 -0
- package/resource/knowledge/chat/preset/vue/features/search.md +4 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/android/AudioEffectStore.md +0 -7
- package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CameraView.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +0 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LikeStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/AudioEffectStore.md +0 -7
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BaseBeautyStore.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +0 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LikeStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveCoreView.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +1 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/AudioEffectStore.md +0 -7
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +0 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +0 -3
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LikeStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +0 -2
- package/resource/knowledge/livekit/core-sdk/features/android/audience-list.md +2 -2
- package/resource/knowledge/livekit/core-sdk/features/android/audio-effect.md +2 -3
- package/resource/knowledge/livekit/core-sdk/features/android/barrage.md +2 -2
- package/resource/knowledge/livekit/core-sdk/features/android/base-beauty.md +2 -2
- package/resource/knowledge/livekit/core-sdk/features/android/gift.md +2 -7
- package/resource/knowledge/livekit/core-sdk/features/android/live-list.md +3 -4
- package/resource/knowledge/livekit/core-sdk/features/flutter/audience-list.md +2 -2
- package/resource/knowledge/livekit/core-sdk/features/flutter/audio-effect.md +2 -4
- package/resource/knowledge/livekit/core-sdk/features/flutter/barrage.md +2 -2
- package/resource/knowledge/livekit/core-sdk/features/flutter/base-beauty.md +0 -2
- package/resource/knowledge/livekit/core-sdk/features/flutter/gift.md +2 -7
- package/resource/knowledge/livekit/core-sdk/features/flutter/live-list.md +3 -2
- package/resource/knowledge/livekit/core-sdk/features/ios/audience-list.md +2 -2
- package/resource/knowledge/livekit/core-sdk/features/ios/audio-effect.md +2 -4
- package/resource/knowledge/livekit/core-sdk/features/ios/barrage.md +2 -2
- package/resource/knowledge/livekit/core-sdk/features/ios/base-beauty.md +2 -2
- package/resource/knowledge/livekit/core-sdk/features/ios/gift.md +2 -7
- package/resource/knowledge/livekit/core-sdk/features/ios/live-list.md +3 -4
- package/resource/knowledge/livekit/core-sdk/live/android/co-guest-interaction.md +0 -3
- package/resource/knowledge/livekit/core-sdk/live/android/host-interaction.md +0 -4
- package/resource/knowledge/livekit/core-sdk/live/android/integration.md +1 -4
- package/resource/knowledge/livekit/core-sdk/live/flutter/co-guest-interaction.md +1 -3
- package/resource/knowledge/livekit/core-sdk/live/flutter/host-interaction.md +0 -1
- package/resource/knowledge/livekit/core-sdk/live/flutter/integration.md +1 -4
- package/resource/knowledge/livekit/core-sdk/live/ios/co-guest-interaction.md +0 -3
- package/resource/knowledge/livekit/core-sdk/live/ios/host-interaction.md +0 -3
- package/resource/knowledge/livekit/core-sdk/live/ios/integration.md +1 -4
- package/resource/knowledge/livekit/core-sdk/voice/android/co-guest-interaction.md +0 -2
- package/resource/knowledge/livekit/core-sdk/voice/android/host-interaction.md +0 -5
- package/resource/knowledge/livekit/core-sdk/voice/android/integration.md +1 -4
- package/resource/knowledge/livekit/core-sdk/voice/flutter/co-guest-interaction.md +1 -4
- package/resource/knowledge/livekit/core-sdk/voice/flutter/integration.md +3 -6
- package/resource/knowledge/livekit/core-sdk/voice/ios/co-guest-interaction.md +0 -2
- package/resource/knowledge/livekit/core-sdk/voice/ios/host-interaction.md +0 -4
- package/resource/knowledge/livekit/core-sdk/voice/ios/integration.md +1 -4
- package/resource/knowledge/livekit/faq/error-code.md +0 -1
- package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +2 -3
- package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +3 -3
- package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +3 -3
- package/resource/knowledge/push/api-reference/android.md +0 -1
- package/resource/knowledge/push/api-reference/harmonyos.md +0 -2
- package/resource/knowledge/push/api-reference/react-native.md +3 -5
- package/resource/knowledge/push/api-reference/uni-app.md +3 -5
- package/resource/knowledge/push/api-reference/unity.md +0 -1
- package/resource/knowledge/push/api-reference/unreal-engine.md +0 -1
- package/resource/knowledge/push/config/android.md +0 -24
- package/resource/knowledge/push/config/harmonyos.md +0 -1
- package/resource/knowledge/push/config/ios.md +0 -3
- package/resource/knowledge/push/config/react-native.md +0 -29
- package/resource/knowledge/push/config/unity.md +1 -24
- package/resource/knowledge/push/config/unreal-engine.md +1 -24
- package/resource/knowledge/push/integration/android.md +0 -14
- package/resource/knowledge/push/integration/flutter.md +0 -19
- package/resource/knowledge/push/integration/harmonyos.md +0 -2
- package/resource/knowledge/push/integration/ios.md +0 -3
- package/resource/knowledge/push/integration/react-native.md +0 -24
- package/resource/knowledge/push/integration/uni-app.md +1 -11
- package/resource/knowledge/push/integration/unity.md +0 -9
- package/resource/knowledge/push/integration/unreal-engine.md +1 -17
- package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +0 -4
- package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +0 -4
- package/resource/knowledge/roomkit/core-sdk/android/room-state.md +0 -4
- package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +1 -5
- package/resource/knowledge/roomkit/core-sdk/ios/call-user-to-room.md +0 -4
- package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +0 -4
- package/resource/knowledge/roomkit/core-sdk/ios/room-state.md +0 -4
- package/resource/knowledge/roomkit/core-sdk/ios/schedule-room.md +1 -5
- package/resource/knowledge/roomkit/core-sdk/vue/call-user-to-room.md +1 -1
- package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +0 -6
- package/resource/knowledge/roomkit/core-sdk/vue/free-beauty-panel.md +0 -9
- package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +0 -11
- package/resource/knowledge/roomkit/core-sdk/vue/room-participant-state.md +1 -5
- package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +1 -8
- package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +0 -3
- package/resource/knowledge/roomkit/core-sdk/vue/screen-share.md +0 -3
- package/resource/knowledge/roomkit/core-sdk/vue/virtual-background.md +0 -5
- package/resource/knowledge/roomkit/preset/android/integration.md +0 -4
- package/resource/knowledge/roomkit/preset/flutter/integration.md +1 -13
- package/resource/knowledge/roomkit/preset/ios/integration.md +0 -6
- package/resource/knowledge/roomkit/preset/react/integration.md +0 -16
- package/resource/knowledge/rtcengine/web/api.md +1 -8
- package/resource/knowledge/rtcengine/web/faq.md +3 -5
- package/resource/knowledge/rtcengine/web/how_to_integrated_web_sdk.md +0 -6
- package/resource/knowledge/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +1 -1
- package/resource/knowledge/rtcengine/web/plugin/21-advanced-auto-play-policy.md +1 -1
- package/resource/knowledge/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +1 -1
- package/resource/knowledge/rtcengine/web/plugin/27-advanced-small-stream.md +1 -1
- package/resource/knowledge/rtcengine/web/plugin/31-advanced-plugins-overview.md +1 -3
- package/resource/knowledge/rtcengine/web/plugin/34-advanced-proxy.md +2 -4
- package/resource/knowledge/rtcengine/web/plugin/36-advanced-virtual-background.md +0 -4
- package/resource/knowledge/rtcengine/web/plugin/39-advanced-video-decoder.md +0 -2
- package/resource/knowledge/trtc/android/TRTCCloud.md +8 -56
- package/resource/knowledge/trtc/android/TRTCCloudDef.md +6 -7
- package/resource/knowledge/trtc/android/TRTCCloudListener.md +1 -18
- package/resource/knowledge/trtc/android/TXAudioEffectManager.md +0 -14
- package/resource/knowledge/trtc/android/TXDeviceManager.md +0 -1
- package/resource/knowledge/trtc/android/TXLiteAVCode.md +1 -1
- package/resource/knowledge/trtc/c++/ITRTCCloud.md +7 -59
- package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +0 -14
- package/resource/knowledge/trtc/c++/ITXDeviceManager.md +0 -4
- package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +1 -19
- package/resource/knowledge/trtc/c++/TRTCTypeDef.md +6 -7
- package/resource/knowledge/trtc/c++/TXLiteAVCode.md +1 -1
- package/resource/knowledge/trtc/ios/TRTCCloud.md +9 -60
- package/resource/knowledge/trtc/ios/TRTCCloudDef.md +6 -7
- package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +1 -19
- package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +0 -13
- package/resource/knowledge/trtc/ios/TXDeviceManager.md +0 -4
- package/resource/knowledge/trtc/ios/TXLiteAVCode.md +1 -1
- package/server.js +1 -1
- package/tools/common/search_trtc_knowledge.js +2 -0
- package/tools/definitions/search_trtc_knowledge_def.js +1 -0
- package/utils/report-cls-client.js +3 -3
- package/utils/report-es-client.js +1 -1
- package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +0 -230
- package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +0 -797
- package/resource/knowledge/roomkit/core-sdk/flutter/room-state.md +0 -325
- package/resource/knowledge/roomkit/core-sdk/flutter/schedule-room.md +0 -325
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
`RoomStore` 专职负责 `AtomicXCore` 中的房间事务管理,提供从房间创建到解散的完整流程控制接口。通过 `RoomStore` 提供的接口(例如获取及更新房间信息),可高效开发出一套成熟的房间管理体系。
|
|
2
|
-
|
|
3
|
-
## 核心功能
|
|
4
|
-
- **创建并加入房间**:房主通过调用该接口可以直接创建并进入房间。
|
|
5
|
-
|
|
6
|
-
- **加入房间**:参与者通过调用该接口可以直接进入已存在的房间。
|
|
7
|
-
|
|
8
|
-
- **离开房间**:参与者通过调用该接口可以退出已进入的房间。
|
|
9
|
-
|
|
10
|
-
- **结束房间**:房主通过调用该接口可以结束当前房间,如果房间内还有其他参与者,此时参与者会收到`onRoomEnded`事件。
|
|
11
|
-
|
|
12
|
-
- **更新房间信息**:房主或管理员通过调用该接口可以更新房间信息,目前支持更新房间名称,房间密码。
|
|
13
|
-
|
|
14
|
-
- **获取房间信息**:通过调用该接口可以获取房间的详细信息。
|
|
15
|
-
|
|
16
|
-
## 核心概念
|
|
17
|
-
|
|
18
|
-
在开始集成之前,需要通过下表了解一下`RoomStore`相关的几个核心概念:
|
|
19
|
-
| <strong>核心概念</strong> | <strong>核心职责与描述</strong> |
|
|
20
|
-
| --- | --- |
|
|
21
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomInfo-class.html">RoomInfo</a> | 代表房间信息的核心数据模型,封装了房间的完整信息和状态管理能力。<br>核心功能包括:<br>- 房间基本信息管理(房间 ID、名称、创建者)。<br>- 实时状态跟踪(参与者数量、房间状态、创建时间)。<br>- 房间调度功能(预约时间、参会者列表、提醒设置)。<br>- 全面的权限控制(密码保护、设备管控、消息管理)。 |
|
|
22
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomState-class.html">RoomState</a> | 代表房间状态管理的核心数据结构,负责维护用户的房间相关状态信息。<br>核心属性:<br>- <code>scheduledRoomList</code> 存储了当前账号下所有预约的房间列表信息。<br>- <code>scheduledRoomListCursor</code> 则代表预约房间列表的分页快照。<br>- <code>currentRoom</code> 则代表当前所在房间的状态信息。 |
|
|
23
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomListener-class.html">RoomListener</a> | 代表房间动态的实时事件。主要事件分为两大类:预约房间事件和房间结束事件。 |
|
|
24
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomStore-class.html">RoomStore</a> | 这是与房间全生命周期相关的核心类。功能包含:获取预约房间列表快照、执行房间管理操作,并通过 <code>addRoomListener</code> 方法来接收实时动态事件。 |
|
|
25
|
-
|
|
26
|
-
## 实现步骤
|
|
27
|
-
|
|
28
|
-
### 步骤1:组件集成
|
|
29
|
-
|
|
30
|
-
请参考 接入概览 集成 **AtomicXCore SDK**,并已完成 实现登录逻辑 部分接入。
|
|
31
|
-
|
|
32
|
-
### 步骤2:**创建并加入房间**
|
|
33
|
-
|
|
34
|
-
##### 实现方式:
|
|
35
|
-
1. **配置房间初始化参数:**初始化`CreateRoomOptions`创建房间配置项设置房间名称,房间密码。
|
|
36
|
-
|
|
37
|
-
2. **房间权限预设:**设置房间内全场成员权限,例如全体静音,全体禁画等。
|
|
38
|
-
|
|
39
|
-
3. **创建并加入房间:**调用`RoomStore`的`createAndJoinRoom`接口执行核心操作。
|
|
40
|
-
|
|
41
|
-
##### 示例代码:
|
|
42
|
-
``` java
|
|
43
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
44
|
-
|
|
45
|
-
void createAndJoinRoom() async {
|
|
46
|
-
// 1. 配置房间初始化参数
|
|
47
|
-
// CreateRoomOptions 用于定义房间的基础属性及初始权限控制
|
|
48
|
-
final options = CreateRoomOptions(
|
|
49
|
-
roomName: '我的讨论会', // 设置房间对外展示的名称
|
|
50
|
-
password: '', // 设置房间进入密码(若无需密码则留空)
|
|
51
|
-
// 2. 房间权限预设
|
|
52
|
-
isAllCameraDisabled: false, // 全员开启/禁用摄像头的初始状态
|
|
53
|
-
isAllMessageDisabled: false, // 全员开启/禁言的初始状态
|
|
54
|
-
isAllMicrophoneDisabled: false, // 全员开启/静音的初始状态
|
|
55
|
-
isAllScreenShareDisabled: false, // 全员禁止/允许屏幕分享的初始状态
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
// 3. 创建并加入房间
|
|
59
|
-
// 该方法会自动处理房间创建(如果不存在)和加入逻辑
|
|
60
|
-
final result = await RoomStore.shared.createAndJoinRoom(
|
|
61
|
-
roomID: widget.roomID,
|
|
62
|
-
roomType: RoomType.standard,
|
|
63
|
-
options: options,
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
if (result.isSuccess) {
|
|
67
|
-
debugPrint('创建并加入房间成功');
|
|
68
|
-
} else {
|
|
69
|
-
debugPrint('创建并加入房间失败 [错误码: ${result.errorCode}]: ${result.errorMessage}');
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
##### createAndJoinRoom 接口参数详细说明
|
|
75
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
76
|
-
| --- | --- | --- | --- |
|
|
77
|
-
| <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
|
|
78
|
-
| <code>roomType</code> | <code>String</code> | 是 | 房间类型<br>- standard:标准房间,所有成员可自由音视频互动。<br>- webinar:大型研讨会房间,区分嘉宾和观众角色,观众默认无上麦权限。 |
|
|
79
|
-
| <code>options</code> | <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/CreateRoomOptions-class.html">CreateRoomOptions</a> | 是 | 房间创建选项配置对象。 |
|
|
80
|
-
|
|
81
|
-
##### CreateRoomOptions 结构体详细说明
|
|
82
|
-
|
|
83
|
-
|参数名|类型|必填|默认值|说明|
|
|
84
|
-
|---------|---------|---------|---------|---------|
|
|
85
|
-
|roomName|String|否|""|房间名称。若不设置,系统可能会使用默认名称。|
|
|
86
|
-
|password|String|否|""|房间密码。设置后,其他用户加入房间时需输入密码。|
|
|
87
|
-
|isAllMicrophoneDisabled|bool|否|false|是否全员禁止开启麦克风。开启后,除房主/管理员外,普通参与者默认禁止打开麦克风。|
|
|
88
|
-
|isAllCameraDisabled|bool|否|false|是否全员禁止开启摄像头。开启后,除房主/管理员外,普通参与者默认禁止打开摄像头。|
|
|
89
|
-
|isAllScreenShareDisabled|bool|否|false|是否全员禁止发起屏幕共享。开启后,仅房主/管理员可进行屏幕共享。|
|
|
90
|
-
|isAllMessageDisabled|bool|否|false|是否全员禁止发送聊天消息(禁言)。开启后,普通参与者无法在房间内发送文字消息。|
|
|
91
|
-
|
|
92
|
-
### 步骤3:加入房间
|
|
93
|
-
|
|
94
|
-
参与者需要加入房间时,调用`RoomStore`的`joinRoom`接口,即可加入房间,此时房间内其他参与者会收到参与者加入房间事件通知([onParticipantJoined](https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_participant_store/RoomParticipantListener/onParticipantJoined.html))。
|
|
95
|
-
``` java
|
|
96
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
97
|
-
|
|
98
|
-
Future<void> joinRoom() async {
|
|
99
|
-
// 调用 RoomStore 加入房间接口
|
|
100
|
-
// 该操作会验证房间是否存在、用户是否被禁入以及密码是否正确
|
|
101
|
-
final result = await RoomStore.shared.joinRoom(
|
|
102
|
-
roomID: targetRoomID, // 目标房间 ID
|
|
103
|
-
roomType: RoomType.standard, // 目标房间类型
|
|
104
|
-
password: roomPassword, // 房间密码,若房间未设置密码则传空字符串或null
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
if (result.isSuccess) {
|
|
108
|
-
print("加入房间成功");
|
|
109
|
-
} else {
|
|
110
|
-
print("加入房间失败 [错误码: ${result.errorCode}]: ${result.errorMessage}");
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
##### joinRoom 接口参数详细说明
|
|
116
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
117
|
-
| --- | --- | --- | --- |
|
|
118
|
-
| <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
|
|
119
|
-
| <code>roomType</code> | <code>RoomType</code> | 是 | 房间类型<br>- standard:标准房间,所有成员可自由音视频互动。<br>- webinar:大型研讨会房间,区分嘉宾和观众角色,观众默认无上麦权限。 |
|
|
120
|
-
| <code>password</code> | <code>String</code> | 否 | - 房间密码,空字符串 "" 通常表示该房间不设密码。<br>- 限制长度为 0-32 字节。<br>- 推荐使用 4-8 位纯数字,方便移动端输入。设置后,其他用户加入房间时需输入密码。建议不要存储明文敏感信息。 |
|
|
121
|
-
|
|
122
|
-
### 步骤4:离开房间
|
|
123
|
-
|
|
124
|
-
当参与者要离开房间时,通过调用`RoomStore`的`leaveRoom`接口即可离开房间,此时房间内其他参与者都会收到参与者离开房间事件通知([onParticipantLeft](https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_participant_store/RoomParticipantListener/onParticipantLeft.html))。
|
|
125
|
-
``` java
|
|
126
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
127
|
-
|
|
128
|
-
Future<void> leaveRoom() async {
|
|
129
|
-
// 1. 业务逻辑说明
|
|
130
|
-
// leaveRoom 接口用于普通成员或房主主动退出房间
|
|
131
|
-
// 与 endRoom 不同,房主调用 leaveRoom 只会让自己离开,房间依然存在
|
|
132
|
-
|
|
133
|
-
// 2. 调用 RoomStore 离开房间接口
|
|
134
|
-
// 该操作会停止音视频流传输,并通知服务器将当前用户移出房间
|
|
135
|
-
final result = await RoomStore.shared.leaveRoom();
|
|
136
|
-
|
|
137
|
-
if (result.code == 0) {
|
|
138
|
-
print("离开房间成功");
|
|
139
|
-
} else {
|
|
140
|
-
print("离开房间失败 [错误码: ${result.errorCode}]: ${result.errorMessage}");
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### **步骤5:结束房间**
|
|
147
|
-
|
|
148
|
-
当房主期望结束房间时,调用`RoomStore`的`endRoom`接口即可结束当前房间。结束房间后,房间内的所有参与者都会收到房间结束事件([onRoomEnded](https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomListener/onRoomEnded.html))。
|
|
149
|
-
``` java
|
|
150
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
151
|
-
|
|
152
|
-
Future<void> endRoom() async {
|
|
153
|
-
|
|
154
|
-
// 1. 业务逻辑说明
|
|
155
|
-
// endRoom 接口用于永久解散当前房间
|
|
156
|
-
// 注意:该操作通常仅限房主(Owner)执行,解散后所有成员将被强制退出
|
|
157
|
-
|
|
158
|
-
// 2. 调用 RoomStore 解散房间接口
|
|
159
|
-
// 该方法会向服务器发送解散指令,并通知所有在线参与者房间已结束
|
|
160
|
-
final result = await RoomStore.shared.endRoom();
|
|
161
|
-
|
|
162
|
-
if (result.isSuccess) {
|
|
163
|
-
debugPrint('结束房间成功');
|
|
164
|
-
} else {
|
|
165
|
-
debugPrint('结束房间失败 [错误码: ${result.errorCode}]: ${result.errorMessage}');
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### **步骤6:更新房间信息**
|
|
171
|
-
|
|
172
|
-
当房主期望更新房间名称或者更改房间密码时,调用`RoomStore`的`updateRoomInfo`接口即可更新房间信息。更新后房间内的参与者会收到房间状态变更通知。
|
|
173
|
-
``` java
|
|
174
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
175
|
-
|
|
176
|
-
Future<void> updateRoomInfo() async {
|
|
177
|
-
// 1. 配置房间更新参数
|
|
178
|
-
// UpdateRoomOptions 用于定义需要更新的房间属性
|
|
179
|
-
final options = UpdateRoomOptions(
|
|
180
|
-
roomName: "新的会议室名称", // 更新房间显示名称
|
|
181
|
-
);
|
|
182
|
-
|
|
183
|
-
// 2. 设置修改标志位
|
|
184
|
-
// modifyFlagList 用于指定具体要更新哪些字段
|
|
185
|
-
final modifyFlagList = [
|
|
186
|
-
UpdateRoomOptionsModifyFlag.roomName, // 标记需要更新房间名称
|
|
187
|
-
];
|
|
188
|
-
|
|
189
|
-
// 3. 调用 RoomStore 更新房间信息接口
|
|
190
|
-
// 该方法会向服务器提交更新请求,并同步给所有房间成员
|
|
191
|
-
final result = await RoomStore.shared.updateRoomInfo(
|
|
192
|
-
roomID: "roomID",
|
|
193
|
-
options: options,
|
|
194
|
-
modifyFlagList: modifyFlagList,
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
if (result.isSuccess) {
|
|
198
|
-
print("更新房间信息成功");
|
|
199
|
-
} else {
|
|
200
|
-
print("更新房间信息失败 [错误码: ${result.errorCode}]: ${result.errorMessage}");
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
##### updateRoomInfo 接口参数详细说明
|
|
207
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
208
|
-
| --- | --- | --- | --- |
|
|
209
|
-
| <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
|
|
210
|
-
| <code>options</code> | <code>UpdateRoomOptions</code> | 是 | - 更新房间属性配置对象。<br>- 详细用法请参考:UpdateRoomOptions 结构体详细说明 |
|
|
211
|
-
| <code>modifyFlag</code> | <code>UpdateRoomOptionsModifyFlag</code> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>房间密码</strong>。<br>- 详细用法请参考:UpdateRoomOptionsModifyFlag 详细说明。 |
|
|
212
|
-
|
|
213
|
-
**UpdateRoomOptions 结构体详细说明**
|
|
214
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
215
|
-
| --- | --- | --- | --- |
|
|
216
|
-
| <code>roomName</code> | <code>String</code> | 否 | - 房间名称,可以不设置,默认为空字符串。<br>- 限制长度为 0-60 字节。<br>- 支持中英文、数字、特殊字符。 |
|
|
217
|
-
| <code>password</code> | <code>String</code> | 否 | - 房间密码,空字符串 "" 通常表示该房间不设密码。<br>- 限制长度为 0-32 字节。<br>- 推荐使用 4-8 位纯数字,方便移动端输入。设置后,其他用户加入房间时需输入密码。建议不要存储明文敏感信息。 |
|
|
218
|
-
|
|
219
|
-
**UpdateRoomOptionsModifyFlag 详细说明**
|
|
220
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
221
|
-
| --- | --- | --- | --- |
|
|
222
|
-
| <code>roomName</code> | <code>int</code> | 否 | - 修改房间名称时的标识位。<br>- 当修改<code>UpdateRoomOptions</code>中的<code>roomName</code>后,需要同步向<code>modifyFlagList</code>中加入<code>roomName</code>标识位。 |
|
|
223
|
-
| <code>password</code> | <code>int</code> | 否 | - 修改房间密码时的标识位。<br>- 当修改<code>UpdateRoomOptions</code>中的<code>password</code>后,需要同步向<code>modifyFlagList</code>中加入<code>password</code>标识位。 |
|
|
224
|
-
|
|
225
|
-
### 步骤7:获取房间信息
|
|
226
|
-
|
|
227
|
-
进入房间成功后调用`RoomStore`的`getRoomInfo`接口即可获取到房间详细信息。
|
|
228
|
-
``` java
|
|
229
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
230
|
-
|
|
231
|
-
Future<void> getRoomInfo() async {
|
|
232
|
-
// 1. 业务逻辑说明
|
|
233
|
-
// getRoomInfo 接口用于获取指定房间的详细信息
|
|
234
|
-
// 可以获取房间名称、创建者、参与者数量、权限设置等完整信息
|
|
235
|
-
|
|
236
|
-
// 2. 调用 RoomStore 获取房间信息接口
|
|
237
|
-
// 该操作会从服务器获取最新的房间状态和配置信息
|
|
238
|
-
final result = await RoomStore.shared.getRoomInfo("roomID");
|
|
239
|
-
|
|
240
|
-
if (result.code == 0) {
|
|
241
|
-
print("获取房间信息成功,roomInfo: ${result.roomInfo}");
|
|
242
|
-
} else {
|
|
243
|
-
print("获取房间信息失败 [错误码: ${result.errorCode}]: ${result.errorMessage}");
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### 步骤8:监听房间实时事件及状态变化
|
|
249
|
-
|
|
250
|
-
订阅`RoomEvent`房间内的被动事件。以订阅房间结束事件为例,示例代码如下:
|
|
251
|
-
``` java
|
|
252
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
253
|
-
|
|
254
|
-
// RoomPage 代表房间主视图
|
|
255
|
-
class RoomPage extends StatefulWidget {
|
|
256
|
-
const RoomPage({super.key});
|
|
257
|
-
|
|
258
|
-
@override
|
|
259
|
-
State<RoomPage> createState() => _RoomPageState();
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
class _RoomPageState extends State<RoomPage> {
|
|
263
|
-
// 房间事件监听器
|
|
264
|
-
late final RoomListener _roomListener;
|
|
265
|
-
|
|
266
|
-
@override
|
|
267
|
-
void initState() {
|
|
268
|
-
super.initState();
|
|
269
|
-
|
|
270
|
-
/// 创建监听器,设置各事件回调
|
|
271
|
-
_roomListener = RoomListener(
|
|
272
|
-
onRoomEnded: (roomInfo) {
|
|
273
|
-
print("房间已结束: ${roomInfo.roomName}");
|
|
274
|
-
},
|
|
275
|
-
// ... 处理其他 RoomListener 事件 ...
|
|
276
|
-
);
|
|
277
|
-
|
|
278
|
-
/// 调用此方法添加监听器,订阅房间被动事件
|
|
279
|
-
RoomStore.shared.addRoomListener(_roomListener);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
@override
|
|
283
|
-
void dispose() {
|
|
284
|
-
// 调用此方法移除监听器,避免内存泄漏
|
|
285
|
-
RoomStore.shared.removeRoomListener(_roomListener);
|
|
286
|
-
super.dispose();
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
订阅`RoomState`房间属性状态变化。以订阅当前所在房间信息变化为例,示例代码如下:
|
|
292
|
-
``` java
|
|
293
|
-
ValueListenableBuilder(
|
|
294
|
-
valueListenable: RoomStore.shared.state.currentRoom,
|
|
295
|
-
builder: (context, currentRoom, _) {
|
|
296
|
-
return Container(); // 需要监听房间信息的widget
|
|
297
|
-
},
|
|
298
|
-
),
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
## API 文档
|
|
302
|
-
| <strong>Store</strong> | <strong>功能描述</strong> | <strong>API文档</strong> |
|
|
303
|
-
| --- | --- | --- |
|
|
304
|
-
| <strong>RoomStore</strong> | 房间全生命周期管理:创建并加入 / 加入 / 离开 / 结束房间 / 更新、获取房间信息 / 房间预约 / 呼叫房间外成员 / 监听房间内被动事件(如房间解散,房间信息更新等)。 | <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomStore-class.html">API 文档</a> |
|
|
305
|
-
|
|
306
|
-
## 常见问题
|
|
307
|
-
|
|
308
|
-
### `RoomInfo` 中的参与人数(`participantCount`)是如何更新的?时机和频率是怎样的?
|
|
309
|
-
|
|
310
|
-
`participantCount` 的更新并非总是实时的,其机制如下:
|
|
311
|
-
- **主动进出房间**:当用户主动加入或正常退出房间时,参与人数的变更通知会即时触发。您会很快在 `RoomState` 中的`currentRoom`观察到 `participantCount` 的变化。
|
|
312
|
-
|
|
313
|
-
- **异常掉线**:当用户因网络问题、应用崩溃等原因异常掉线时,系统需要通过心跳机制来判断其真实状态。只有当该用户连续 90 秒没有心跳后,系统才会判定其为离线,并触发人数变更通知。
|
|
314
|
-
|
|
315
|
-
- **更新机制与频率控制:**
|
|
316
|
-
|
|
317
|
-
- 无论是即时触发还是延迟触发,所有的人数变更通知都是以消息的形式在房间内广播的。
|
|
318
|
-
|
|
319
|
-
- 房间内每秒的消息总量有上限,单房间消息频控是**每秒 40 条消息**。
|
|
320
|
-
|
|
321
|
-
- **关键点:**在“弹幕风暴”消息流量极高的场景下,如果房间内的消息速率超过了 40条/秒 的阈值,为了保证核心消息(例如弹幕)的送达,**人数变更的消息可能会被频控策略丢弃**。
|
|
322
|
-
|
|
323
|
-
**这对开发者意味着什么?**
|
|
324
|
-
|
|
325
|
-
`participantCount` 是一个非常接近实时的**高精度估算值**,但在极端高并发场景下,它可能存在短暂的延迟或数据丢失。因此,我们建议您将其用于 **UI 展示**,而不应作为计费、统计等需要绝对精准场景的唯一依据。
|
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
`RoomStore` 是 `AtomicXCore` 的房间管理核心模块,涵盖了预定房间体系。本章节详细介绍了如何利用 `RoomStore` 高效完成预定房间功能的开发与接入。
|
|
2
|
-
|
|
3
|
-
## 核心功能
|
|
4
|
-
- **预定、取消预定房间**:任何用户均可完成预定房间,取消预定房间功能。
|
|
5
|
-
|
|
6
|
-
- **更新预定房间信息:**对已预定的房间进行房间信息更新,包含:房间名称,开始时间,结束时间。
|
|
7
|
-
|
|
8
|
-
- **获取预定房间列表**:获取当前账户下所有预定的房间列表信息。
|
|
9
|
-
|
|
10
|
-
- **获取预定房间的参与成员列表**:获取指定预定房间的参与成员列表信息。
|
|
11
|
-
|
|
12
|
-
- **添加、移除预定房间参与成员**:对已预定的房间可以添加、移除参与成员。
|
|
13
|
-
|
|
14
|
-
## 核心概念
|
|
15
|
-
|
|
16
|
-
在开始集成之前,您可能需要通过下表了解一下`RoomStore`中与预定房间相关的几个核心概念:
|
|
17
|
-
| <strong>核心概念</strong> | <strong>核心职责与描述</strong> |
|
|
18
|
-
| --- | --- |
|
|
19
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomStatus.html">RoomStatus</a> | 代表当前房间的状态,包含:<code>scheduled</code>(预定状态),<code>running</code>(进行中)。 |
|
|
20
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/ScheduleRoomOptions-class.html">ScheduleRoomOptions</a> | 代表预定房间的核心数据结构,包含:开始时间,结束时间,预定成员列表等。 |
|
|
21
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomState-class.html">RoomState</a> | 代表房间状态管理的核心数据结构,负责维护用户的房间相关状态信息。<br>核心属性:<br>- <code>scheduledRoomList</code> 存储了当前账号下所有预定的房间列表信息。<br>- <code>scheduledRoomListCursor</code> 则代表预定房间列表的分页游标。 |
|
|
22
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomListener-class.html">RoomListener</a> | 代表房间动态的实时事件。其中包含预定房间相关的事件。 |
|
|
23
|
-
| <a href="https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomStore-class.html">RoomStore</a> | 这是与房间全生命周期相关的核心类。通过它,您可以主动发起预定房间,获取预定房间列表等功能,并通过 <code>addRoomListener</code> 方法来接收与预定房间相关的实时动态事件。 |
|
|
24
|
-
|
|
25
|
-
## 实现步骤
|
|
26
|
-
|
|
27
|
-
### 步骤1:组件集成
|
|
28
|
-
|
|
29
|
-
请参考 接入概览 集成 **AtomicXCore SDK**,并已完成 实现登录逻辑 部分接入。
|
|
30
|
-
|
|
31
|
-
### 步骤2:预定房间功能
|
|
32
|
-
|
|
33
|
-
#### **一、预定房间**
|
|
34
|
-
|
|
35
|
-
##### 实现方式:
|
|
36
|
-
1. **配置预定房间初始化参数:**初始化 `ScheduleRoomOptions` 预定房间配置项设置房间名称,房间密码、开始时间、结束时间、参与者、房间信息等。
|
|
37
|
-
|
|
38
|
-
2. **房间权限预设:**设置房间内全场成员权限,例如全体静音,全体禁画等。
|
|
39
|
-
|
|
40
|
-
3. **预定房间:**调用 `RoomStore` 的 `scheduleRoom` 接口执行核心操作。
|
|
41
|
-
|
|
42
|
-
##### 示例代码:
|
|
43
|
-
``` java
|
|
44
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
45
|
-
|
|
46
|
-
Future<void> scheduleRoom() async {
|
|
47
|
-
final startTime = DateTime.now().millisecondsSinceEpoch ~/ 1000 + 60 * 15; // 计算开始时间:当前时间 + 15分钟后开始
|
|
48
|
-
final endTime = startTime + 60 * 30; // 计算结束时间:开始时间 + 30分钟(房间持续30分钟)
|
|
49
|
-
final reminderSeconds = 60 * 5; // 设置提醒时间:房间开始前5分钟提醒
|
|
50
|
-
|
|
51
|
-
// 创建预定房间选项配置
|
|
52
|
-
final options = ScheduleRoomOptions(
|
|
53
|
-
roomName: "房间名称",
|
|
54
|
-
scheduleStartTime: startTime,
|
|
55
|
-
scheduleEndTime: endTime,
|
|
56
|
-
reminderSecondsBeforeStart: reminderSeconds,
|
|
57
|
-
scheduleAttendees: ["user01", "user02", "user03"], // 设置预定参与者列表(用户ID数组)
|
|
58
|
-
password: "房间密码", // 设置房间密码(可选,空字符串表示无密码)
|
|
59
|
-
isAllMicrophoneDisabled: false, // 设置是否默认禁用所有参与者的麦克风(false = 允许开启麦克风)
|
|
60
|
-
isAllCameraDisabled: false, // 设置是否默认禁用所有参与者的摄像头(false = 允许开启摄像头)
|
|
61
|
-
isAllScreenShareDisabled: false, // 设置是否默认禁用所有参与者的屏幕共享(false = 允许屏幕共享)
|
|
62
|
-
isAllMessageDisabled: false, // 设置是否默认禁用所有参与者的消息功能(false = 允许发送消息)
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
final result = await RoomStore.shared.scheduleRoom(
|
|
66
|
-
roomID: "roomID",
|
|
67
|
-
options: options,
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
if (result.isSuccess) {
|
|
71
|
-
print("预定房间成功");
|
|
72
|
-
} else {
|
|
73
|
-
print("预定房间失败: [错误码: ${result.errorCode}] ${result.errorMessage}");
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
##### scheduleRoom 接口参数详细说明
|
|
79
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
80
|
-
| --- | --- | --- | --- |
|
|
81
|
-
| <code>roomID</code> | <code>String</code> | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
|
|
82
|
-
| <code>options</code> | <code>ScheduleRoomOptions</code> | 是 | - 创建房间配置对象。<br>- 详细用法请参考:ScheduleRoomOptions 结构体详细说明 |
|
|
83
|
-
|
|
84
|
-
##### ScheduleRoomOptions 结构体详细说明
|
|
85
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
86
|
-
| --- | --- | --- | --- |
|
|
87
|
-
| roomName | String | 否 | - 房间名称,可以不设置,默认为空字符串。<br>- 限制长度为 0-60 字节。<br>- 支持中英文、数字、特殊字符。 |
|
|
88
|
-
| password | String | 否 | - 房间密码,空字符串 <code>""</code> 通常表示该房间不设密码。<br>- 限制长度为 0-32 字节。<br>- 推荐使用 4-8 位纯数字,方便移动端输入。设置后,其他用户加入房间时需输入密码。建议不要存储明文敏感信息。 |
|
|
89
|
-
| scheduleStartTime | int | 是 | - 预定的房间开始时间(Unix 时间戳,单位:秒)。<br>- 取值必须大于当前时间。<br>- 推荐设置为未来的整分时间。例如:1736164800(代表 2025-01-06 20:00:00)。 |
|
|
90
|
-
| scheduleEndTime | int | 是 | - 预定的房间结束时间(Unix 时间戳,单位:秒)。<br>- 取值必须大于 scheduleStartTime。<br>- 建议根据预期时长设置。例如:scheduleStartTime + 3600(预定 1 小时时长的房间)。 |
|
|
91
|
-
| reminderSecondsBeforeStart | int | 否 | - 房间开始前的提醒时间(单位:秒)。用于系统触发开始提醒。<br>- 推荐设置为 300(5分钟)或 900(15分钟),用于在 App 端触发本地通知。 |
|
|
92
|
-
| scheduleAttendees | List<String> | 否 | - 预定参与者的用户 ID 列表,在预定房间时设置,系统将向这些用户发送预定邀请。<br>- 获取方式请参考 获取指定预定房间的参与成员列表。 |
|
|
93
|
-
| isAllMicrophoneDisabled | bool | 否 | - 是否全员禁止打开麦克风。开启后,除房主/管理员外,普通参与者默认禁止打开麦克风。<br>- 参数含义:<br>- true : 禁止。<br>- false :取消禁止 (默认值)。 |
|
|
94
|
-
| isAllCameraDisabled | bool | 否 | - 是否全员禁止打开摄像头。开启后,除房主/管理员外,普通参与者默认禁止打开摄像头。<br>- 参数含义:<br>- true : 禁止。<br>- false :取消禁止(默认值)。 |
|
|
95
|
-
| isAllScreenShareDisabled | bool | 否 | - 是否全员禁止发起屏幕共享。开启后,仅房主/管理员可进行屏幕共享。<br>- 参数含义:<br>- true : 禁止。<br>- false :取消禁止(默认值)。 |
|
|
96
|
-
| isAllMessageDisabled | bool | 否 | - 是否全员禁止发送聊天消息(禁言)。开启后,普通参与者无法在房间内发送文字消息。<br>- 参数含义:<br>- true : 禁止。<br>- false :取消禁止(默认值)。 |
|
|
97
|
-
|
|
98
|
-
#### **二、取消房间预定**
|
|
99
|
-
- **预定房间者:**调用`RoomStore`的`cancelScheduledRoom`接口,实现取消预定房间功能。
|
|
100
|
-
|
|
101
|
-
``` java
|
|
102
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
103
|
-
|
|
104
|
-
Future<void> cancelScheduledRoom(String roomID) async {
|
|
105
|
-
final result = await RoomStore.shared.cancelScheduledRoom(roomID);
|
|
106
|
-
|
|
107
|
-
if (result.isSuccess) {
|
|
108
|
-
print("取消预定房间成功");
|
|
109
|
-
} else {
|
|
110
|
-
print("取消预定房间失败: [错误码: ${result.errorCode}] ${result.errorMessage}");
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
#### **三、更新预定房间**
|
|
116
|
-
- **房间预定者:**调用`RoomStore`的`updateScheduledRoom`接口,实现更新预定**房间名称**、**开始时间**、**结束时间**。
|
|
117
|
-
|
|
118
|
-
``` java
|
|
119
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
120
|
-
|
|
121
|
-
Future<void> updateScheduledRoom() async {
|
|
122
|
-
final newStartTime = DateTime.now().millisecondsSinceEpoch ~/ 1000 + 60 * 30; // 计算预定时间:当前时间 + 30分钟后开始
|
|
123
|
-
final newEndTime = newStartTime + 60 * 45; // 计算结束时间:开始时间 + 45分钟(房间持续45分钟)
|
|
124
|
-
|
|
125
|
-
final options = ScheduleRoomOptions(
|
|
126
|
-
roomName: "房间名称",
|
|
127
|
-
scheduleStartTime: newStartTime,
|
|
128
|
-
scheduleEndTime: newEndTime,
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
final modifyFlagList = [
|
|
132
|
-
ScheduleRoomOptionsModifyFlag.roomName,
|
|
133
|
-
ScheduleRoomOptionsModifyFlag.scheduleStartTime,
|
|
134
|
-
ScheduleRoomOptionsModifyFlag.scheduleEndTime,
|
|
135
|
-
];
|
|
136
|
-
|
|
137
|
-
final result = await RoomStore.shared.updateScheduledRoom(
|
|
138
|
-
roomID: "roomID",
|
|
139
|
-
options: options,
|
|
140
|
-
modifyFlagList: modifyFlagList,
|
|
141
|
-
);
|
|
142
|
-
|
|
143
|
-
if (result.isSuccess) {
|
|
144
|
-
print("更新预定房间成功");
|
|
145
|
-
} else {
|
|
146
|
-
print("更新预定房间失败: [错误码: ${result.errorCode}] ${result.errorMessage}");
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
##### updateScheduledRoom 接口参数详细说明
|
|
152
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
153
|
-
| --- | --- | --- | --- |
|
|
154
|
-
| roomID | String | 是 | - 字符串类型的房间唯一标识符。<br>- 限制长度为 0-48 字节。<br>- 建议仅包含数字、英文字母(区分大小写)、下划线(_)和连字符(-)。避免使用空格和中文字符。 |
|
|
155
|
-
| options | ScheduleRoomOptions | 是 | - 预定房间配置对象。<br>- 详细用法请参考:ScheduleRoomOptions 结构体详细说明 |
|
|
156
|
-
| modifyFlagList | List<ScheduleRoomOptionsModifyFlag> | 是 | - 更新房间属性修改标志位。目前支持更新<strong>房间名称</strong>、<strong>开始时间</strong>、<strong>结束时间。</strong><br>- 详细用法请参考:ScheduleRoomOptionsModifyFlag 详细说明。 |
|
|
157
|
-
|
|
158
|
-
**ScheduleRoomOptionsModifyFlag 详细说明**
|
|
159
|
-
| 参数名 | 说明 |
|
|
160
|
-
| --- | --- |
|
|
161
|
-
| <code>roomName</code> | - 修改预定房间名称时的标识位。<br>- 当修改<code>ScheduleRoomOptions</code>中的<code>roomName</code>后,需要同步向<code>modifyFlagList</code>中添加<code>roomName</code>标识位。 |
|
|
162
|
-
| <code>scheduleStartTime</code> | - 修改预定房间开始时间时的标识位。<br>- 当修改<code>ScheduleRoomOptions</code>中的<code>scheduleStartTime</code>后,需要同步向<code>modifyFlagList</code>中添加<code>scheduleStartTime</code>标识位。 |
|
|
163
|
-
| <code>scheduleEndTime</code> | - 修改预定房间结束时间时的标识位。<br>- 当修改<code>ScheduleRoomOptions</code>中的<code>scheduleEndTime</code>后,需要同步向<code>modifyFlagList</code>中添加<code>scheduleEndTime</code>标识位。 |
|
|
164
|
-
|
|
165
|
-
#### **四、添加、删除参与成员**
|
|
166
|
-
- **预定房间者:**调用 `RoomStore` 的 `addScheduledAttendees` 或者 `removeScheduledAttendees` 接口,可以为已预定的房间内批量添加或移除预定参与者。
|
|
167
|
-
|
|
168
|
-
``` java
|
|
169
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
170
|
-
|
|
171
|
-
Future<void> addScheduledAttendees(String roomID, List<String> userIDList) async {
|
|
172
|
-
final result = await RoomStore.shared.addScheduledAttendees(
|
|
173
|
-
roomID: roomID,
|
|
174
|
-
userIDList: userIDList,
|
|
175
|
-
);
|
|
176
|
-
|
|
177
|
-
if (result.isSuccess) {
|
|
178
|
-
print("添加预定参与者成功");
|
|
179
|
-
} else {
|
|
180
|
-
print("添加预定参与者失败: [错误码: ${result.errorCode}] ${result.errorMessage}");
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
Future<void> removeScheduledAttendees(String roomID, List<String> userIDList) async {
|
|
185
|
-
final result = await RoomStore.shared.removeScheduledAttendees(
|
|
186
|
-
roomID: roomID,
|
|
187
|
-
userIDList: userIDList,
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
if (result.isSuccess) {
|
|
191
|
-
print("移除预定参与者成功");
|
|
192
|
-
} else {
|
|
193
|
-
print("移除预定参与者失败: [错误码: ${result.errorCode}] ${result.errorMessage}");
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
### 步骤3:获取预定房间列表
|
|
199
|
-
- **任意用户:**调用`RoomStore`的`getScheduledRoomList`接口,均可获取到自己账号下所有预定的房间列表信息。
|
|
200
|
-
|
|
201
|
-
``` java
|
|
202
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
203
|
-
|
|
204
|
-
/// 获取预定房间列表
|
|
205
|
-
Future<void> getScheduledRoomList({String? cursor}) async {
|
|
206
|
-
/// [cursor] 为分页游标,首次调用时传入 null,获取第一页数据, 后续调用时传入上次返回的 nextCursor 值
|
|
207
|
-
final result = await RoomStore.shared.getScheduledRoomList(cursor);
|
|
208
|
-
|
|
209
|
-
if (result.isSuccess) {
|
|
210
|
-
final roomList = result.data;
|
|
211
|
-
final nextCursor = result.cursor;
|
|
212
|
-
print("获取预定房间列表成功");
|
|
213
|
-
} else {
|
|
214
|
-
print("获取预定房间列表失败: [错误码: ${result.errorCode}] ${result.errorMessage}");
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
### 步骤4:获取指定预定房间的参与成员列表
|
|
220
|
-
- **任意用户:**调用`RoomStore`的`getScheduledAttendees`接口,可获取到指定预定房间的参与成员列表信息。
|
|
221
|
-
|
|
222
|
-
``` java
|
|
223
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
224
|
-
|
|
225
|
-
/// 获取预定房间的参与者列表
|
|
226
|
-
/// - [roomID]: 房间ID,用于标识要查询参与者列表的预定房间
|
|
227
|
-
/// - [cursor] 为分页游标,首次调用时传入 null,获取第一页数据, 后续调用时传入上次返回的 nextCursor 值
|
|
228
|
-
Future<void> getScheduledAttendees(String roomID, {String? cursor}) async {
|
|
229
|
-
final result = await RoomStore.shared.getScheduledAttendees(
|
|
230
|
-
roomID: roomID,
|
|
231
|
-
cursor: cursor,
|
|
232
|
-
);
|
|
233
|
-
|
|
234
|
-
if (result.isSuccess) {
|
|
235
|
-
final attendees = result.data;
|
|
236
|
-
final nextCursor = result.cursor;
|
|
237
|
-
print("获取预定房间参与者列表成功");
|
|
238
|
-
} else {
|
|
239
|
-
print("获取预定房间参与者列表失败: [错误码: ${result.errorCode}] ${result.errorMessage}");
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### 步骤5:监听预定房间事件及状态
|
|
245
|
-
- 订阅`RoomEvent`预定房间相关的被动事件,示例代码如下:
|
|
246
|
-
|
|
247
|
-
``` java
|
|
248
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
249
|
-
|
|
250
|
-
late RoomListener _roomListener;
|
|
251
|
-
|
|
252
|
-
/// 订阅预定房间相关事件
|
|
253
|
-
void subscribeScheduledRoomEvents() {
|
|
254
|
-
_roomListener = RoomListener(
|
|
255
|
-
onAddedToScheduledRoom: (roomInfo) {
|
|
256
|
-
print("已被添加到预定房间 房间信息: $roomInfo");
|
|
257
|
-
},
|
|
258
|
-
onRemovedFromScheduledRoom: (roomInfo, operatorUser) {
|
|
259
|
-
print("已被移除预定房间 房间信息: $roomInfo, 移除者: $operatorUser");
|
|
260
|
-
},
|
|
261
|
-
onScheduledRoomCancelled: (roomInfo, operatorUser) {
|
|
262
|
-
print("预定房间被取消 房间信息: $roomInfo, 取消者: $operatorUser");
|
|
263
|
-
},
|
|
264
|
-
onScheduledRoomStartingSoon: (roomInfo) {
|
|
265
|
-
print("预定房间即将开始 房间信息: $roomInfo");
|
|
266
|
-
},
|
|
267
|
-
onRoomEnded: (roomInfo) {
|
|
268
|
-
print("房间已结束 房间信息: $roomInfo");
|
|
269
|
-
},
|
|
270
|
-
);
|
|
271
|
-
|
|
272
|
-
RoomStore.shared.addRoomListener(_roomListener);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/// 取消订阅预定房间相关事件
|
|
276
|
-
void unsubscribeScheduledRoomEvents() {
|
|
277
|
-
RoomStore.shared.removeRoomListener(_roomListener);
|
|
278
|
-
}
|
|
279
|
-
```
|
|
280
|
-
- 订阅`RoomState`预定房间列表状态变化,示例代码如下:
|
|
281
|
-
|
|
282
|
-
``` java
|
|
283
|
-
import 'package:flutter/material.dart';
|
|
284
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
285
|
-
|
|
286
|
-
/// 订阅预定房间列表状态变化
|
|
287
|
-
Widget buildScheduledRoomListWidget() {
|
|
288
|
-
return ValueListenableBuilder(
|
|
289
|
-
valueListenable: RoomStore.shared.state.scheduledRoomList,
|
|
290
|
-
builder: (context, scheduledRoomList, child) {
|
|
291
|
-
print("预定房间列表变化 房间列表信息: $scheduledRoomList");
|
|
292
|
-
|
|
293
|
-
// 根据 scheduledRoomList 构建 UI
|
|
294
|
-
return Container();
|
|
295
|
-
},
|
|
296
|
-
);
|
|
297
|
-
}
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
## API 文档
|
|
301
|
-
|
|
302
|
-
|**Store/Component**|**功能描述**|**API文档**|
|
|
303
|
-
|---------|---------|---------|
|
|
304
|
-
|**RoomStore**|房间全生命周期管理:创建并加入 / 加入 / 离开 / 结束房间 / 更新、获取房间信息 / 房间预定 / 呼叫房间外成员 / 监听房间内被动事件(例如房间解散,房间信息更新等)。|[API 文档](https://tencent-rtc.github.io/TUIKit_Flutter/api_room_room_store/RoomStore-class.html)|
|
|
305
|
-
|
|
306
|
-
## 常见问题
|
|
307
|
-
|
|
308
|
-
### 当预定房间后,无法收到`RoomEvent`的`onScheduledRoomStartingSoon`事件。
|
|
309
|
-
|
|
310
|
-
如果您在预定房间后未收到即将开始的事件通知,请按照以下两个核心要点进行检查:
|
|
311
|
-
1. **检查提醒参数配置** (`reminderSecondsBeforeStart`)
|
|
312
|
-
|
|
313
|
-
- 触发机制:`onScheduledRoomStartingSoon` 事件的触发高度依赖于预定配置类 `ScheduleRoomOptions` 中的 `reminderSecondsBeforeStart` 属性。
|
|
314
|
-
|
|
315
|
-
- 默认行为:该属性的默认值为 0,代表“不开启提醒”。
|
|
316
|
-
|
|
317
|
-
- 解决建议:请确保在预定房间时明确设置该参数。该参数单位为**秒**,表示在房间开始前多少秒推送事件通知。
|
|
318
|
-
|
|
319
|
-
2. **验证预定时间逻辑**
|
|
320
|
-
|
|
321
|
-
- 计算公式:系统触发提醒的前提是:预定开始时间 (`scheduleStartTime`) - 当前时间 > 提醒偏移量 (`reminderSecondsBeforeStart`)。
|
|
322
|
-
|
|
323
|
-
- 场景说明:如果您的房间开始时间设置得过近(例如 5 分钟后开始),而提醒时间设置得过大(例如设置 10 分钟前提醒),系统将无法捕捉到触发时机,从而导致事件丢失。
|
|
324
|
-
|
|
325
|
-
- 解决建议:请确保预定的开始时间距离当前时刻,大于您所设置的提醒秒数。
|