diff --git a/Shared/Network/LiteNetLib/LiteNetLibClient.cs b/Shared/Network/LiteNetLib/LiteNetLibClient.cs index 5432ab8..8bc1c52 100644 --- a/Shared/Network/LiteNetLib/LiteNetLibClient.cs +++ b/Shared/Network/LiteNetLib/LiteNetLibClient.cs @@ -15,6 +15,8 @@ public class LiteNetLibClient : LiteNetLibCommunicatorBase, INetworkCommunicator private CancellationTokenSource? cancellationTokenSource = null; + protected override IConnection GetConnection(NetPeer peer) => new LiteNetLibServerConnection(peer); + public INetworkCommunicatorClient Connect(string address, int port, string? password = null) { if (!UniverseObject.IsInUniverse) diff --git a/Shared/Network/LiteNetLib/LiteNetLibConnection.cs b/Shared/Network/LiteNetLib/LiteNetLibClientConnection.cs similarity index 61% rename from Shared/Network/LiteNetLib/LiteNetLibConnection.cs rename to Shared/Network/LiteNetLib/LiteNetLibClientConnection.cs index 55e866e..b1e4763 100644 --- a/Shared/Network/LiteNetLib/LiteNetLibConnection.cs +++ b/Shared/Network/LiteNetLib/LiteNetLibClientConnection.cs @@ -2,11 +2,11 @@ using LiteNetLib; namespace Syntriax.Engine.Network; -public record class LiteNetLibConnection(NetPeer NetPeer) : IConnection +public record class LiteNetLibClientConnection(NetPeer NetPeer) : IConnection { public string Id { get; } = NetPeer.Id.ToString(); public float Ping => NetPeer.Ping * .001f; public float RoundTrip => NetPeer.RoundTripTime * .001f; - public override string ToString() => $"Client({Id})"; + public override string ToString() => $"Connection({Id})"; } diff --git a/Shared/Network/LiteNetLib/LiteNetLibCommunicatorBase.cs b/Shared/Network/LiteNetLib/LiteNetLibCommunicatorBase.cs index b2d1925..88d1f30 100644 --- a/Shared/Network/LiteNetLib/LiteNetLibCommunicatorBase.cs +++ b/Shared/Network/LiteNetLib/LiteNetLibCommunicatorBase.cs @@ -60,14 +60,16 @@ public abstract class LiteNetLibCommunicatorBase : Behaviour, INetworkCommunicat catch (Exception exception) { logger?.LogException(this, exception, force: true); } } + protected abstract IConnection GetConnection(NetPeer peer); private void ConnectionEstablished(NetPeer peer) { - LiteNetLibConnection connection = new(peer); + IConnection connection = GetConnection(peer); _connections.Add(connection.Id, connection); logger?.Log(this, $"Connection established with ip '{peer.Address}' and id '{connection.Id}'"); OnConnectionEstablished.Invoke(this, connection); } + private void ConnectionAbolished(NetPeer peer, DisconnectInfo disconnectInfo) { if (!_connections.TryGetValue(peer.Id.ToString(), out var connection)) diff --git a/Shared/Network/LiteNetLib/LiteNetLibServer.cs b/Shared/Network/LiteNetLib/LiteNetLibServer.cs index db80cc3..9fdadb8 100644 --- a/Shared/Network/LiteNetLib/LiteNetLibServer.cs +++ b/Shared/Network/LiteNetLib/LiteNetLibServer.cs @@ -25,6 +25,8 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator Listener.ConnectionRequestEvent += OnConnectionRequest; } + protected override IConnection GetConnection(NetPeer peer) => new LiteNetLibClientConnection(peer); + private void OnConnectionRequest(ConnectionRequest request) { logger?.Log(this, $"Connection request from ip {request.RemoteEndPoint}"); diff --git a/Shared/Network/LiteNetLib/LiteNetLibServerConnection.cs b/Shared/Network/LiteNetLib/LiteNetLibServerConnection.cs new file mode 100644 index 0000000..7596a85 --- /dev/null +++ b/Shared/Network/LiteNetLib/LiteNetLibServerConnection.cs @@ -0,0 +1,12 @@ +using LiteNetLib; + +namespace Syntriax.Engine.Network; + +public record class LiteNetLibServerConnection(NetPeer NetPeer) : IConnection +{ + public string Id { get; } = NetPeer.RemoteId.ToString(); + public float Ping => NetPeer.Ping * .001f; + public float RoundTrip => NetPeer.RoundTripTime * .001f; + + public override string ToString() => $"Connection({Id})"; +}