From 746ec9eab7e0345f392f086cc00d11ec1316ff7a Mon Sep 17 00:00:00 2001 From: Acruid Date: Sun, 21 Nov 2021 05:51:17 -0800 Subject: [PATCH] Marked PlayerSession find methods on PlayerManager Obsolete (#2244) --- .../Console/Commands/PlayerCommands.cs | 4 +- .../GameObjects/EntitySystems/EffectSystem.cs | 13 ++-- .../GameStates/ServerGameStateManager.cs | 7 +- Robust.Server/Player/IPlayerManager.cs | 11 +++ Robust.Server/Player/PlayerManager.cs | 76 ++++++++----------- Robust.Server/Player/PlayerSession.cs | 3 - .../Shared/EngineIntegrationTest_Test.cs | 5 +- .../Shared/GameObjects/ContainerTests.cs | 4 +- 8 files changed, 60 insertions(+), 63 deletions(-) diff --git a/Robust.Server/Console/Commands/PlayerCommands.cs b/Robust.Server/Console/Commands/PlayerCommands.cs index a571c2eaa..769a40ea6 100644 --- a/Robust.Server/Console/Commands/PlayerCommands.cs +++ b/Robust.Server/Console/Commands/PlayerCommands.cs @@ -158,7 +158,7 @@ namespace Robust.Server.Console.Commands var sb = new StringBuilder(); - var players = IoCManager.Resolve().GetAllPlayers(); + var players = IoCManager.Resolve().ServerSessions; sb.AppendLine($"{"Player Name",20} {"Status",12} {"Playing Time",14} {"Ping",9} {"IP EndPoint",20}"); sb.AppendLine("-------------------------------------------------------------------------------"); @@ -188,7 +188,7 @@ namespace Robust.Server.Console.Commands if (args.Length < 1) { var player = shell.Player as IPlayerSession; - var toKickPlayer = player ?? players.GetAllPlayers().FirstOrDefault(); + var toKickPlayer = player ?? players.ServerSessions.FirstOrDefault(); if (toKickPlayer == null) { shell.WriteLine("You need to provide a player to kick."); diff --git a/Robust.Server/GameObjects/EntitySystems/EffectSystem.cs b/Robust.Server/GameObjects/EntitySystems/EffectSystem.cs index 049e3e93a..a4f9ca15b 100644 --- a/Robust.Server/GameObjects/EntitySystems/EffectSystem.cs +++ b/Robust.Server/GameObjects/EntitySystems/EffectSystem.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System.Collections.Generic; +using System.Linq; using Robust.Server.Player; using Robust.Shared.Enums; using Robust.Shared.GameObjects; @@ -19,7 +20,7 @@ namespace Robust.Server.GameObjects /// /// Priority queue sorted by how soon the effect will die, we remove messages from the front of the queue during update until caught up /// - private readonly PriorityQueue _CurrentEffects = new(new EffectMessageComparer()); + private readonly PriorityQueue _currentEffects = new(new EffectMessageComparer()); /// /// Creates a particle effect and sends it to clients. @@ -28,11 +29,11 @@ namespace Robust.Server.GameObjects /// Session to be excluded for prediction public void CreateParticle(EffectSystemMessage effect, IPlayerSession? excludedSession = null) { - _CurrentEffects.Add(effect); + _currentEffects.Add(effect); //For now we will use this which sends to ALL clients //TODO: Client bubbling - foreach (var player in _playerManager.GetAllPlayers()) + foreach (var player in _playerManager.ServerSessions) { if (player.Status != SessionStatus.InGame || player == excludedSession) continue; @@ -44,9 +45,9 @@ namespace Robust.Server.GameObjects public override void Update(float frameTime) { //Take elements from front of priority queue until they are old - while (_CurrentEffects.Count != 0 && _CurrentEffects.Peek().DeathTime < _timing.CurTime) + while (_currentEffects.Count != 0 && _currentEffects.Peek().DeathTime < _timing.CurTime) { - _CurrentEffects.Take(); + _currentEffects.Take(); } } diff --git a/Robust.Server/GameStates/ServerGameStateManager.cs b/Robust.Server/GameStates/ServerGameStateManager.cs index 6e1d755a5..88682f674 100644 --- a/Robust.Server/GameStates/ServerGameStateManager.cs +++ b/Robust.Server/GameStates/ServerGameStateManager.cs @@ -16,7 +16,6 @@ using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Network; using Robust.Shared.Network.Messages; -using Robust.Shared.Players; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -124,7 +123,7 @@ namespace Robust.Server.GameStates _entityManager.CullDeletionHistory(GameTick.MaxValue); _pvs.CullDeletionHistory(GameTick.MaxValue); _mapManager.CullDeletionHistory(GameTick.MaxValue); - _pvs.Cleanup(_playerManager.GetAllPlayers()); + _pvs.Cleanup(_playerManager.ServerSessions); return; } @@ -185,7 +184,7 @@ namespace Robust.Server.GameStates _networkManager.ServerSendMessage(stateUpdateMessage, channel); } - Parallel.ForEach(_playerManager.GetAllPlayers(), session => + Parallel.ForEach(_playerManager.ServerSessions, session => { try { @@ -197,7 +196,7 @@ namespace Robust.Server.GameStates } }); - _pvs.Cleanup(_playerManager.GetAllPlayers()); + _pvs.Cleanup(_playerManager.ServerSessions); var oldestAck = new GameTick(oldestAckValue); // keep the deletion history buffers clean diff --git a/Robust.Server/Player/IPlayerManager.cs b/Robust.Server/Player/IPlayerManager.cs index 9ac9b1f93..7596b41fd 100644 --- a/Robust.Server/Player/IPlayerManager.cs +++ b/Robust.Server/Player/IPlayerManager.cs @@ -17,6 +17,11 @@ namespace Robust.Server.Player { BoundKeyMap KeyMap { get; } + /// + /// Same as the common sessions, but the server version. + /// + IEnumerable ServerSessions { get; } + /// /// Raised when the of a is changed. /// @@ -65,10 +70,16 @@ namespace Robust.Server.Player IEnumerable GetAllPlayerData(); + + [Obsolete] void DetachAll(); + [Obsolete("Use player Filter or Inline me!")] List GetPlayersInRange(MapCoordinates worldPos, int range); + [Obsolete("Use player Filter or Inline me!")] List GetPlayersInRange(EntityCoordinates worldPos, int range); + [Obsolete("Use player Filter or Inline me!")] List GetPlayersBy(Func predicate); + [Obsolete("Use player Filter or Inline me!")] List GetAllPlayers(); List? GetPlayerStates(GameTick fromTick); } diff --git a/Robust.Server/Player/PlayerManager.cs b/Robust.Server/Player/PlayerManager.cs index 74e18f638..9272183d2 100644 --- a/Robust.Server/Player/PlayerManager.cs +++ b/Robust.Server/Player/PlayerManager.cs @@ -14,6 +14,7 @@ using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Network; using Robust.Shared.Network.Messages; +using Robust.Shared.Player; using Robust.Shared.Players; using Robust.Shared.Reflection; using Robust.Shared.Timing; @@ -25,7 +26,7 @@ namespace Robust.Server.Player /// /// This class will manage connected player sessions. /// - internal class PlayerManager : IPlayerManager + public class PlayerManager : IPlayerManager { private static readonly Gauge PlayerCountMetric = Metrics .CreateGauge("robust_player_count", "Number of players on the server."); @@ -74,6 +75,8 @@ namespace Robust.Server.Player } } + public IEnumerable ServerSessions => Sessions.Cast(); + /// [ViewVariables] public int PlayerCount @@ -219,9 +222,9 @@ namespace Robust.Server.Player _sessionsLock.EnterReadLock(); try { - if (_sessions.TryGetValue(userId, out var _session)) + if (_sessions.TryGetValue(userId, out var playerSession)) { - session = _session; + session = playerSession; return true; } } @@ -236,6 +239,7 @@ namespace Robust.Server.Player /// /// Causes all sessions to switch from the lobby to the the game. /// + [Obsolete] public void SendJoinGameToAll() { _sessionsLock.EnterReadLock(); @@ -265,6 +269,7 @@ namespace Robust.Server.Player /// /// Causes all sessions to detach from their entity. /// + [Obsolete] public void DetachAll() { _sessionsLock.EnterReadLock(); @@ -287,22 +292,14 @@ namespace Robust.Server.Player /// Position of the circle in world-space. /// Radius of the circle in world units. /// + [Obsolete("Use player Filter or Inline me!")] public List GetPlayersInRange(MapCoordinates worldPos, int range) { - _sessionsLock.EnterReadLock(); - //TODO: This needs to be moved to the PVS system. - try - { - return - _sessions.Values.Where(x => - x.AttachedEntity != null && worldPos.InRange(x.AttachedEntity.Transform.MapPosition, range)) - .Cast() - .ToList(); - } - finally - { - _sessionsLock.ExitReadLock(); - } + return Filter.Empty() + .AddInRange(worldPos, range) + .Recipients + .Cast() + .ToList(); } /// @@ -311,40 +308,34 @@ namespace Robust.Server.Player /// Position of the circle in world-space. /// Radius of the circle in world units. /// + [Obsolete("Use player Filter or Inline me!")] public List GetPlayersInRange(EntityCoordinates worldPos, int range) { - return GetPlayersInRange(worldPos.ToMap(_entityManager), range); + return Filter.Empty() + .AddInRange(worldPos.ToMap(_entityManager), range) + .Recipients + .Cast() + .ToList(); } + [Obsolete("Use player Filter or Inline me!")] public List GetPlayersBy(Func predicate) { - _sessionsLock.EnterReadLock(); - try - { - return - _sessions.Values.Where(predicate).ToList(); - } - finally - { - _sessionsLock.ExitReadLock(); - } + return Filter.Empty() + .AddWhere((session => predicate((IPlayerSession)session))) + .Recipients + .Cast() + .ToList(); } /// /// Gets all players in the server. /// /// + [Obsolete("Use player Filter or Inline me!")] public List GetAllPlayers() { - _sessionsLock.EnterReadLock(); - try - { - return _sessions.Values.Cast().ToList(); - } - finally - { - _sessionsLock.ExitReadLock(); - } + return ServerSessions.ToList(); } /// @@ -399,7 +390,7 @@ namespace Robust.Server.Player var session = new PlayerSession(this, args.Channel, data); - session.PlayerStatusChanged += (obj, sessionArgs) => OnPlayerStatusChanged(session, sessionArgs.OldStatus, sessionArgs.NewStatus); + session.PlayerStatusChanged += (_, sessionArgs) => OnPlayerStatusChanged(session, sessionArgs.OldStatus, sessionArgs.NewStatus); _sessionsLock.EnterWriteLock(); try @@ -453,7 +444,7 @@ namespace Robust.Server.Player private void HandlePlayerListReq(MsgPlayerListReq message) { var channel = message.MsgChannel; - var players = GetAllPlayers().ToArray(); + var players = Sessions; var netMsg = channel.CreateNetMessage(); // client session is complete, set their status accordingly. @@ -465,9 +456,6 @@ namespace Robust.Server.Player var list = new List(); foreach (var client in players) { - if (client == null) - continue; - var info = new PlayerState { UserId = client.UserId, @@ -495,9 +483,9 @@ namespace Robust.Server.Player public bool TryGetPlayerData(NetUserId userId, [NotNullWhen(true)] out IPlayerData? data) { - if (_playerData.TryGetValue(userId, out var _data)) + if (_playerData.TryGetValue(userId, out var playerData)) { - data = _data; + data = playerData; return true; } data = default; diff --git a/Robust.Server/Player/PlayerSession.cs b/Robust.Server/Player/PlayerSession.cs index 73027e1a7..4c91c4206 100644 --- a/Robust.Server/Player/PlayerSession.cs +++ b/Robust.Server/Player/PlayerSession.cs @@ -47,8 +47,6 @@ namespace Robust.Server.Player private SessionStatus _status = SessionStatus.Connecting; - /// - [ViewVariables] internal string Name { get; set; } @@ -99,7 +97,6 @@ namespace Robust.Server.Player /// public DateTime ConnectedTime { get; private set; } - /// [ViewVariables(VVAccess.ReadWrite)] public int VisibilityMask { get; set; } = 1; diff --git a/Robust.UnitTesting/Shared/EngineIntegrationTest_Test.cs b/Robust.UnitTesting/Shared/EngineIntegrationTest_Test.cs index d63c0f672..a6f9dd3d5 100644 --- a/Robust.UnitTesting/Shared/EngineIntegrationTest_Test.cs +++ b/Robust.UnitTesting/Shared/EngineIntegrationTest_Test.cs @@ -1,9 +1,10 @@ +using System.Linq; using System.Threading.Tasks; using NUnit.Framework; +using Robust.Server.Player; using Robust.Shared.Enums; using Robust.Shared.IoC; using Robust.Shared.Network; -using IPlayerManager = Robust.Server.Player.IPlayerManager; namespace Robust.UnitTesting.Shared { @@ -56,7 +57,7 @@ namespace Robust.UnitTesting.Shared Assert.That(playerManager.PlayerCount, Is.EqualTo(1)); // Get the only player... - var player = playerManager.GetAllPlayers()[0]; + var player = playerManager.Sessions.Single(); Assert.That(player.Status, Is.EqualTo(SessionStatus.Connected)); Assert.That(player.ConnectedClient.IsConnected, Is.True); diff --git a/Robust.UnitTesting/Shared/GameObjects/ContainerTests.cs b/Robust.UnitTesting/Shared/GameObjects/ContainerTests.cs index e14cb0628..ff0599660 100644 --- a/Robust.UnitTesting/Shared/GameObjects/ContainerTests.cs +++ b/Robust.UnitTesting/Shared/GameObjects/ContainerTests.cs @@ -58,7 +58,7 @@ namespace Robust.UnitTesting.Shared.GameObjects // Setup PVS entity.AddComponent(); - var player = playerMan.GetAllPlayers().First(); + var player = playerMan.ServerSessions.First(); player.AttachToEntity(entity); player.JoinGame(); }); @@ -185,7 +185,7 @@ namespace Robust.UnitTesting.Shared.GameObjects // Setup PVS entity.AddComponent(); - var player = playerMan.GetAllPlayers().First(); + var player = playerMan.ServerSessions.First(); player.AttachToEntity(entity); player.JoinGame(); });