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);
            }
        }
Beispiel #2
0
 internal void Close_NoLock()
 {
     lock (SyncObj)
     {
         if (_isClosed)
         {
             return;
         }
     }
     Reset();
     InvokeSlotClosed_NoLock();
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotClosed, this);
 }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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
                    }
                }
            }
        }
Beispiel #5
0
 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);
     }
 }
Beispiel #6
0
        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);
                }
        }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
0
 internal PlayerSlotController(PlayerManager parent)
 {
     _playerManager = parent;
     PlayerManagerMessaging.SendPlayerManagerPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotStarted, this);
 }
Beispiel #9
0
 internal void OnNextItemRequest(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.RequestNextItem, this);
 }
Beispiel #10
0
 internal void OnPlaybackError(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerError, this);
 }
Beispiel #11
0
 internal void OnPlaybackStateChanged(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlaybackStateChanged, this);
 }
Beispiel #12
0
 internal void OnPlayerEnded(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerEnded, this);
 }
Beispiel #13
0
 internal void OnPlayerStateReady(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerStateReady, this);
 }
Beispiel #14
0
 internal void OnPlayerStopped(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerStoppedMessage(_stopPosition, this);
 }