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); } }
internal PlayerSlotController(PlayerManager parent) { _playerManager = parent; PlayerManagerMessaging.SendPlayerManagerPlayerMessage(PlayerManagerMessaging.MessageType.PlayerSlotStarted, this); }