UNPKG

reldens

Version:
85 lines (78 loc) 3.25 kB
/** * * Reldens - Audio Server Plugin * * Initializes and manages the audio system on the server side. * */ const { PluginInterface } = require('../../features/plugin-interface'); const { AudioManager } = require('./manager'); const { AudioConst } = require('../constants'); const { Logger, sc } = require('@reldens/utils'); /** * @typedef {import('@reldens/utils').EventsManagerSingleton} EventsManagerSingleton */ class AudioPlugin extends PluginInterface { constructor() { super(); /** @type {AudioManager|boolean} */ this.audioManager = false; } /** * @param {Object} props * @param {EventsManagerSingleton} [props.events] * @param {Object} [props.dataServer] */ setup(props) { this.events = sc.get(props, 'events', false); if(!this.events){ Logger.error('EventsManager undefined in AudioPlugin.'); } this.dataServer = sc.get(props, 'dataServer', false); if(!this.dataServer){ Logger.error('DataServer undefined in AudioPlugin.'); } this.events.on('reldens.serverBeforeDefineRooms', async (props) => { this.audioManager = new AudioManager({ roomsManager: props.serverManager.roomsManager, dataServer: this.dataServer }); await this.audioManager.loadAudioCategories(); await this.audioManager.loadGlobalAudios(); props.serverManager.audioManager = this.audioManager; }); this.events.on('reldens.defineRoomsInGameServerDone', async (roomsManager) => { let definedRoomsNames = Object.keys(roomsManager.definedRooms); if(definedRoomsNames.length){ for(let roomName of definedRoomsNames){ let definedRoomData = roomsManager.definedRooms[roomName]; if(!definedRoomData.roomProps.roomData || !definedRoomData.roomProps.roomData.roomId){ continue; } await this.audioManager.loadRoomAudios(definedRoomData.roomProps.roomData.roomId); } } }); this.events.on('reldens.beforeSuperInitialGameData', (superInitialGameData) => { superInitialGameData.audio = {globalAudios: this.audioManager.globalAudios}; }); this.events.on('reldens.createPlayerAfter', async (client, userModel, currentPlayer, roomScene) => { let playerConfig = await this.audioManager.loadAudioPlayerConfig(currentPlayer.player_id); let data = { act: AudioConst.AUDIO_UPDATE, roomId: roomScene.roomData.roomId, audios: this.audioManager.roomsAudios[roomScene.roomData.roomId], categories: this.audioManager.categories, playerConfig: playerConfig }; client.send('*', data); }); this.events.on('reldens.roomsMessageActionsGlobal', (roomMessageActions) => { roomMessageActions.audio = this.audioManager; }); } } module.exports.AudioPlugin = AudioPlugin;