Fix multiplayer room participants display not updating as new users join/leave

Can add tests on request, but not sure the code around this area is here
to stay permanently. Should be pretty low risk.

- Closes https://github.com/ppy/osu/issues/14788.
This commit is contained in:
Dean Herbert 2021-11-02 16:36:28 +09:00
parent e472656b37
commit b0bd39fc49

View File

@ -148,6 +148,10 @@ namespace osu.Game.Online.Multiplayer
{
Room = joinedRoom;
APIRoom = room;
Debug.Assert(LocalUser != null);
addUserToAPIRoom(LocalUser);
foreach (var user in joinedRoom.Users)
updateUserPlayingState(user.UserID, user.State);
@ -372,6 +376,8 @@ namespace osu.Game.Online.Multiplayer
Room.Users.Add(user);
addUserToAPIRoom(user);
UserJoined?.Invoke(user);
RoomUpdated?.Invoke();
});
@ -391,6 +397,14 @@ namespace osu.Game.Online.Multiplayer
return handleUserLeft(user, UserKicked);
}
private void addUserToAPIRoom(MultiplayerRoomUser user)
{
Debug.Assert(APIRoom != null);
APIRoom.RecentParticipants.Add(user.User);
APIRoom.ParticipantCount.Value++;
}
private Task handleUserLeft(MultiplayerRoomUser user, Action<MultiplayerRoomUser>? callback)
{
if (Room == null)
@ -404,6 +418,10 @@ namespace osu.Game.Online.Multiplayer
Room.Users.Remove(user);
PlayingUserIds.Remove(user.UserID);
Debug.Assert(APIRoom != null);
APIRoom.RecentParticipants.RemoveAll(u => u.Id == user.UserID);
APIRoom.ParticipantCount.Value--;
callback?.Invoke(user);
RoomUpdated?.Invoke();
}, false);