UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

91 lines (75 loc) 2.52 kB
import { PlayerAnalyticsTracker, PlayerAnalyticsTrackerI, } from "./playerAnalyticsTracker"; import { PlayerLifecycleListener, PlayerManager, } from "../appUtils/playerManager"; import { Player } from "../appUtils/playerManager/player"; import { AnalyticPlayerListener } from "./AnalyticPlayerListener"; import { PlayerRole } from "../appUtils/playerManager/conts"; enum PlayerAnalyticsTrackerType { PlayerAnalyticsTracker = "PlayerAnalyticsTracker", } class PlayerAnalyticsTrackerFactory { createTracker(type: PlayerAnalyticsTrackerType) { switch (type) { case PlayerAnalyticsTrackerType.PlayerAnalyticsTracker: return new PlayerAnalyticsTracker(); default: return new PlayerAnalyticsTracker(); } } } export class PlayerAnalyticsManager implements PlayerLifecycleListener { static instance: PlayerAnalyticsManager; private trackers: Record<string, PlayerAnalyticsTrackerI> = {}; private trackerFactory: PlayerAnalyticsTrackerFactory; public getTracker( id: string, type: PlayerAnalyticsTrackerType = PlayerAnalyticsTrackerType.PlayerAnalyticsTracker ): PlayerAnalyticsTrackerI { if (!this.trackers[id]) { this.trackers[id] = this.trackerFactory.createTracker(type); } return this.trackers[id]; } constructor(trackerFactory: PlayerAnalyticsTrackerFactory) { this.trackerFactory = trackerFactory; this.startListenPlayerManager(); } static getInstance( trackerFactory: PlayerAnalyticsTrackerFactory = new PlayerAnalyticsTrackerFactory() ): PlayerAnalyticsManager { if (!PlayerAnalyticsManager.instance) { PlayerAnalyticsManager.instance = new PlayerAnalyticsManager( trackerFactory ); } return PlayerAnalyticsManager.instance; } private startListenPlayerManager() { PlayerManager.getInstance().addLifecycleListener(this); } // PlayerLifecycleListener onRegistered = (player: Player) => { if (player.playerRole !== PlayerRole.Primary) { return; } const tracker = this.getTracker(player.playerId); tracker.setPlayer(player); const analyticsListener = new AnalyticPlayerListener({ analyticsTracker: tracker, player, }); player.addListener({ id: AnalyticPlayerListener.analyticsListenerID, listener: analyticsListener, }); }; onUnRegistered = (player: Player) => { player.removeListener(AnalyticPlayerListener.analyticsListenerID); delete this.trackers[player.playerId]; }; }