Un-revert IPlayerManager refactor (#21244)
This commit is contained in:
@@ -5,6 +5,7 @@ using Content.Server.Ghost.Roles.Components;
|
||||
using Content.Server.Players;
|
||||
using Content.Shared.Ghost;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.Players;
|
||||
using Robust.Shared.Console;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Map;
|
||||
@@ -43,7 +44,7 @@ public sealed class GhostRoleTests
|
||||
var sPlayerMan = server.ResolveDependency<Robust.Server.Player.IPlayerManager>();
|
||||
var conHost = client.ResolveDependency<IConsoleHost>();
|
||||
var mindSystem = entMan.System<SharedMindSystem>();
|
||||
var session = sPlayerMan.ServerSessions.Single();
|
||||
var session = sPlayerMan.Sessions.Single();
|
||||
var originalMindId = session.ContentData()!.Mind!.Value;
|
||||
|
||||
// Spawn player entity & attach
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.Linq;
|
||||
using Content.Server.Players;
|
||||
using Content.Shared.Ghost;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.Players;
|
||||
using Robust.Server.Console;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Server.Player;
|
||||
@@ -35,7 +36,7 @@ public sealed partial class MindTests
|
||||
MindComponent mind = default!;
|
||||
await server.WaitAssertion(() =>
|
||||
{
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
|
||||
playerEnt = entMan.SpawnEntity(null, MapCoordinates.Nullspace);
|
||||
visitEnt = entMan.SpawnEntity(null, MapCoordinates.Nullspace);
|
||||
@@ -81,7 +82,7 @@ public sealed partial class MindTests
|
||||
var entMan = server.ResolveDependency<IServerEntityManager>();
|
||||
var mapManager = server.ResolveDependency<IMapManager>();
|
||||
var playerMan = server.ResolveDependency<IPlayerManager>();
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
|
||||
var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
|
||||
|
||||
@@ -128,7 +129,7 @@ public sealed partial class MindTests
|
||||
var entMan = server.ResolveDependency<IServerEntityManager>();
|
||||
var playerMan = server.ResolveDependency<IPlayerManager>();
|
||||
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
|
||||
Assert.That(!entMan.HasComponent<GhostComponent>(player.AttachedEntity), "Player was initially a ghost?");
|
||||
|
||||
@@ -162,7 +163,7 @@ public sealed partial class MindTests
|
||||
var mindSystem = entMan.EntitySysManager.GetEntitySystem<SharedMindSystem>();
|
||||
var mind = GetMind(pair);
|
||||
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
#pragma warning disable NUnit2045 // Interdependent assertions.
|
||||
Assert.That(player.AttachedEntity, Is.Not.Null);
|
||||
Assert.That(entMan.EntityExists(player.AttachedEntity));
|
||||
@@ -218,7 +219,7 @@ public sealed partial class MindTests
|
||||
var playerMan = server.ResolveDependency<IPlayerManager>();
|
||||
var serverConsole = server.ResolveDependency<IServerConsoleHost>();
|
||||
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
|
||||
var ghost = await BecomeGhost(pair);
|
||||
|
||||
@@ -263,7 +264,7 @@ public sealed partial class MindTests
|
||||
var playerMan = server.ResolveDependency<IPlayerManager>();
|
||||
var serverConsole = server.ResolveDependency<IServerConsoleHost>();
|
||||
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
|
||||
EntityUid ghost = default!;
|
||||
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
using System.Linq;
|
||||
using Content.IntegrationTests.Pair;
|
||||
using Content.Server.Mind;
|
||||
using Content.Server.Players;
|
||||
using Content.Shared.Ghost;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.Players;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Server.Player;
|
||||
using Robust.Shared.Enums;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Network;
|
||||
using Robust.Shared.Player;
|
||||
|
||||
namespace Content.IntegrationTests.Tests.Minds;
|
||||
|
||||
@@ -36,7 +39,7 @@ public sealed partial class MindTests
|
||||
var playerMan = pair.Server.ResolveDependency<IPlayerManager>();
|
||||
var mindSys = entMan.System<SharedMindSystem>();
|
||||
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
|
||||
EntityUid entity = default;
|
||||
EntityUid mindId = default!;
|
||||
@@ -71,7 +74,7 @@ public sealed partial class MindTests
|
||||
EntityUid mindId = default!;
|
||||
MindComponent mind = default!;
|
||||
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
await pair.Server.WaitAssertion(() =>
|
||||
{
|
||||
var oldUid = player.AttachedEntity;
|
||||
@@ -116,20 +119,25 @@ public sealed partial class MindTests
|
||||
/// </summary>
|
||||
private static (EntityUid Id, MindComponent Comp) GetMind(Pair.TestPair pair)
|
||||
{
|
||||
var playerMan = pair.Server.ResolveDependency<IPlayerManager>();
|
||||
var entMan = pair.Server.ResolveDependency<IEntityManager>();
|
||||
var player = playerMan.ServerSessions.SingleOrDefault();
|
||||
var playerMan = pair.Server.PlayerMan;
|
||||
var entMan = pair.Server.EntMan;
|
||||
var player = playerMan.Sessions.SingleOrDefault();
|
||||
Assert.That(player, Is.Not.Null);
|
||||
|
||||
var mindId = player.ContentData()!.Mind!.Value;
|
||||
Assert.That(mindId, Is.Not.EqualTo(default(EntityUid)));
|
||||
var mind = entMan.GetComponent<MindComponent>(mindId);
|
||||
ActorComponent actor = default!;
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(player, Is.EqualTo(mind.Session), "Player session does not match mind session");
|
||||
Assert.That(entMan.System<MindSystem>().GetMind(player.UserId), Is.EqualTo(mindId));
|
||||
Assert.That(player.AttachedEntity, Is.EqualTo(mind.CurrentEntity), "Player is not attached to the mind's current entity.");
|
||||
Assert.That(entMan.EntityExists(mind.OwnedEntity), "The mind's current entity does not exist");
|
||||
Assert.That(mind.VisitingEntity == null || entMan.EntityExists(mind.VisitingEntity), "The minds visited entity does not exist.");
|
||||
Assert.That(entMan.TryGetComponent(mind.CurrentEntity, out actor));
|
||||
});
|
||||
Assert.That(actor.PlayerSession, Is.EqualTo(mind.Session));
|
||||
|
||||
return (mindId, mind);
|
||||
}
|
||||
@@ -139,7 +147,7 @@ public sealed partial class MindTests
|
||||
var netManager = pair.Client.ResolveDependency<IClientNetManager>();
|
||||
var playerMan = pair.Server.ResolveDependency<IPlayerManager>();
|
||||
var entMan = pair.Server.ResolveDependency<IEntityManager>();
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
var mindId = player.ContentData()!.Mind!.Value;
|
||||
var mind = entMan.GetComponent<MindComponent>(mindId);
|
||||
|
||||
@@ -161,21 +169,21 @@ public sealed partial class MindTests
|
||||
{
|
||||
var netManager = pair.Client.ResolveDependency<IClientNetManager>();
|
||||
var playerMan = pair.Server.ResolveDependency<IPlayerManager>();
|
||||
Assert.That(!playerMan.ServerSessions.Any());
|
||||
Assert.That(!playerMan.Sessions.Any());
|
||||
|
||||
await Task.WhenAll(pair.Client.WaitIdleAsync(), pair.Client.WaitIdleAsync());
|
||||
pair.Client.SetConnectTarget(pair.Server);
|
||||
await pair.Client.WaitPost(() => netManager.ClientConnect(null!, 0, username));
|
||||
await pair.RunTicksSync(5);
|
||||
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
Assert.That(player.Status, Is.EqualTo(SessionStatus.InGame));
|
||||
}
|
||||
|
||||
private static async Task<IPlayerSession> DisconnectReconnect(Pair.TestPair pair)
|
||||
private static async Task<ICommonSession> DisconnectReconnect(Pair.TestPair pair)
|
||||
{
|
||||
var playerMan = pair.Server.ResolveDependency<IPlayerManager>();
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
var name = player.Name;
|
||||
var id = player.UserId;
|
||||
|
||||
@@ -183,7 +191,7 @@ public sealed partial class MindTests
|
||||
await Connect(pair, name);
|
||||
|
||||
// Session has changed
|
||||
var newSession = playerMan.ServerSessions.Single();
|
||||
var newSession = playerMan.Sessions.Single();
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(newSession, Is.Not.EqualTo(player));
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.Linq;
|
||||
using Content.Shared.Ghost;
|
||||
using Content.Shared.Mind;
|
||||
using NUnit.Framework.Interfaces;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Server.Player;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Map;
|
||||
@@ -49,7 +51,7 @@ public sealed partial class MindTests
|
||||
var mind = GetMind(pair);
|
||||
|
||||
var playerMan = pair.Server.ResolveDependency<IPlayerManager>();
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
var name = player.Name;
|
||||
var user = player.UserId;
|
||||
Assert.That(mind.Comp.OwnedEntity, Is.Not.Null);
|
||||
@@ -72,7 +74,7 @@ public sealed partial class MindTests
|
||||
|
||||
// Reconnect
|
||||
await Connect(pair, name);
|
||||
player = playerMan.ServerSessions.Single();
|
||||
player = playerMan.Sessions.Single();
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(user, Is.EqualTo(player.UserId));
|
||||
@@ -127,8 +129,10 @@ public sealed partial class MindTests
|
||||
var mindSys = entMan.System<SharedMindSystem>();
|
||||
var mind = GetMind(pair);
|
||||
|
||||
Assert.Null(mind.Comp.VisitingEntity);
|
||||
|
||||
// Make player visit a new mob
|
||||
var original = mind.Comp.CurrentEntity;
|
||||
var original = mind.Comp.OwnedEntity;
|
||||
EntityUid visiting = default;
|
||||
await pair.Server.WaitAssertion(() =>
|
||||
{
|
||||
@@ -137,6 +141,7 @@ public sealed partial class MindTests
|
||||
});
|
||||
await pair.RunTicksSync(5);
|
||||
|
||||
Assert.That(mind.Comp.VisitingEntity, Is.EqualTo(visiting));
|
||||
await DisconnectReconnect(pair);
|
||||
|
||||
// Player is back in control of the visited mob, mind was preserved
|
||||
@@ -150,4 +155,32 @@ public sealed partial class MindTests
|
||||
|
||||
await pair.CleanReturnAsync();
|
||||
}
|
||||
|
||||
// This test will do the following
|
||||
// - connect as a normal player
|
||||
// - disconnect
|
||||
// - reconnect
|
||||
// - assert that they return to the original entity.
|
||||
[Test]
|
||||
public async Task TestReconnect()
|
||||
{
|
||||
await using var pair = await SetupPair();
|
||||
var mind = GetMind(pair);
|
||||
|
||||
Assert.Null(mind.Comp.VisitingEntity);
|
||||
Assert.NotNull(mind.Comp.OwnedEntity);
|
||||
var entity = mind.Comp.OwnedEntity;
|
||||
|
||||
await pair.RunTicksSync(5);
|
||||
await DisconnectReconnect(pair);
|
||||
await pair.RunTicksSync(5);
|
||||
|
||||
var newMind = GetMind(pair);
|
||||
|
||||
Assert.Null(newMind.Comp.VisitingEntity);
|
||||
Assert.That(newMind.Comp.OwnedEntity, Is.EqualTo(entity));
|
||||
Assert.That(newMind.Id, Is.EqualTo(mind.Id));
|
||||
|
||||
await pair.CleanReturnAsync();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ using Content.Shared.Damage.Prototypes;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.Mind.Components;
|
||||
using Content.Shared.Players;
|
||||
using Content.Shared.Roles;
|
||||
using Content.Shared.Roles.Jobs;
|
||||
using Robust.Server.Console;
|
||||
@@ -345,7 +346,7 @@ public sealed partial class MindTests
|
||||
EntityUid entity = default!;
|
||||
EntityUid mindId = default!;
|
||||
MindComponent mind = default!;
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
|
||||
await server.WaitAssertion(() =>
|
||||
{
|
||||
@@ -406,12 +407,6 @@ public sealed partial class MindTests
|
||||
await pair.CleanReturnAsync();
|
||||
}
|
||||
|
||||
// TODO Implement
|
||||
/*[Test]
|
||||
public async Task TestPlayerCanReturnFromGhostWhenDead()
|
||||
{
|
||||
}*/
|
||||
|
||||
[Test]
|
||||
public async Task TestGhostDoesNotInfiniteLoop()
|
||||
{
|
||||
@@ -432,7 +427,7 @@ public sealed partial class MindTests
|
||||
EntityUid ghost = default!;
|
||||
EntityUid mindId = default!;
|
||||
MindComponent mind = default!;
|
||||
var player = playerMan.ServerSessions.Single();
|
||||
var player = playerMan.Sessions.Single();
|
||||
|
||||
await server.WaitAssertion(() =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user