From cd7a75ea9bc9812b5b2f799867a90a80cd62a2cb Mon Sep 17 00:00:00 2001 From: dartasen Date: Mon, 26 Feb 2024 21:49:33 +0100 Subject: [PATCH] Upgraded Litenetlib --- NitroxModel/NitroxModel.csproj | 2 +- .../LiteNetLib/LiteNetLibConnection.cs | 8 ++++---- .../LiteNetLib/LiteNetLibServer.cs | 6 +++--- .../Communication/NitroxConnection.cs | 17 ++++++++-------- NitroxServer/Communication/NitroxServer.cs | 6 +++--- .../Communication/Packets/PacketHandler.cs | 4 ++-- .../UnauthenticatedPacketProcessor.cs | 4 ++-- ...ultiplayerSessionPolicyRequestProcessor.cs | 2 +- ...layerSessionReservationRequestProcessor.cs | 2 +- ...layerJoiningMultiplayerSessionProcessor.cs | 2 +- .../GameLogic/InitialSyncTimerData.cs | 4 ++-- NitroxServer/GameLogic/PlayerManager.cs | 20 +++++++++---------- NitroxServer/Player.cs | 4 ++-- 13 files changed, 41 insertions(+), 40 deletions(-) diff --git a/NitroxModel/NitroxModel.csproj b/NitroxModel/NitroxModel.csproj index 833359e38..a5178d3fe 100644 --- a/NitroxModel/NitroxModel.csproj +++ b/NitroxModel/NitroxModel.csproj @@ -7,7 +7,7 @@ - + diff --git a/NitroxServer/Communication/LiteNetLib/LiteNetLibConnection.cs b/NitroxServer/Communication/LiteNetLib/LiteNetLibConnection.cs index 9e174aed0..910201e83 100644 --- a/NitroxServer/Communication/LiteNetLib/LiteNetLibConnection.cs +++ b/NitroxServer/Communication/LiteNetLib/LiteNetLibConnection.cs @@ -7,12 +7,12 @@ namespace NitroxServer.Communication.LiteNetLib; -public class LiteNetLibConnection : NitroxConnection, IEquatable +public class LiteNetLibConnection : INitroxConnection, IEquatable { private readonly NetDataWriter dataWriter = new(); private readonly NetPeer peer; - public IPEndPoint Endpoint => peer.EndPoint; + public IPEndPoint Endpoint => peer; public NitroxConnectionState State => peer.ConnectionState.ToNitrox(); public LiteNetLibConnection(NetPeer peer) @@ -33,7 +33,7 @@ public void SendPacket(Packet packet) } else { - Log.Warn($"Cannot send packet {packet?.GetType()} to a closed connection {peer.EndPoint}"); + Log.Warn($"Cannot send packet {packet?.GetType()} to a closed connection {peer as IPEndPoint}"); } } @@ -49,7 +49,7 @@ public void SendPacket(Packet packet) public override bool Equals(object obj) { - if (ReferenceEquals(null, obj)) + if (obj is null) { return false; } diff --git a/NitroxServer/Communication/LiteNetLib/LiteNetLibServer.cs b/NitroxServer/Communication/LiteNetLib/LiteNetLibServer.cs index e139c893f..c8d45f019 100644 --- a/NitroxServer/Communication/LiteNetLib/LiteNetLibServer.cs +++ b/NitroxServer/Communication/LiteNetLib/LiteNetLibServer.cs @@ -131,7 +131,7 @@ private void NetworkDataReceived(NetPeer peer, NetDataReader reader, byte channe { reader.GetBytes(packetData, packetDataLength); Packet packet = Packet.Deserialize(packetData); - NitroxConnection connection = GetConnection(peer.Id); + INitroxConnection connection = GetConnection(peer.Id); ProcessIncomingData(connection, packet); } finally @@ -140,9 +140,9 @@ private void NetworkDataReceived(NetPeer peer, NetDataReader reader, byte channe } } - private NitroxConnection GetConnection(int remoteIdentifier) + private INitroxConnection GetConnection(int remoteIdentifier) { - NitroxConnection connection; + INitroxConnection connection; lock (connectionsByRemoteIdentifier) { connectionsByRemoteIdentifier.TryGetValue(remoteIdentifier, out connection); diff --git a/NitroxServer/Communication/NitroxConnection.cs b/NitroxServer/Communication/NitroxConnection.cs index bd9fbe7ca..6f07bbb63 100644 --- a/NitroxServer/Communication/NitroxConnection.cs +++ b/NitroxServer/Communication/NitroxConnection.cs @@ -1,13 +1,14 @@ -using System.Net; +using System.Net; using NitroxModel.Packets; using NitroxModel.Packets.Processors.Abstract; -namespace NitroxServer.Communication +namespace NitroxServer.Communication; + +public interface INitroxConnection : IProcessorContext { - public interface NitroxConnection : IProcessorContext - { - IPEndPoint Endpoint { get; } - NitroxConnectionState State { get; } - void SendPacket(Packet packet); - } + IPEndPoint Endpoint { get; } + + NitroxConnectionState State { get; } + + void SendPacket(Packet packet); } diff --git a/NitroxServer/Communication/NitroxServer.cs b/NitroxServer/Communication/NitroxServer.cs index cac7bc458..e653fa938 100644 --- a/NitroxServer/Communication/NitroxServer.cs +++ b/NitroxServer/Communication/NitroxServer.cs @@ -23,7 +23,7 @@ static NitroxServer() protected readonly PacketHandler packetHandler; protected readonly EntitySimulation entitySimulation; - protected readonly Dictionary connectionsByRemoteIdentifier = new(); + protected readonly Dictionary connectionsByRemoteIdentifier = new(); protected readonly PlayerManager playerManager; public NitroxServer(PacketHandler packetHandler, PlayerManager playerManager, EntitySimulation entitySimulation, ServerConfig serverConfig) @@ -42,7 +42,7 @@ public NitroxServer(PacketHandler packetHandler, PlayerManager playerManager, En public abstract void Stop(); - protected void ClientDisconnected(NitroxConnection connection) + protected void ClientDisconnected(INitroxConnection connection) { Player player = playerManager.GetPlayer(connection); @@ -67,7 +67,7 @@ protected void ClientDisconnected(NitroxConnection connection) } } - protected void ProcessIncomingData(NitroxConnection connection, Packet packet) + protected void ProcessIncomingData(INitroxConnection connection, Packet packet) { try { diff --git a/NitroxServer/Communication/Packets/PacketHandler.cs b/NitroxServer/Communication/Packets/PacketHandler.cs index 21c468444..46d133a31 100644 --- a/NitroxServer/Communication/Packets/PacketHandler.cs +++ b/NitroxServer/Communication/Packets/PacketHandler.cs @@ -22,7 +22,7 @@ public PacketHandler(PlayerManager playerManager, DefaultServerPacketProcessor p defaultServerPacketProcessor = packetProcessor; } - public void Process(Packet packet, NitroxConnection connection) + public void Process(Packet packet, INitroxConnection connection) { Player player = playerManager.GetPlayer(connection); if (player == null) @@ -61,7 +61,7 @@ private void ProcessAuthenticated(Packet packet, Player player) } } - private void ProcessUnauthenticated(Packet packet, NitroxConnection connection) + private void ProcessUnauthenticated(Packet packet, INitroxConnection connection) { Type packetType = packet.GetType(); if (!packetProcessorUnauthCache.TryGetValue(packetType, out PacketProcessor processor)) diff --git a/NitroxServer/Communication/Packets/Processors/Abstract/UnauthenticatedPacketProcessor.cs b/NitroxServer/Communication/Packets/Processors/Abstract/UnauthenticatedPacketProcessor.cs index f2aa76b6f..7dcc033e2 100644 --- a/NitroxServer/Communication/Packets/Processors/Abstract/UnauthenticatedPacketProcessor.cs +++ b/NitroxServer/Communication/Packets/Processors/Abstract/UnauthenticatedPacketProcessor.cs @@ -7,9 +7,9 @@ public abstract class UnauthenticatedPacketProcessor : PacketProcessor where { public override void ProcessPacket(Packet packet, IProcessorContext connection) { - Process((T)packet, (NitroxConnection)connection); + Process((T)packet, (INitroxConnection)connection); } - public abstract void Process(T packet, NitroxConnection connection); + public abstract void Process(T packet, INitroxConnection connection); } } diff --git a/NitroxServer/Communication/Packets/Processors/MultiplayerSessionPolicyRequestProcessor.cs b/NitroxServer/Communication/Packets/Processors/MultiplayerSessionPolicyRequestProcessor.cs index e6b7c278d..630abebea 100644 --- a/NitroxServer/Communication/Packets/Processors/MultiplayerSessionPolicyRequestProcessor.cs +++ b/NitroxServer/Communication/Packets/Processors/MultiplayerSessionPolicyRequestProcessor.cs @@ -14,7 +14,7 @@ public MultiplayerSessionPolicyRequestProcessor(ServerConfig config) } // This will extend in the future when we look into different options for auth - public override void Process(MultiplayerSessionPolicyRequest packet, NitroxConnection connection) + public override void Process(MultiplayerSessionPolicyRequest packet, INitroxConnection connection) { Log.Info("Providing session policies..."); connection.SendPacket(new MultiplayerSessionPolicy(packet.CorrelationId, config.DisableConsole, config.MaxConnections, config.IsPasswordRequired)); diff --git a/NitroxServer/Communication/Packets/Processors/MultiplayerSessionReservationRequestProcessor.cs b/NitroxServer/Communication/Packets/Processors/MultiplayerSessionReservationRequestProcessor.cs index f94996ae6..ac61b5abd 100644 --- a/NitroxServer/Communication/Packets/Processors/MultiplayerSessionReservationRequestProcessor.cs +++ b/NitroxServer/Communication/Packets/Processors/MultiplayerSessionReservationRequestProcessor.cs @@ -14,7 +14,7 @@ public MultiplayerSessionReservationRequestProcessor(PlayerManager playerManager this.playerManager = playerManager; } - public override void Process(MultiplayerSessionReservationRequest packet, NitroxConnection connection) + public override void Process(MultiplayerSessionReservationRequest packet, INitroxConnection connection) { Log.Info($"Processing reservation request from {packet.AuthenticationContext.Username}"); diff --git a/NitroxServer/Communication/Packets/Processors/PlayerJoiningMultiplayerSessionProcessor.cs b/NitroxServer/Communication/Packets/Processors/PlayerJoiningMultiplayerSessionProcessor.cs index b604b48b0..b4e722855 100644 --- a/NitroxServer/Communication/Packets/Processors/PlayerJoiningMultiplayerSessionProcessor.cs +++ b/NitroxServer/Communication/Packets/Processors/PlayerJoiningMultiplayerSessionProcessor.cs @@ -35,7 +35,7 @@ public PlayerJoiningMultiplayerSessionProcessor(ScheduleKeeper scheduleKeeper, S this.buildingManager = buildingManager; } - public override void Process(PlayerJoiningMultiplayerSession packet, NitroxConnection connection) + public override void Process(PlayerJoiningMultiplayerSession packet, INitroxConnection connection) { Player player = playerManager.PlayerConnected(connection, packet.ReservationKey, out bool wasBrandNewPlayer); NitroxId assignedEscapePodId = world.EscapePodManager.AssignPlayerToEscapePod(player.Id, out Optional newlyCreatedEscapePod); diff --git a/NitroxServer/GameLogic/InitialSyncTimerData.cs b/NitroxServer/GameLogic/InitialSyncTimerData.cs index 83ee0e926..c7de2869e 100644 --- a/NitroxServer/GameLogic/InitialSyncTimerData.cs +++ b/NitroxServer/GameLogic/InitialSyncTimerData.cs @@ -11,7 +11,7 @@ namespace NitroxServer.GameLogic /// internal class InitialSyncTimerData { - public readonly NitroxConnection Connection; + public readonly INitroxConnection Connection; public readonly AuthenticationContext Context; public readonly int MaxCounter; @@ -25,7 +25,7 @@ internal class InitialSyncTimerData /// public bool Disposing = false; - public InitialSyncTimerData(NitroxConnection connection, AuthenticationContext context, int initialSyncTimeout) + public InitialSyncTimerData(INitroxConnection connection, AuthenticationContext context, int initialSyncTimeout) { Connection = connection; Context = context; diff --git a/NitroxServer/GameLogic/PlayerManager.cs b/NitroxServer/GameLogic/PlayerManager.cs index dce3588a0..65055a912 100644 --- a/NitroxServer/GameLogic/PlayerManager.cs +++ b/NitroxServer/GameLogic/PlayerManager.cs @@ -20,11 +20,11 @@ namespace NitroxServer.GameLogic public class PlayerManager { private readonly ThreadSafeDictionary allPlayersByName; - private readonly ThreadSafeDictionary assetsByConnection = new(); + private readonly ThreadSafeDictionary assetsByConnection = new(); private readonly ThreadSafeDictionary reservations = new(); private readonly ThreadSafeSet reservedPlayerNames = new("Player"); // "Player" is often used to identify the local player and should not be used by any user - private ThreadSafeQueue> JoinQueue { get; set; } = new(); + private ThreadSafeQueue> JoinQueue { get; set; } = new(); private bool PlayerCurrentlyJoining { get; set; } private Timer initialSyncTimer; @@ -56,7 +56,7 @@ public IEnumerable GetAllPlayers() } public MultiplayerSessionReservation ReservePlayerContext( - NitroxConnection connection, + INitroxConnection connection, PlayerSettings playerSettings, AuthenticationContext authenticationContext, string correlationId) @@ -88,7 +88,7 @@ public MultiplayerSessionReservation ReservePlayerContext( return new MultiplayerSessionReservation(correlationId, MultiplayerSessionReservationState.REJECTED); } - JoinQueue.Enqueue(new KeyValuePair( + JoinQueue.Enqueue(new KeyValuePair( connection, new MultiplayerSessionReservationRequest(correlationId, playerSettings, authenticationContext))); @@ -175,13 +175,13 @@ private void InitialSyncTimerElapsed(object state) } } - public void NonPlayerDisconnected(NitroxConnection connection) + public void NonPlayerDisconnected(INitroxConnection connection) { // Remove any requests sent by the connection from the join queue JoinQueue = new(JoinQueue.Where(pair => !Equals(pair.Key, connection))); } - public Player PlayerConnected(NitroxConnection connection, string reservationKey, out bool wasBrandNewPlayer) + public Player PlayerConnected(INitroxConnection connection, string reservationKey, out bool wasBrandNewPlayer) { PlayerContext playerContext = reservations[reservationKey]; Validate.NotNull(playerContext); @@ -229,7 +229,7 @@ public Player PlayerConnected(NitroxConnection connection, string reservationKey return player; } - public void PlayerDisconnected(NitroxConnection connection) + public void PlayerDisconnected(INitroxConnection connection) { assetsByConnection.TryGetValue(connection, out ConnectionAssets assetPackage); if (assetPackage == null) @@ -273,8 +273,8 @@ public void FinishProcessingReservation(Player player = null) // Tell next client that it can start joining. if (JoinQueue.Count > 0) { - KeyValuePair keyValuePair = JoinQueue.Dequeue(); - NitroxConnection requestConnection = keyValuePair.Key; + KeyValuePair keyValuePair = JoinQueue.Dequeue(); + INitroxConnection requestConnection = keyValuePair.Key; MultiplayerSessionReservationRequest reservationRequest = keyValuePair.Value; MultiplayerSessionReservation reservation = ReservePlayerContext(requestConnection, @@ -301,7 +301,7 @@ public bool TryGetPlayerByName(string playerName, out Player foundPlayer) return false; } - public Player GetPlayer(NitroxConnection connection) + public Player GetPlayer(INitroxConnection connection) { if (!assetsByConnection.TryGetValue(connection, out ConnectionAssets assetPackage)) { diff --git a/NitroxServer/Player.cs b/NitroxServer/Player.cs index 136bba52a..e7a2d27ac 100644 --- a/NitroxServer/Player.cs +++ b/NitroxServer/Player.cs @@ -21,7 +21,7 @@ public class Player : IProcessorContext public ThreadSafeList UsedItems { get; } public Optional[] QuickSlotsBindingIds { get; set; } - public NitroxConnection Connection { get; set; } + public INitroxConnection Connection { get; set; } public PlayerSettings PlayerSettings => PlayerContext.PlayerSettings; public PlayerContext PlayerContext { get; set; } public ushort Id { get; } @@ -42,7 +42,7 @@ public class Player : IProcessorContext public PlayerWorldEntity Entity { get; set; } - public Player(ushort id, string name, bool isPermaDeath, PlayerContext playerContext, NitroxConnection connection, + public Player(ushort id, string name, bool isPermaDeath, PlayerContext playerContext, INitroxConnection connection, NitroxVector3 position, NitroxQuaternion rotation, NitroxId playerId, Optional subRootId, Perms perms, PlayerStatsData stats, NitroxGameMode gameMode, IEnumerable usedItems, Optional[] quickSlotsBindingIds, IEnumerable equippedItems, IEnumerable modules, IDictionary personalCompletedGoalsWithTimestamp, IDictionary pingInstancePreferences, IList pinnedRecipePreferences)