diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs index 533e535bc6..8c03de8c13 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs @@ -43,6 +43,8 @@ namespace osu.Game.Tests.Visual.Gameplay private OsuFramedReplayInputHandler replayHandler => (OsuFramedReplayInputHandler)Stack.ChildrenOfType().First().ReplayInputHandler; + private Player player => Stack.CurrentScreen as Player; + [Test] public void TestBasicSpectatingFlow() { @@ -53,6 +55,9 @@ namespace osu.Game.Tests.Visual.Gameplay AddUntilStep("wait for player", () => Stack.CurrentScreen is Player); AddAssert("ensure frames arrived", () => replayHandler.HasFrames); + + AddUntilStep("wait for frame starvation", () => replayHandler.NextFrame == null); + AddAssert("game is paused", () => !player.ChildrenOfType().First().GameplayClock.IsRunning); } [Test] @@ -127,14 +132,7 @@ namespace osu.Game.Tests.Visual.Gameplay public readonly User StreamingUser = new User { Id = 1234, Username = "Test user" }; - public void StartPlay() - { - ((ISpectatorClient)this).UserBeganPlaying((int)StreamingUser.Id, new SpectatorState - { - BeatmapID = beatmaps.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID == 0).OnlineBeatmapID, - RulesetID = 0, - }); - } + public void StartPlay() => sendState(); public void EndPlay() { @@ -153,6 +151,23 @@ namespace osu.Game.Tests.Visual.Gameplay new LegacyReplayFrame(0, 0, 0, ReplayButtonState.Left1) })); } + + public override void WatchUser(int userId) + { + // usually the server would do this. + sendState(); + + base.WatchUser(userId); + } + + private void sendState() + { + ((ISpectatorClient)this).UserBeganPlaying((int)StreamingUser.Id, new SpectatorState + { + BeatmapID = beatmaps.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID == 0).OnlineBeatmapID, + RulesetID = 0, + }); + } } } } diff --git a/osu.Game/Online/Spectator/SpectatorStreamingClient.cs b/osu.Game/Online/Spectator/SpectatorStreamingClient.cs index 9e554d1d43..481c94e6f3 100644 --- a/osu.Game/Online/Spectator/SpectatorStreamingClient.cs +++ b/osu.Game/Online/Spectator/SpectatorStreamingClient.cs @@ -227,7 +227,7 @@ namespace osu.Game.Online.Spectator connection.SendAsync(nameof(ISpectatorServer.EndPlaySession), currentState); } - public void WatchUser(int userId) + public virtual void WatchUser(int userId) { if (watchingUsers.Contains(userId)) return;