@pano.video/panortc-react-native-sdk
Version:
PanoRtc SDK For React Native
201 lines (157 loc) • 5.19 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _reactNative = require("react-native");
var _RtcAnnotation = _interopRequireDefault(require("./RtcAnnotation.native"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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; }
const {
/**
* @ignore
*/
PanoRtcAnnotationManagerModule
} = _reactNative.NativeModules;
/**
* @ignore
*/
const Prefix = PanoRtcAnnotationManagerModule.prefix;
/**
* @ignore
*/
const RtcAnnotationManagerEvent = new _reactNative.NativeEventEmitter(PanoRtcAnnotationManagerModule);
/**
* The {@link RtcAnnotationManager} class.
*/
class RtcAnnotationManager {
constructor() {
_defineProperty(this, "_annotations", new Map());
_defineProperty(this, "_listeners", new Map());
}
/**
* @ignore
*/
static _callMethod(method, args) {
return PanoRtcAnnotationManagerModule.callMethod(method, args);
}
destroy() {
this._annotations.forEach(value => {
value.destroy();
});
this.removeAllListeners();
}
/**
* Adds the [`RtcAnnotationManagerEventHandler`]{@link RtcAnnotationManagerEventHandler} handler.
*
* After setting the [`RtcAnnotationManagerEventHandler`]{@link RtcAnnotationManagerEventHandler} handler, you can listen for `RtcAnnotationManager` events and receive the statistics of the corresponding RtcAnnotationManager instance.
* @param event The event type.
* @param listener The [`RtcAnnotationManagerEventHandler`]{@link RtcAnnotationManagerEventHandler} 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);
}
RtcAnnotationManagerEvent.addListener(Prefix + event, callback);
map.set(listener, callback);
return {
remove: () => {
this.removeListener(event, listener);
}
};
}
/**
* Removes the [`RtcAnnotationManagerEventHandler`]{@link RtcAnnotationManagerEventHandler} handler.
*
* For callback events that you only want to listen for once, call this method to remove the specific [`RtcAnnotationManagerEventHandler`]{@link RtcAnnotationManagerEventHandler} objects after you have received them.
* @param event The event type.
* @param listener The [`RtcAnnotationManagerEventHandler`]{@link RtcAnnotationManagerEventHandler} handler.
*/
removeListener(event, listener) {
const map = this._listeners.get(event);
if (map === undefined) return;
RtcAnnotationManagerEvent.removeListener(Prefix + event, map.get(listener));
map.delete(listener);
}
/**
* Removes all the [`RtcAnnotationManagerEventHandler`]{@link RtcAnnotationManagerEventHandler} handlers.
* @param event The event type.
*/
removeAllListeners(event) {
if (event === undefined) {
this._listeners.forEach((_, key) => {
RtcAnnotationManagerEvent.removeAllListeners(Prefix + key);
});
this._listeners.clear();
return;
}
RtcAnnotationManagerEvent.removeAllListeners(Prefix + event);
this._listeners.delete(event);
}
/**
* @~english
* @brief Get video annotation object.
* @param userId User ID
* @param streamId Stream ID
* @return
* - PanoRtcAnnotation object
* @~chinese
* @brief 获取视频标注对象
* @param userId 用户ID
* @param streamId 视频流ID
* @return
* - 视频标注对象
*/
async getVideoAnnotation(userId, streamId) {
let annotationId = await RtcAnnotationManager._callMethod('getVideoAnnotation', {
userId,
streamId
});
if (typeof annotationId == 'string') {
if (this._annotations.get(annotationId)) {
return this._annotations.get(annotationId);
}
this._annotations.set(annotationId, new _RtcAnnotation.default(annotationId));
return this._annotations.get(annotationId);
}
return undefined;
}
/**
* @~english
* @brief Get share annotation object.
* @param userId User ID
* @return
* - PanoRtcAnnotation object
* @~chinese
* @brief 获取共享标注对象
* @param userId 用户ID
* @return
* - 共享标注对象
*/
async getShareAnnotation(userId) {
let annotationId = await RtcAnnotationManager._callMethod('getShareAnnotation', {
userId
});
if (typeof annotationId == 'string') {
if (this._annotations.get(annotationId)) {
return this._annotations.get(annotationId);
}
this._annotations.set(annotationId, new _RtcAnnotation.default(annotationId));
return this._annotations.get(annotationId);
}
return undefined;
}
}
/**
* @ignore
*/
exports.default = RtcAnnotationManager;
//# sourceMappingURL=RtcAnnotationManager.native.js.map