UNPKG

@sendbird/calls-react-native

Version:

Sendbird Calls SDK for React Native: Empower React Native apps with seamless audio, video, and group calling. Build interactive communication easily.

315 lines (248 loc) 12.8 kB
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 { Platform } from 'react-native'; import { ControllableModuleType, RouteChangeReason } from '../types'; import { Logger } from '../utils/logger'; import { CallsEvent, GroupCallEventType } from './NativeBinder'; import { LocalParticipant, Participant } from './Participant'; import { SendbirdError } from './SendbirdError'; export class Room { /** @internal **/ /** @internal **/ static poolRelease() { Room.pool = {}; } /** @internal **/ static get(binder, props) { if (!Room.pool[props.roomId]) Room.pool[props.roomId] = new Room(binder, props); const room = Room.pool[props.roomId]; return room._updateInternal(props); } constructor(binder, props) { var _this = this; _defineProperty(this, "_binder", void 0); _defineProperty(this, "_props", void 0); _defineProperty(this, "_localParticipant", void 0); _defineProperty(this, "_participants", void 0); _defineProperty(this, "_remoteParticipants", void 0); _defineProperty(this, "_internalEvents", { pool: [], emit: function (event) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } // @ts-ignore _this._internalEvents.pool.forEach(listener => { var _listener$event; return (_listener$event = listener[event]) === null || _listener$event === void 0 ? void 0 : _listener$event.call(listener, ...args); }); }, add: listener => { this._internalEvents.pool.push(listener); return () => { const index = this._internalEvents.pool.indexOf(listener); if (index > -1) delete this._internalEvents.pool[index]; }; } }); _defineProperty(this, "addListener", listener => { Logger.info('[GroupCall]', 'addListener', this.roomId); const unsubscribes = []; const disposeInternal = this._internalEvents.add(listener); const disposeNative = this._binder.addListener(CallsEvent.GROUP_CALL, _ref => { let { type, data, additionalData } = _ref; if (data.roomId !== this.roomId) return; Logger.info('[GroupCall]', 'receive events ', type, data.roomId, additionalData); this._updateInternal(data); switch (type) { case GroupCallEventType.ON_DELETED: { var _listener$onDeleted; (_listener$onDeleted = listener.onDeleted) === null || _listener$onDeleted === void 0 ? void 0 : _listener$onDeleted.call(listener); break; } case GroupCallEventType.ON_ERROR: { var _listener$onError; const error = new SendbirdError(additionalData === null || additionalData === void 0 ? void 0 : additionalData.errorMessage, additionalData === null || additionalData === void 0 ? void 0 : additionalData.errorCode); const participant = Participant.get(additionalData === null || additionalData === void 0 ? void 0 : additionalData.participant); (_listener$onError = listener.onError) === null || _listener$onError === void 0 ? void 0 : _listener$onError.call(listener, error, participant); break; } case GroupCallEventType.ON_LOCAL_PARTICIPANT_DISCONNECTED: { var _listener$onLocalPart; (_listener$onLocalPart = listener.onLocalParticipantDisconnected) === null || _listener$onLocalPart === void 0 ? void 0 : _listener$onLocalPart.call(listener, Participant.get(additionalData === null || additionalData === void 0 ? void 0 : additionalData.participant)); break; } case GroupCallEventType.ON_LOCAL_PARTICIPANT_RECONNECTED: { var _listener$onLocalPart2; (_listener$onLocalPart2 = listener.onLocalParticipantReconnected) === null || _listener$onLocalPart2 === void 0 ? void 0 : _listener$onLocalPart2.call(listener, Participant.get(additionalData === null || additionalData === void 0 ? void 0 : additionalData.participant)); break; } case GroupCallEventType.ON_REMOTE_PARTICIPANT_ENTERED: { var _listener$onRemotePar; (_listener$onRemotePar = listener.onRemoteParticipantEntered) === null || _listener$onRemotePar === void 0 ? void 0 : _listener$onRemotePar.call(listener, Participant.get(additionalData === null || additionalData === void 0 ? void 0 : additionalData.participant)); break; } case GroupCallEventType.ON_REMOTE_PARTICIPANT_EXITED: { var _listener$onRemotePar2; (_listener$onRemotePar2 = listener.onRemoteParticipantExited) === null || _listener$onRemotePar2 === void 0 ? void 0 : _listener$onRemotePar2.call(listener, Participant.get(additionalData === null || additionalData === void 0 ? void 0 : additionalData.participant)); break; } case GroupCallEventType.ON_REMOTE_PARTICIPANT_STREAM_STARTED: { var _listener$onRemotePar3; (_listener$onRemotePar3 = listener.onRemoteParticipantStreamStarted) === null || _listener$onRemotePar3 === void 0 ? void 0 : _listener$onRemotePar3.call(listener, Participant.get(additionalData === null || additionalData === void 0 ? void 0 : additionalData.participant)); break; } case GroupCallEventType.ON_AUDIO_DEVICE_CHANGED: { if (Platform.OS === 'android') { var _listener$onAudioDevi, _additionalData$curre, _additionalData$avail; (_listener$onAudioDevi = listener.onAudioDeviceChanged) === null || _listener$onAudioDevi === void 0 ? void 0 : _listener$onAudioDevi.call(listener, { platform: 'android', data: { currentAudioDevice: (_additionalData$curre = additionalData === null || additionalData === void 0 ? void 0 : additionalData.currentAudioDevice) !== null && _additionalData$curre !== void 0 ? _additionalData$curre : null, availableAudioDevices: (_additionalData$avail = additionalData === null || additionalData === void 0 ? void 0 : additionalData.availableAudioDevices) !== null && _additionalData$avail !== void 0 ? _additionalData$avail : [] } }); } if (Platform.OS === 'ios') { var _listener$onAudioDevi2, _additionalData$reaso, _additionalData$curre2, _additionalData$previ; (_listener$onAudioDevi2 = listener.onAudioDeviceChanged) === null || _listener$onAudioDevi2 === void 0 ? void 0 : _listener$onAudioDevi2.call(listener, { platform: 'ios', data: { reason: (_additionalData$reaso = additionalData === null || additionalData === void 0 ? void 0 : additionalData.reason) !== null && _additionalData$reaso !== void 0 ? _additionalData$reaso : RouteChangeReason.unknown, currentRoute: (_additionalData$curre2 = additionalData === null || additionalData === void 0 ? void 0 : additionalData.currentRoute) !== null && _additionalData$curre2 !== void 0 ? _additionalData$curre2 : { inputs: [], outputs: [] }, previousRoute: (_additionalData$previ = additionalData === null || additionalData === void 0 ? void 0 : additionalData.previousRoute) !== null && _additionalData$previ !== void 0 ? _additionalData$previ : { inputs: [], outputs: [] } } }); } break; } case GroupCallEventType.ON_REMOTE_VIDEO_SETTINGS_CHANGED: { var _listener$onRemoteVid; (_listener$onRemoteVid = listener.onRemoteVideoSettingsChanged) === null || _listener$onRemoteVid === void 0 ? void 0 : _listener$onRemoteVid.call(listener, Participant.get(additionalData === null || additionalData === void 0 ? void 0 : additionalData.participant)); break; } case GroupCallEventType.ON_REMOTE_AUDIO_SETTINGS_CHANGED: { var _listener$onRemoteAud; (_listener$onRemoteAud = listener.onRemoteAudioSettingsChanged) === null || _listener$onRemoteAud === void 0 ? void 0 : _listener$onRemoteAud.call(listener, Participant.get(additionalData === null || additionalData === void 0 ? void 0 : additionalData.participant)); break; } case GroupCallEventType.ON_CUSTOM_ITEMS_UPDATED: { var _listener$onCustomIte, _additionalData$updat; (_listener$onCustomIte = listener.onCustomItemsUpdated) === null || _listener$onCustomIte === void 0 ? void 0 : _listener$onCustomIte.call(listener, (_additionalData$updat = additionalData === null || additionalData === void 0 ? void 0 : additionalData.updatedKeys) !== null && _additionalData$updat !== void 0 ? _additionalData$updat : []); break; } case GroupCallEventType.ON_CUSTOM_ITEMS_DELETED: { var _listener$onCustomIte2, _additionalData$delet; (_listener$onCustomIte2 = listener.onCustomItemsDeleted) === null || _listener$onCustomIte2 === void 0 ? void 0 : _listener$onCustomIte2.call(listener, (_additionalData$delet = additionalData === null || additionalData === void 0 ? void 0 : additionalData.deletedKeys) !== null && _additionalData$delet !== void 0 ? _additionalData$delet : []); break; } } }); unsubscribes.push(disposeNative, disposeInternal); return () => unsubscribes.forEach(fn => fn()); }); _defineProperty(this, "enter", function () { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { audioEnabled: true, videoEnabled: true }; return _this._binder.nativeModule.enter(_this.roomId, options); }); _defineProperty(this, "android_selectAudioDevice", async device => { if (Platform.OS !== 'android') return; await this._binder.nativeModule.selectAudioDevice(ControllableModuleType.GROUP_CALL, this.roomId, device); }); this._binder = binder; this._props = props; this._localParticipant = null; this._participants = []; this._remoteParticipants = []; } _updateInternal(props) { this._localParticipant = LocalParticipant.get(props.localParticipant, this._binder, this._internalEvents, this.roomId); this._participants = props.participants.map(participant => Participant.get(participant)); this._remoteParticipants = props.remoteParticipants.map(remoteParticipant => Participant.get(remoteParticipant)); this._props = props; return this; } get roomId() { return this._props.roomId; } get state() { return this._props.state; } get type() { return this._props.type; } get customItems() { return this._props.customItems; } get participants() { return this._participants; } get localParticipant() { return this._localParticipant; } get remoteParticipants() { return this._remoteParticipants; } get android_availableAudioDevices() { return this._props.android_availableAudioDevices; } get android_currentAudioDevice() { return this._props.android_currentAudioDevice; } get createdAt() { return this._props.createdAt; } get createdBy() { return this._props.createdBy; } /** * Add GroupCall Room listener. * supports multiple listeners. * * @since 1.0.0 */ /** * Exit from the room * Will trigger {@link RoomListener.onRemoteParticipantExited} method of remote participants after successfully exiting the room. * If a remote participant exited the room, the local user will be notified via the same method. * * @since 1.0.0 */ exit() { this._binder.nativeModule.exit(this.roomId); } /** * Selects audio device * Changes current audio device asynchronously. * Will trigger {@link RoomListener.onAudioDeviceChanged} method of the local participant after successfully changing the audio device. * * @platform Android * @since 1.0.0 */ } _defineProperty(Room, "pool", {}); //# sourceMappingURL=Room.js.map