protected void NotifyResumeState(IPlayer player) { IResumablePlayer resumablePlayer = player as IResumablePlayer; if (resumablePlayer == null) { return; } // Get the current MediaItem ID at this time, later the PSC is already closed (in case of PlayerEnded state) and MediaItem information is lost. object oContext; if (!ContextVariables.TryGetValue(PlayerContext.KEY_PLAYER_CONTEXT, out oContext) || !(oContext is IPlayerContext)) { return; } IPlayerContext playerContext = (IPlayerContext)oContext; if (playerContext.CurrentMediaItem == null) { return; } IResumeState resumeState; if (resumablePlayer.GetResumeState(out resumeState)) { PlayerManagerMessaging.SendPlayerResumeStateMessage(this, playerContext.CurrentMediaItem.MediaItemId, resumeState); } }
internal void Close_NoLock() { lock (SyncObj) { if (_isClosed) { return; } } Reset(); InvokeSlotClosed_NoLock(); PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotClosed, this); }
public void Stop() { bool sendStopEvent; lock (SyncObj) { CheckActive(); IPlayer player = CurrentPlayer; sendStopEvent = player != null && player.State == PlayerState.Active; } // Simply discard the player - we'll send the PlayerStopped event later in this method ReleasePlayer_NoLock(); if (sendStopEvent) { // We need to simulate the PlayerStopped event, as the ReleasePlayer_NoLock() method discards all further player events PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerStopped, this); } }
protected void SetSlotState(PlayerSlotState slotState) { PlayerSlotState oldSlotState; lock (SyncObj) { if (slotState == _slotState) { return; } if (slotState == PlayerSlotState.Inactive) { _activationSequence++; } oldSlotState = _slotState; _slotState = slotState; } InvokeSlotStateChanged(slotState); // Outside the lock lock (SyncObj) { if (oldSlotState == PlayerSlotState.Inactive && slotState != PlayerSlotState.Inactive) { PlayerManagerMessaging.SendPlayerManagerPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotActivated); } if (oldSlotState != PlayerSlotState.Inactive || slotState != PlayerSlotState.Stopped) { // Suppress "PlayerStopped" message if slot was activated switch (slotState) { case PlayerSlotState.Inactive: PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotDeactivated, this); break; case PlayerSlotState.Playing: PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotStarted, this); break; // Presentation.Players.PlayerSlotState.Stopped: // this is no extra message, as we sent the PlayerSlotActivated message above } } } }
public void SwitchSlots() { lock (_syncObj) { if (!_slots[PlayerManagerConsts.SECONDARY_SLOT].IsActive) { // Don't move an inactive player slot to the primary slot index return; } PlayerSlotController tmp = _slots[PlayerManagerConsts.PRIMARY_SLOT]; _slots[PlayerManagerConsts.PRIMARY_SLOT] = _slots[PlayerManagerConsts.SECONDARY_SLOT]; _slots[PlayerManagerConsts.SECONDARY_SLOT] = tmp; for (int i = 0; i < 2; i++) { _slots[i].SlotIndex = i; } // Audio slot index changes automatically as it is stored in the slot instance itself PlayerManagerMessaging.SendPlayerManagerPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotsChanged); } }
public void Stop() { bool setStopped; lock (SyncObj) { CheckActive(); setStopped = _slotState != PlayerSlotState.Stopped; if (setStopped) { SetSlotState(PlayerSlotState.Stopped); } } // Simply discard the player - we'll send the PlayerStopped event later in this method ReleasePlayer_NoLock(); lock (SyncObj) if (setStopped) { // We need to simulate the PlayerStopped event, as the ReleasePlayer_NoLock() method discards all further player events PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerStopped, this); } }
protected void NotifyResumeState(IPlayer player) { IResumablePlayer resumablePlayer = player as IResumablePlayer; if (resumablePlayer == null) { return; } // Get the current MediaItem ID at this time, later the PSC is already closed (in case of PlayerEnded state) and MediaItem information is lost. object oContext; if (!ContextVariables.TryGetValue(PlayerContext.KEY_PLAYER_CONTEXT, out oContext) || !(oContext is IPlayerContext)) { return; } IPlayerContext playerContext = (IPlayerContext)oContext; if (playerContext.CurrentMediaItem == null) { return; } try { IResumeState resumeState; if (resumablePlayer.GetResumeState(out resumeState)) { PlayerManagerMessaging.SendPlayerResumeStateMessage(this, playerContext.CurrentMediaItem, resumeState); } } catch (Exception e) { ServiceRegistration.Get <ILogger>().Warn("PlayerSlotController: Error getting resume state from player '{0}'", e, resumablePlayer); } }
internal PlayerSlotController(PlayerManager parent) { _playerManager = parent; PlayerManagerMessaging.SendPlayerManagerPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotStarted, this); }
internal void OnNextItemRequest(IPlayer player) { PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.RequestNextItem, this); }
internal void OnPlaybackError(IPlayer player) { PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerError, this); }
internal void OnPlaybackStateChanged(IPlayer player) { PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlaybackStateChanged, this); }
internal void OnPlayerEnded(IPlayer player) { PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerEnded, this); }
internal void OnPlayerStateReady(IPlayer player) { PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerStateReady, this); }
internal void OnPlayerStopped(IPlayer player) { PlayerManagerMessaging.SendPlayerStoppedMessage(_stopPosition, this); }