IdleGroupState.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using System.Threading;
  2. using MediaBrowser.Controller.Session;
  3. using MediaBrowser.Controller.SyncPlay.PlaybackRequests;
  4. using MediaBrowser.Model.SyncPlay;
  5. using Microsoft.Extensions.Logging;
  6. namespace MediaBrowser.Controller.SyncPlay.GroupStates
  7. {
  8. /// <summary>
  9. /// Class IdleGroupState.
  10. /// </summary>
  11. /// <remarks>
  12. /// Class is not thread-safe, external locking is required when accessing methods.
  13. /// </remarks>
  14. public class IdleGroupState : AbstractGroupState
  15. {
  16. /// <summary>
  17. /// The logger.
  18. /// </summary>
  19. private readonly ILogger<IdleGroupState> _logger;
  20. /// <summary>
  21. /// Initializes a new instance of the <see cref="IdleGroupState"/> class.
  22. /// </summary>
  23. /// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
  24. public IdleGroupState(ILoggerFactory loggerFactory)
  25. : base(loggerFactory)
  26. {
  27. _logger = LoggerFactory.CreateLogger<IdleGroupState>();
  28. }
  29. /// <inheritdoc />
  30. public override GroupStateType Type { get; } = GroupStateType.Idle;
  31. /// <inheritdoc />
  32. public override void SessionJoined(IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  33. {
  34. SendStopCommand(context, Type, session, cancellationToken);
  35. }
  36. /// <inheritdoc />
  37. public override void SessionLeaving(IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  38. {
  39. // Do nothing.
  40. }
  41. /// <inheritdoc />
  42. public override void HandleRequest(PlayGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  43. {
  44. // Change state.
  45. var waitingState = new WaitingGroupState(LoggerFactory);
  46. context.SetState(waitingState);
  47. waitingState.HandleRequest(request, context, Type, session, cancellationToken);
  48. }
  49. /// <inheritdoc />
  50. public override void HandleRequest(UnpauseGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  51. {
  52. // Change state.
  53. var waitingState = new WaitingGroupState(LoggerFactory);
  54. context.SetState(waitingState);
  55. waitingState.HandleRequest(request, context, Type, session, cancellationToken);
  56. }
  57. /// <inheritdoc />
  58. public override void HandleRequest(PauseGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  59. {
  60. SendStopCommand(context, prevState, session, cancellationToken);
  61. }
  62. /// <inheritdoc />
  63. public override void HandleRequest(StopGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  64. {
  65. SendStopCommand(context, prevState, session, cancellationToken);
  66. }
  67. /// <inheritdoc />
  68. public override void HandleRequest(SeekGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  69. {
  70. SendStopCommand(context, prevState, session, cancellationToken);
  71. }
  72. /// <inheritdoc />
  73. public override void HandleRequest(BufferGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  74. {
  75. SendStopCommand(context, prevState, session, cancellationToken);
  76. }
  77. /// <inheritdoc />
  78. public override void HandleRequest(ReadyGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  79. {
  80. SendStopCommand(context, prevState, session, cancellationToken);
  81. }
  82. /// <inheritdoc />
  83. public override void HandleRequest(NextItemGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  84. {
  85. // Change state.
  86. var waitingState = new WaitingGroupState(LoggerFactory);
  87. context.SetState(waitingState);
  88. waitingState.HandleRequest(request, context, Type, session, cancellationToken);
  89. }
  90. /// <inheritdoc />
  91. public override void HandleRequest(PreviousItemGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  92. {
  93. // Change state.
  94. var waitingState = new WaitingGroupState(LoggerFactory);
  95. context.SetState(waitingState);
  96. waitingState.HandleRequest(request, context, Type, session, cancellationToken);
  97. }
  98. private void SendStopCommand(IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
  99. {
  100. var command = context.NewSyncPlayCommand(SendCommandType.Stop);
  101. if (!prevState.Equals(Type))
  102. {
  103. context.SendCommand(session, SyncPlayBroadcastType.AllGroup, command, cancellationToken);
  104. }
  105. else
  106. {
  107. context.SendCommand(session, SyncPlayBroadcastType.CurrentSession, command, cancellationToken);
  108. }
  109. }
  110. }
  111. }