Task ISpectatorClient.UserBeganPlaying(int userId, SpectatorState state) { if (!playingUsers.Contains(userId)) { playingUsers.Add(userId); } OnUserBeganPlaying?.Invoke(userId, state); return(Task.CompletedTask); }
Task ISpectatorClient.UserBeganPlaying(int userId, SpectatorState state) { Schedule(() => { if (!playingUsers.Contains(userId)) { playingUsers.Add(userId); } if (watchedUsers.Contains(userId)) { watchedUserStates[userId] = state; } OnUserBeganPlaying?.Invoke(userId, state); }); return(Task.CompletedTask); }
Task ISpectatorClient.UserBeganPlaying(int userId, SpectatorState state) { Schedule(() => { if (!playingUsers.Contains(userId)) { playingUsers.Add(userId); } // UserBeganPlaying() is called by the server regardless of whether the local user is watching the remote user, and is called a further time when the remote user is watched. // This may be a temporary thing (see: https://github.com/ppy/osu-server-spectator/blob/2273778e02cfdb4a9c6a934f2a46a8459cb5d29c/osu.Server.Spectator/Hubs/SpectatorHub.cs#L28-L29). // We don't want the user states to update unless the player is being watched, otherwise calling BindUserBeganPlaying() can lead to double invocations. if (watchingUsers.Contains(userId)) { playingUserStates[userId] = state; } OnUserBeganPlaying?.Invoke(userId, state); }); return(Task.CompletedTask); }