コード例 #1
0
 internal void Close_NoLock()
 {
     lock (SyncObj)
     {
         if (_isClosed)
         {
             return;
         }
     }
     Reset();
     InvokeSlotClosed_NoLock();
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotClosed, this);
 }
コード例 #2
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);
            }
        }
コード例 #3
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
                    }
                }
            }
        }
コード例 #4
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);
                }
        }
コード例 #5
0
 internal void OnNextItemRequest(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.RequestNextItem, this);
 }
コード例 #6
0
 internal void OnPlaybackError(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerError, this);
 }
コード例 #7
0
 internal void OnPlaybackStateChanged(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlaybackStateChanged, this);
 }
コード例 #8
0
 internal void OnPlayerEnded(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerEnded, this);
 }
コード例 #9
0
 internal void OnPlayerStateReady(IPlayer player)
 {
     PlayerManagerMessaging.SendPlayerMessage(PlayerManagerMessaging.MessageType.PlayerStateReady, this);
 }