UNPKG

rn-verto-typescript

Version:

Verto Free Switch with React Native Type Script

132 lines (131 loc) 5.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const CallActions_enum_1 = require("../enums/CallActions.enum"); let gSerialNumber = 0; class ConferenceManager { constructor(verto, subscriptions) { this.verto = verto; this.subscriptions = { info: { channel: null, handler: null, }, chat: { channel: null, handler: null, }, mod: { channel: null, handler: null, }, ...subscriptions, }; this.serno = gSerialNumber; gSerialNumber += 1; Object.keys(this.subscriptions).forEach((key) => { const { channel, handler } = this.subscriptions[key] || {}; if (channel && handler) { this.verto.subscribe(channel, { handler }); } }); this.destroyed = false; } destroy() { Object.keys(this.subscriptions).forEach((key) => { const { channel } = this.subscriptions[key] || {}; if (channel) { this.verto.unsubscribe(channel); } }); this.destroyed = true; } broadcast(eventChannel, data) { if (this.destroyed) { console.log('Tried to broadcast from destroyed conference manager.'); return; } if (!eventChannel) { return; } this.verto.publish(CallActions_enum_1.CallActions.Broadcast, { eventChannel, data }); } // TODO type argument is ambigious broadcastModeratorCommand(command, memberId, argument) { this.broadcast(this.subscriptions.mod.channel, { command, id: memberId && parseInt(memberId, 10), value: argument, application: 'conf-control', }); } // TODO type argument is ambigious broadcastRoomCommand(command, ...argument) { this.broadcastModeratorCommand(command, null, argument); } broadcastChatMessage(text) { this.broadcast(this.subscriptions.chat.channel, { message: text, action: 'send', type: 'message', }); } askVideoLayouts() { this.broadcastRoomCommand('list-videoLayouts'); } playMediaFileFromServer(filename) { this.broadcastRoomCommand('play', filename); } stopMediaFilesFromServer() { this.broadcastRoomCommand('stop', 'all'); } startRecordingOnServer(filename) { this.broadcastRoomCommand('recording', 'start', filename); } stopRecordingsOnServer() { this.broadcastRoomCommand('recording', 'stop', 'all'); } saveSnapshotOnServer(filename) { this.broadcastRoomCommand('vid-write-png', filename); } changeVideoLayout(layout, canvas) { this.broadcastRoomCommand('vid-layout', canvas ? [layout, canvas] : layout); } // TODO add return type moderateMemberById(memberId) { const constantBroadcasterFor = (command) => (argument) => () => { this.broadcastModeratorCommand(command, memberId, [argument]); }; const parameterizedBroadcasterFor = (command) => (argument) => { this.broadcastModeratorCommand(command, memberId, [argument]); }; const parameterizedBroadcasterForSettingVideoBanner = () => (text) => { this.broadcastModeratorCommand('vid-banner', memberId, ['reset']); if (text.trim().toLowerCase() === 'reset') { this.broadcastModeratorCommand('vid-banner', memberId, [`${text}\n`]); } else { this.broadcastModeratorCommand('vid-banner', memberId, [text]); } }; const constantBroadcasterForCleaningVideoBanner = () => () => { this.broadcastModeratorCommand('vid-banner', memberId, ['reset']); }; return { toBeNotDeaf: constantBroadcasterFor('undeaf')(null), toBeDeaf: constantBroadcasterFor('deaf')(null), toBeKickedOut: constantBroadcasterFor('kick')(null), toToggleMicrophone: constantBroadcasterFor('tmute')(null), toToggleCamera: constantBroadcasterFor('tvmute')(null), toBePresenter: constantBroadcasterFor('vid-res-id')('presenter'), toBeVideoFloor: constantBroadcasterFor('vid-floor')('force'), toHaveVideoBannerAs: parameterizedBroadcasterForSettingVideoBanner(), toCleanVideoBanner: constantBroadcasterForCleaningVideoBanner(), toIncreaseVolumeOutput: constantBroadcasterFor('volume_out')('up'), toDecreaseVolumeOutput: constantBroadcasterFor('volume_out')('down'), toIncreaseVolumeInput: constantBroadcasterFor('volume_in')('up'), toDecreaseVolumeInput: constantBroadcasterFor('volume_in')('down'), toTransferTo: parameterizedBroadcasterFor('transfer'), }; } } exports.default = ConferenceManager;