Merge branch 'thread-safe-spectator-client' into fix-spectator-playing-state-5

This commit is contained in:
smoogipoo 2021-05-20 19:46:26 +09:00
commit e3284b976d
2 changed files with 10 additions and 6 deletions

View File

@ -182,10 +182,14 @@ namespace osu.Game.Online.Spectator
public void StopWatchingUser(int userId)
{
watchingUsers.Remove(userId);
playingUserStates.Remove(userId);
StopWatchingUserInternal(userId);
// This method is most commonly called via Dispose(), which is asynchronous.
// Todo: This should not be a thing, but requires framework changes.
Schedule(() =>
{
watchingUsers.Remove(userId);
playingUserStates.Remove(userId);
StopWatchingUserInternal(userId);
});
}
protected abstract Task BeginPlayingInternal(SpectatorState state);

View File

@ -55,8 +55,6 @@ namespace osu.Game.Screens.Play.HUD
foreach (var userId in playingUsers)
{
spectatorClient.WatchUser(userId);
// probably won't be required in the final implementation.
var resolvedUser = userLookupCache.GetUserAsync(userId).Result;
@ -80,6 +78,8 @@ namespace osu.Game.Screens.Play.HUD
// BindableList handles binding in a really bad way (Clear then AddRange) so we need to do this manually..
foreach (int userId in playingUsers)
{
spectatorClient.WatchUser(userId);
if (!multiplayerClient.CurrentMatchPlayingUserIds.Contains(userId))
usersChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, new[] { userId }));
}