RtcMessage
简介
RtcMessage(简称RTM)用来给频道内的其他用户发送即时消息。
注意:RTM消息和白板内的消息是不互通的。
获取实例
RtcMessage 是单例模式的。
- 如果通过 import 的方式导入 SDK,可以先导入 RtsService 再获取 RtcMessage 实例,也可以直接导入 RtcMessage 来获取实例。
- 以下两种方式先导入 RtsService,再通过
RtsService.getInstance().getRtcMessage()
获取实例。import { RtsService } from "@pano.video/panortc";
import { RtsService } from "@pano.video/panorts";
- 以下两种方式直接导入 RtcMessage,再通过
RtcMessage.getInstance()
获取实例。import { RtcMessage } from "@pano.video/panortc";
import { RtcMessage } from "@pano.video/panorts";
- 以下两种方式先导入 RtsService,再通过
- 如果将 panortc-x.x.x.js 加载到 HTML,那么可以通过以下两种方式获取实例:
PanoRtc.RtsService.getInstance().getRtcMessage()
PanoRtc.RtcMessage.getInstance()
连接 RtcMessage
- 通过 RtcEngine 加入频道:
在调用 RtcEngine 实例的joinChannel
方法时,选择合适的入会类型(除了mediaOnly
之外的其他JoinChannelType
类型),在收到RtcEngine.Events.whiteboardAvailable
回调后,调用 RtcMessage 实例的joinSession
方法连接 - 通过 RtcWhiteboard 加入频道:
调用 RtcWhiteboard 实例的joinChannel
方法,在onSuccess
回调内调用 RtcMessage 实例的joinSession
方法连接 - 通过 RtsService 加入频道:
调用 RtsService 实例的joinChannel
方法,在onSuccess
回调内调用 RtcMessage 的joinSession
方法连接
Properties
sessionProperty
• sessionProperty: object= {}
session 自定义属性,通过 setProperty
方法设置
Accessors
isConnected
• get isConnected(): boolean
是否已经连接到服务器
Returns: boolean
Methods
broadcastMessage
▸ broadcastMessage(message
: any, sendBack
: boolean): QResult
Parameters:
Name | Type | Description |
---|---|---|
message | any (字符串或普通对象) | 消息 |
sendBack | boolean | 是否发送给自己 |
广播消息,在频道中的所有用户都会受到该消息
Returns: QResult
getRoster
▸ getRoster(): { name
: string ; userData
: string ; userId
: string }[]
获取在当前会话中所有用户的列表
Returns: { name
: string ; userData
: string ; userId
: string }[]
joinSession
▸ joinSession(): StatusCode
加入RtcMessage会话
注意RtcMessage会在JoinChannel时自动连接,一般情况下开发者不需要主动调用这个方法
Returns: StatusCode
leave
▸ leave(): StatusCode
离开会话,其他用户会收到当前用户离开会话的事件
Returns: StatusCode
off
▸ off<T>(event
: T, fn?
: (...args
: any[]) => void, context?
: any, once?
: boolean): void
Type parameters
Name | Type | |
---|---|---|
T | string \ | symbol |
Parameters:
Name | Type |
---|---|
event | T |
fn? | (...args : any[]) => void |
context? | any |
once? | boolean |
取消事件监听
on
▸ on<T>(event
: T, fn
: (...args
: any[]) => void, context?
: any): void
Add a listener for a given event.
Type parameters
Name | Type | |
---|---|---|
T | string \ | symbol |
Parameters:
Name | Type |
---|---|
event | T |
fn | (...args : any[]) => void |
context? | any |
添加事件监听
publishTopicMessage
▸ publishTopicMessage(topic
: string, data
: any ): void
发布某个主题的消息
Parameters:
Name | Type |
---|---|
topic | string |
data | any |
Returns: void
sendMessage
▸ sendMessage(to
: string, message
: string | Record<string | number | symbol, any>): QResult
向某个用户发送消息
Parameters:
Name | Type | Description |
---|---|---|
to | string | 用户id |
message | any | 消息 |
Returns: QResult
setProperty
▸ setProperty(property
: string, value?
: any, seqId?
: number): void
设置 session 自定义属性,设置后会触发 propertyChanged
事件,rtcMessage
session 中所有用户都会接收到。
可以通过 sessionProperty
属性获取所有设置的自定义属性。
Parameters:
Name | Type | Description |
---|---|---|
property | string | 属性名称 |
value? | any | 属性值 |
Returns: void
subscribeTopic
▸ subscribeTopic(topic
: string): void
订阅某个主题的消息,订阅主题之后,会收到 topicMessageReceived
事件
Parameters:
Name | Type | Description |
---|---|---|
topic | string | 主题 |
Returns: void
updateUserData
▸ updateUserData(userData
: string, userName
?: string): StatusCode
更新用户数据,数据会保存在服务器,其他用户会收到 userUpdate
和 rosterUpdate
事件,可从 roster 中获取该数据
Parameters:
Name | Type |
---|---|
userName | string |
userData | string |
Returns: StatusCode
unsubscribeTopic
▸ unsubscribeTopic(topic
: string): void
取消订阅某个主题的消息
Parameters:
Name | Type |
---|---|
topic | string |
Returns: void
getInstance
▸ Static
getInstance(): RtcMessage
获取 RtcMessage 实例
Returns: RtcMessage
Events
RtcMessage 实例会在某些事件发生时触发对应的事件,开发者可以监听这些事件设置响应的处理方法
messageReceived
接收到消息
RtcMessage.getInstance().on(
RtcMessage.Events.messageReceived,
({ from: string, message: any }) => {
console.log('messageReceived', from, message);
}
);
propertyChanged
自定义属性更新
RtcMessage.getInstance().on(
RtcMessage.Events.propertyChanged,
(type: 'update' | 'delete', propName: string, propValue: any)
=> console.log('propertyChanged', type, propName, propValue)
);
rosterUpdate
用户列表更新
RtcMessage.getInstance().on(
RtcMessage.Events.messageReceived,
({ from: string, message: any }) => {
console.log('messageReceived', from, message);
}
);
sessionReady
当实例连接到服务器时触发
sessionClosed
当前实例被关闭时触发
serviceStateChanged
服务连接状态变化
RtcMessage.getInstance().on(
RtcMessage.Events.serviceStateChanged,
({ isConnected: boolean, reason: StatusCode }) => {
console.log('serviceStateChanged', isConnected, reason);
}
);
topicMessageReceived
当订阅了某个主题的消息之后,收到在该主题下发布的消息
// timestamp 为 rts server 为消息添加的服务端时间戳,单位是毫秒
RtcMessage.getInstance().on(
RtcMessage.Events.topicMessageReceived,
(topic: string, from: string, message: any, timestamp: number) => console.log(topic, from, message, timestamp)
);
userJoin
用户加入
RtcMessage.getInstance().on(
RtcMessage.Events.userJoin,
(userId: string) => {
console.log('userJoin', userId);
}
);
userLeave
用户离开
RtcMessage.getInstance().on(
RtcMessage.Events.userLeave,
(userId: string) => {
console.log('userLeave', userId);
}
);
userUpdate
用户信息更新,如用户名,用户数据等
RtcMessage.getInstance().on(
RtcMessage.Events.userUpdate,
(userId: string) => {
console.log('userUpdate', userId);
}
);