Ejemplo n.º 1
0
        Task ISpectatorClient.UserBeganPlaying(int userId, SpectatorState state)
        {
            if (!playingUsers.Contains(userId))
            {
                playingUsers.Add(userId);
            }

            OnUserBeganPlaying?.Invoke(userId, state);

            return(Task.CompletedTask);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }