import { getLogger, EventManager } from '@playkit-js/playkit-js'; import { KalturaPlayer } from '../kaltura-player'; /** * @class ServiceProvider */ class ServiceProvider { private static _logger: any; private _servicesRegistry: Map = new Map(); private _eventManager: EventManager; /** * @constructor * @param {KalturaPlayer} player - The player. */ constructor(player: KalturaPlayer) { ServiceProvider._logger = getLogger('ServiceProvider'); this._eventManager = new EventManager(); this._eventManager.listen(player, player.Event.Core.PLAYER_RESET, () => this.reset()); } /** * @param {string} name - the service name * @param {Object} service - the service object * @returns {void} */ public register(name: string, service: any): void { if (this._servicesRegistry.has(name)) { ServiceProvider._logger.debug(`${name} service already exists`); } else { this._servicesRegistry.set(name, service); ServiceProvider._logger.debug(`${name} service registered`); } } /** * * @param {string} name - the service name * @returns {Object} - the service object */ public get(name: string): any | void { return this._servicesRegistry.get(name); } /** * * @param {string} name - the service name * @returns {boolean} - if the service exist */ public has(name: string): boolean { return this._servicesRegistry.has(name); } /** * @returns {void} */ public reset(): void { this._servicesRegistry.forEach((service) => typeof service.reset === 'function' && service.reset()); } /** * @returns {void} */ public destroy(): void { this._servicesRegistry.forEach((service) => typeof service.destroy === 'function' && service.destroy()); this._eventManager.removeAll(); this._servicesRegistry.clear(); } } export { ServiceProvider };