@pano.video/panortc-react-native-sdk
Version:
PanoRtc SDK For React Native
266 lines (231 loc) • 6.99 kB
JavaScript
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
import { NativeEventEmitter, NativeModules } from 'react-native';
const {
/**
* @ignore
*/
PanoRtcMessageModule
} = NativeModules;
/**
* @ignore
*/
const Prefix = PanoRtcMessageModule.prefix;
/**
* @ignore
*/
const RtcMessageServiceEvent = new NativeEventEmitter(PanoRtcMessageModule);
/**
* The {@link RtcMessageService} class.
*/
export default class RtcMessageService {
constructor() {
_defineProperty(this, "_listeners", new Map());
}
/**
* @ignore
*/
static _callMethod(method, args) {
return PanoRtcMessageModule.callMethod(method, args);
}
destroy() {
this.removeAllListeners();
}
/**
* Adds the [`RtcMessageServiceEventHandler`]{@link RtcMessageServiceEventHandler} handler.
*
* After setting the [`RtcMessageServiceEventHandler`]{@link RtcMessageServiceEventHandler} handler, you can listen for `RtcMessageService` events and receive the statistics of the corresponding RtcMessageService instance.
* @param event The event type.
* @param listener The [`RtcMessageServiceEventHandler`]{@link RtcMessageServiceEventHandler} handler.
*/
addListener(event, listener) {
const callback = res => {
const {
data
} = res; // @ts-ignore
listener(...data);
};
let map = this._listeners.get(event);
if (map === undefined) {
map = new Map();
this._listeners.set(event, map);
}
RtcMessageServiceEvent.addListener(Prefix + event, callback);
map.set(listener, callback);
return {
remove: () => {
this.removeListener(event, listener);
}
};
}
/**
* Removes the [`RtcMessageServiceEventHandler`]{@link RtcMessageServiceEventHandler} handler.
*
* For callback events that you only want to listen for once, call this method to remove the specific [`RtcMessageServiceEventHandler`]{@link RtcMessageServiceEventHandler} objects after you have received them.
* @param event The event type.
* @param listener The [`RtcMessageServiceEventHandler`]{@link RtcMessageServiceEventHandler} handler.
*/
removeListener(event, listener) {
const map = this._listeners.get(event);
if (map === undefined) return;
RtcMessageServiceEvent.removeListener(Prefix + event, map.get(listener));
map.delete(listener);
}
/**
* Removes all the [`RtcMessageServiceEventHandler`]{@link RtcMessageServiceEventHandler} handlers.
* @param event The event type.
*/
removeAllListeners(event) {
if (event === undefined) {
this._listeners.forEach((_, key) => {
RtcMessageServiceEvent.removeAllListeners(Prefix + key);
});
this._listeners.clear();
return;
}
RtcMessageServiceEvent.removeAllListeners(Prefix + event);
this._listeners.delete(event);
}
/**
* @~english
* @brief Set or update meeting property
* @param name The property name.
* @param value The to be set. if value is null or length is 0, then the property will be removed from server.
* @return
* - OK: Success
* - others: Failure
* @~chinese
* @brief 设置或更属性
* @param name 属性名字。
* @param value 属性值。如果 value 为空,或者 length 为0,则此属性会被删除
* @return
* - OK: 调用成功
* - others: 调用失败
*/
setProperty(name, value) {
let str_value = value;
return RtcMessageService._callMethod('setProperty', {
name,
str_value
});
}
/**
* @~english
* @brief Send message to specified user.
* @param userId The user ID.
* @param message The message data in string format
* @return
* - ResultCode.OK: Success
* - others: Failure
* @note You can send messages at a maximum frequency of 150 calls every three seconds.
* The maximum data length is 4 KB.
* @~chinese
* @brief 发送消息给指定用户。
* @param userId 用户标识。
* @param message string类型消息数据
* @return
* - ResultCode.OK: 成功
* - 其他: 失败
* @note 发送消息的调用频率上限为每 3 秒 150 次。
* 请确保消息大小不超过 4 KB。
*/
sendMessage(message, userId) {
let str_message = message;
return RtcMessageService._callMethod('sendMessage', {
str_message,
userId
});
}
/**
* @~english
* @brief Broadcast message.
* @param message The message data in string format
* @param sendBack Send back flag
* @return
* - ResultCode.OK: Success
* - others: Failure
* @note You can send messages at a maximum frequency of 150 calls every three seconds.
* The maximum data length is 4 KB.
* @~chinese
* @brief 广播消息。
* @param message string类型消息数据
* @param sendBack 是否回发消息
* @return
* - ResultCode.OK: 成功
* - 其他: 失败
* @note 发送消息的调用频率上限为每 3 秒 150 次。
* 请确保消息大小不超过 4 KB。
*/
broadcastMessage(message, sendBack = true) {
let str_message = message;
return RtcMessageService._callMethod('broadcastMessage', {
str_message,
sendBack
});
}
/**
* @~english
* @brief Publish topic.
* @param topic The topic.
* @param data The topic data.
* @return
* - OK: Success
* - others: Failure
* @note You can send messages at a maximum frequency of 150 calls every 3 seconds.
* The maximum data length is 4 KB.
* @~chinese
* @brief 发布一个主题。
* @param topic 主题标识。
* @param data 主题数据。
* @return
* - OK: 成功
* - 其他: 失败
* @note 发送消息的调用频率上限为每 3 秒 150 次。
* 请确保二进制消息大小不超过 4 KB。
*/
publish(topic, data) {
let str_data = data;
return RtcMessageService._callMethod('publish', {
topic,
str_data
});
}
/**
* @~english
* @brief Subscribe topic.
* @param topic The topic.
* @return
* - OK: Success
* - others: Failure
* @~chinese
* @brief 订阅一个主题。
* @param topic 主题标识。
* @return
* - OK: 成功
* - 其他: 失败
*/
subscribe(topic) {
return RtcMessageService._callMethod('subscribe', {
topic
});
}
/**
* @~english
* @brief Unsubscribe topic.
* @param topic The topic.
* @return
* - OK: Success
* - others: Failure
* @~chinese
* @brief 取消订阅一个主题。
* @param topic 主题标识。
* @return
* - OK: 成功
* - 其他: 失败
*/
unsubscribe(topic) {
return RtcMessageService._callMethod('unsubscribe', {
topic
});
}
}
//# sourceMappingURL=RtcMessageService.native.js.map