refactor: client & server connections separated for id tracking

This commit is contained in:
Syntriax 2025-07-06 17:22:50 +03:00
parent 9f8578af9b
commit 08f52e9b72
5 changed files with 21 additions and 3 deletions

View File

@ -15,6 +15,8 @@ public class LiteNetLibClient : LiteNetLibCommunicatorBase, INetworkCommunicator
private CancellationTokenSource? cancellationTokenSource = null; private CancellationTokenSource? cancellationTokenSource = null;
protected override IConnection GetConnection(NetPeer peer) => new LiteNetLibServerConnection(peer);
public INetworkCommunicatorClient Connect(string address, int port, string? password = null) public INetworkCommunicatorClient Connect(string address, int port, string? password = null)
{ {
if (!UniverseObject.IsInUniverse) if (!UniverseObject.IsInUniverse)

View File

@ -2,11 +2,11 @@ using LiteNetLib;
namespace Syntriax.Engine.Network; 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 string Id { get; } = NetPeer.Id.ToString();
public float Ping => NetPeer.Ping * .001f; public float Ping => NetPeer.Ping * .001f;
public float RoundTrip => NetPeer.RoundTripTime * .001f; public float RoundTrip => NetPeer.RoundTripTime * .001f;
public override string ToString() => $"Client({Id})"; public override string ToString() => $"Connection({Id})";
} }

View File

@ -60,14 +60,16 @@ public abstract class LiteNetLibCommunicatorBase : Behaviour, INetworkCommunicat
catch (Exception exception) { logger?.LogException(this, exception, force: true); } catch (Exception exception) { logger?.LogException(this, exception, force: true); }
} }
protected abstract IConnection GetConnection(NetPeer peer);
private void ConnectionEstablished(NetPeer peer) private void ConnectionEstablished(NetPeer peer)
{ {
LiteNetLibConnection connection = new(peer); IConnection connection = GetConnection(peer);
_connections.Add(connection.Id, connection); _connections.Add(connection.Id, connection);
logger?.Log(this, $"Connection established with ip '{peer.Address}' and id '{connection.Id}'"); logger?.Log(this, $"Connection established with ip '{peer.Address}' and id '{connection.Id}'");
OnConnectionEstablished.Invoke(this, connection); OnConnectionEstablished.Invoke(this, connection);
} }
private void ConnectionAbolished(NetPeer peer, DisconnectInfo disconnectInfo) private void ConnectionAbolished(NetPeer peer, DisconnectInfo disconnectInfo)
{ {
if (!_connections.TryGetValue(peer.Id.ToString(), out var connection)) if (!_connections.TryGetValue(peer.Id.ToString(), out var connection))

View File

@ -25,6 +25,8 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator
Listener.ConnectionRequestEvent += OnConnectionRequest; Listener.ConnectionRequestEvent += OnConnectionRequest;
} }
protected override IConnection GetConnection(NetPeer peer) => new LiteNetLibClientConnection(peer);
private void OnConnectionRequest(ConnectionRequest request) private void OnConnectionRequest(ConnectionRequest request)
{ {
logger?.Log(this, $"Connection request from ip {request.RemoteEndPoint}"); logger?.Log(this, $"Connection request from ip {request.RemoteEndPoint}");

View File

@ -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})";
}