@pano.video/panortc-react-native-sdk
Version:
PanoRtc SDK For React Native
158 lines (131 loc) • 4.38 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
*/
PanoRtcNetworkManagerModule
} = NativeModules;
/**
* @ignore
*/
const Prefix = PanoRtcNetworkManagerModule.prefix;
/**
* @ignore
*/
const RtcNetworkManagerEvent = new NativeEventEmitter(PanoRtcNetworkManagerModule);
/**
* The {@link RtcNetworkManager} class.
*/
export default class RtcNetworkManager {
constructor() {
_defineProperty(this, "_listeners", new Map());
}
/**
* @ignore
*/
static _callMethod(method, args) {
return PanoRtcNetworkManagerModule.callMethod(method, args);
}
destroy() {
this.removeAllListeners();
}
/**
* Adds the [`RtcNetworkManagerHandler`]{@link RtcNetworkManagerHandler} handler.
*
* After setting the [`RtcNetworkManagerHandler`]{@link RtcNetworkManagerHandler} handler, you can listen for `RtcNetworkManager` events and receive the statistics of the corresponding RtcNetworkManager instance.
* @param event The event type.
* @param listener The [`RtcNetworkManagerHandler`]{@link RtcNetworkManagerHandler} 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);
}
RtcNetworkManagerEvent.addListener(Prefix + event, callback);
map.set(listener, callback);
return {
remove: () => {
this.removeListener(event, listener);
}
};
}
/**
* Removes the [`RtcNetworkManagerHandler`]{@link RtcNetworkManagerHandler} handler.
*
* For callback events that you only want to listen for once, call this method to remove the specific [`RtcNetworkManagerHandler`]{@link RtcNetworkManagerHandler} objects after you have received them.
* @param event The event type.
* @param listener The [`RtcNetworkManagerHandler`]{@link RtcNetworkManagerHandler} handler.
*/
removeListener(event, listener) {
const map = this._listeners.get(event);
if (map === undefined) return;
RtcNetworkManagerEvent.removeListener(Prefix + event, map.get(listener));
map.delete(listener);
}
/**
* Removes all the [`RtcNetworkManagerHandler`]{@link RtcNetworkManagerHandler} handlers.
* @param event The event type.
*/
removeAllListeners(event) {
if (event === undefined) {
this._listeners.forEach((_, key) => {
RtcNetworkManagerEvent.removeAllListeners(Prefix + key);
});
this._listeners.clear();
return;
}
RtcNetworkManagerEvent.removeAllListeners(Prefix + event);
this._listeners.delete(event);
}
/**
* @~english
* @brief Start network test.
* @param token The secure token that App Server got from PANO.
* NOTE: don't use the token which is used for joining channel.
* @param delegate Callback for test result, must be valid until stopNetworkTest called.
* @return
* - ResultCode.OK: Success
* - others: Failure
* @note The network test will consume additional bandwidth, please avoid doing network test in call.
* @~chinese
* @brief 启动网络测试。
* @param token App服务器向PANO获取的token。注意:不要使用加入频道时使用的 token。
* @param delegate 测试结果回调,在调用 stopNetworkTest 之前必须保持有效。
* @return
* - ResultCode.OK: 成功
* - 其他: 失败
* @note 网络测试会产生额外流量,尽量避免在通话过程中进行测试。
*/
startNetworkTest(token) {
return RtcNetworkManager._callMethod('startNetworkTest', {
token
});
}
/**
* @~english
* @brief Stop network test.
* @return
* - ResultCode.OK: Success
* - others: Failure
* @~chinese
* @brief 停止网络测试。
* @return
* - ResultCode.OK: 成功
* - 其他: 失败
*/
stopNetworkTest() {
return RtcNetworkManager._callMethod('stopNetworkTest');
}
}
/**
* @ignore
*/
//# sourceMappingURL=RtcNetworkManager.native.js.map