1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-13 17:13:06 +08:00

Update transfer host logic and simplify local user checks

This commit is contained in:
Dean Herbert 2022-04-13 20:38:39 +09:00
parent 0a5a3415f8
commit 331242d585

View File

@ -231,14 +231,13 @@ namespace osu.Game.Tests.Visual.Multiplayer
{
AddStep("add second user as host", () =>
{
addUser(new APIUser { Id = 2, Username = "Another user" });
multiplayerClient.Object.TransferHost(2);
addUser(new APIUser { Id = 2, Username = "Another user" }, true);
});
AddStep("start countdown", () => multiplayerClient.Object.SendMatchRequest(new StartMatchCountdownRequest { Duration = TimeSpan.FromMinutes(1) }).WaitSafely());
AddUntilStep("countdown started", () => multiplayerClient.Object.Room?.Countdown != null);
AddStep("transfer host to local user", () => multiplayerClient.Object.TransferHost(API.LocalUser.Value.OnlineID));
AddStep("transfer host to local user", () => transferHost(localUser));
AddUntilStep("local user is host", () => multiplayerClient.Object.Room?.Host?.Equals(multiplayerClient.Object.LocalUser) == true);
ClickButtonWhenEnabled<MultiplayerReadyButton>();
@ -293,15 +292,14 @@ namespace osu.Game.Tests.Visual.Multiplayer
{
AddStep("add second user as host", () =>
{
addUser(new APIUser { Id = 2, Username = "Another user" });
multiplayerClient.Object.TransferHost(2);
addUser(new APIUser { Id = 2, Username = "Another user" }, true);
});
ClickButtonWhenEnabled<MultiplayerReadyButton>();
AddUntilStep("user is ready", () => multiplayerClient.Object.Room?.Users[0].State == MultiplayerUserState.Ready);
AddUntilStep("user is ready", () => localUser.State == MultiplayerUserState.Ready);
ClickButtonWhenEnabled<MultiplayerReadyButton>();
AddUntilStep("user is idle", () => multiplayerClient.Object.Room?.Users[0].State == MultiplayerUserState.Idle);
AddUntilStep("user is idle", () => localUser.State == MultiplayerUserState.Idle);
}
[TestCase(true)]
@ -310,14 +308,14 @@ namespace osu.Game.Tests.Visual.Multiplayer
{
AddStep("setup", () =>
{
multiplayerClient.Object.TransferHost(multiplayerClient.Object.Room?.Users[0].UserID ?? 0);
transferHost(multiplayerRoom.Users[0]);
if (!allReady)
addUser(new APIUser { Id = 2, Username = "Another user" });
});
ClickButtonWhenEnabled<MultiplayerReadyButton>();
AddUntilStep("user is ready", () => multiplayerClient.Object.Room?.Users[0].State == MultiplayerUserState.Ready);
AddUntilStep("user is ready", () => localUser.State == MultiplayerUserState.Ready);
verifyGameplayStartFlow();
}
@ -327,12 +325,12 @@ namespace osu.Game.Tests.Visual.Multiplayer
{
AddStep("add host", () =>
{
addUser(new APIUser { Id = 2, Username = "Another user" });
multiplayerClient.Object.TransferHost(2);
addUser(new APIUser { Id = 2, Username = "Another user" }, true);
});
ClickButtonWhenEnabled<MultiplayerReadyButton>();
AddStep("make user host", () => multiplayerClient.Object.TransferHost(multiplayerClient.Object.Room?.Users[0].UserID ?? 0));
AddStep("make user host", () => transferHost(localUser));
verifyGameplayStartFlow();
}
@ -342,17 +340,16 @@ namespace osu.Game.Tests.Visual.Multiplayer
{
AddStep("setup", () =>
{
multiplayerClient.Object.TransferHost(multiplayerClient.Object.Room?.Users[0].UserID ?? 0);
addUser(new APIUser { Id = 2, Username = "Another user" });
});
ClickButtonWhenEnabled<MultiplayerReadyButton>();
AddUntilStep("user is ready", () => multiplayerClient.Object.Room?.Users[0].State == MultiplayerUserState.Ready);
AddUntilStep("user is ready", () => localUser.State == MultiplayerUserState.Ready);
AddStep("transfer host", () => multiplayerClient.Object.TransferHost(multiplayerClient.Object.Room?.Users[1].UserID ?? 0));
AddStep("transfer host", () => transferHost(multiplayerRoom.Users[1]));
ClickButtonWhenEnabled<MultiplayerReadyButton>();
AddUntilStep("user is idle (match not started)", () => multiplayerClient.Object.Room?.Users[0].State == MultiplayerUserState.Idle);
AddUntilStep("user is idle (match not started)", () => localUser.State == MultiplayerUserState.Idle);
AddUntilStep("ready button enabled", () => control.ChildrenOfType<OsuButton>().Single().Enabled.Value);
}
@ -363,14 +360,11 @@ namespace osu.Game.Tests.Visual.Multiplayer
const int users = 10;
AddStep("setup", () =>
{
multiplayerClient.Object.TransferHost(multiplayerClient.Object.Room?.Users[0].UserID ?? 0);
transferHost(localUser);
for (int i = 0; i < users; i++)
addUser(new APIUser { Id = i, Username = "Another user" });
addUser(new APIUser { Id = i, Username = "Another user" }, !isHost && i == 2);
});
if (!isHost)
AddStep("transfer host", () => multiplayerClient.Object.TransferHost(2));
ClickButtonWhenEnabled<MultiplayerReadyButton>();
AddRepeatStep("change user ready state", () =>
@ -388,14 +382,14 @@ namespace osu.Game.Tests.Visual.Multiplayer
private void verifyGameplayStartFlow()
{
AddUntilStep("user is ready", () => multiplayerClient.Object.Room?.Users[0].State == MultiplayerUserState.Ready);
AddUntilStep("user is ready", () => localUser.State == MultiplayerUserState.Ready);
ClickButtonWhenEnabled<MultiplayerReadyButton>();
AddUntilStep("user waiting for load", () => multiplayerClient.Object.Room?.Users[0].State == MultiplayerUserState.WaitingForLoad);
AddUntilStep("user waiting for load", () => localUser.State == MultiplayerUserState.WaitingForLoad);
AddStep("finish gameplay", () =>
{
changeUserState(multiplayerClient.Object.Room?.Users[0].UserID ?? 0, MultiplayerUserState.Loaded);
changeUserState(multiplayerClient.Object.Room?.Users[0].UserID ?? 0, MultiplayerUserState.FinishedPlay);
changeUserState(localUser.UserID, MultiplayerUserState.Loaded);
changeUserState(localUser.UserID, MultiplayerUserState.FinishedPlay);
});
AddUntilStep("ready button enabled", () => control.ChildrenOfType<OsuButton>().Single().Enabled.Value);
@ -420,11 +414,17 @@ namespace osu.Game.Tests.Visual.Multiplayer
multiplayerRoom.Users.Add(multiplayerRoomUser);
if (asHost)
multiplayerRoom.Host = multiplayerRoomUser;
transferHost(multiplayerRoomUser);
raiseRoomUpdated();
}
private void transferHost(MultiplayerRoomUser user)
{
multiplayerRoom.Host = user;
raiseRoomUpdated();
}
private void raiseRoomUpdated() => multiplayerClient.Raise(m => m.RoomUpdated -= null);
}
}