feat: Test Network
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using LiteNetLib;
|
||||
using LiteNetLib.Utils;
|
||||
|
||||
namespace Syntriax.Engine.Network.Abstract;
|
||||
|
||||
@@ -10,10 +9,4 @@ public interface INetworkCommunicator
|
||||
|
||||
void PollEvents();
|
||||
void Stop();
|
||||
|
||||
void RegisterEntityPacketListener<T>(INetworkEntity networkEntity, EntityPacketReceivedDelegate onPacketReceived) where T : INetSerializable;
|
||||
void UnregisterEntityPacketListener<T>(INetworkEntity networkEntity, EntityPacketReceivedDelegate onPacketReceived) where T : INetSerializable;
|
||||
void SendEntityPacket<T>(INetworkEntity networkEntity, T packet, params NetPeer[] netPeer) where T : INetSerializable;
|
||||
|
||||
delegate void EntityPacketReceivedDelegate(INetworkEntity networkEntity, object packet, NetPeer netPeer);
|
||||
}
|
||||
|
@@ -1,5 +1,3 @@
|
||||
using LiteNetLib.Utils;
|
||||
|
||||
namespace Syntriax.Engine.Network.Abstract;
|
||||
|
||||
public interface INetworkEntity
|
||||
@@ -9,9 +7,4 @@ public interface INetworkEntity
|
||||
uint NetworkId { get; set; }
|
||||
|
||||
delegate void OnNetworkIdChangedDelegate(INetworkEntity sender, uint previousId);
|
||||
delegate void PacketReceivedDelegate(INetworkEntity entity, object packet);
|
||||
|
||||
void RegisterPacketListener<T>(PacketReceivedDelegate onPacketReceived) where T : INetSerializable;
|
||||
void UnregisterPacketListener<T>(PacketReceivedDelegate onPacketReceived) where T : INetSerializable;
|
||||
void SendPacket<T>(T packet) where T : INetSerializable;
|
||||
}
|
||||
|
@@ -1,21 +1,7 @@
|
||||
using LiteNetLib.Utils;
|
||||
|
||||
namespace Syntriax.Engine.Network.Abstract;
|
||||
|
||||
public class NetworkPacket<T>()
|
||||
: INetSerializable
|
||||
where T : INetSerializable
|
||||
public class NetworkPacket<T>
|
||||
{
|
||||
public uint NetworkId = 0;
|
||||
public T Data = default!;
|
||||
|
||||
public void Deserialize(NetDataReader reader)
|
||||
{
|
||||
NetworkId = reader.GetUInt();
|
||||
}
|
||||
|
||||
public void Serialize(NetDataWriter writer)
|
||||
{
|
||||
writer.Put(NetworkId);
|
||||
}
|
||||
public uint NetworkId { get; set; } = 0;
|
||||
public T Data { get; set; } = default!;
|
||||
}
|
||||
|
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
||||
using LiteNetLib;
|
||||
using LiteNetLib.Utils;
|
||||
|
||||
@@ -15,7 +14,6 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator
|
||||
private readonly NetPacketProcessor netPacketProcessor = new();
|
||||
|
||||
private readonly Dictionary<uint, INetworkEntity> networkEntities = [];
|
||||
private readonly Dictionary<Type, List<INetworkCommunicator.EntityPacketReceivedDelegate>> callbacks = [];
|
||||
|
||||
private BehaviourCollector<INetworkEntity> networkEntityCollector = null!;
|
||||
|
||||
@@ -30,6 +28,12 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator
|
||||
Manager = new NetManager(Listener);
|
||||
|
||||
Listener.NetworkReceiveEvent += NetworkReceiveEvent;
|
||||
netPacketProcessor.SubscribeReusable<NetworkPacket<int>, NetPeer>(OnPacketArrived);
|
||||
}
|
||||
|
||||
private void OnPacketArrived(NetworkPacket<int> packet, NetPeer peer)
|
||||
{
|
||||
Debug.WriteLine($"Packet Arrived for {packet.NetworkId}: {packet.Data}");
|
||||
}
|
||||
|
||||
protected override void OnInitialize()
|
||||
@@ -40,6 +44,7 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator
|
||||
networkEntityCollector.OnCollected += OnNetworkEntityCollected;
|
||||
networkEntityCollector.OnRemoved += OnNetworkEntityRemoved;
|
||||
}
|
||||
|
||||
protected override void OnFinalize()
|
||||
{
|
||||
networkEntityCollector.OnCollected -= OnNetworkEntityCollected;
|
||||
@@ -62,48 +67,4 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator
|
||||
public void Stop() => Manager.Stop();
|
||||
|
||||
protected override void OnUpdate() => PollEvents();
|
||||
|
||||
public void RegisterEntityPacketListener<T>(INetworkEntity networkEntity, INetworkCommunicator.EntityPacketReceivedDelegate onPacketReceived) where T : INetSerializable
|
||||
{
|
||||
if (!callbacks.TryGetValue(typeof(T), out var list))
|
||||
{
|
||||
list = [];
|
||||
callbacks.Add(typeof(T), list);
|
||||
netPacketProcessor.SubscribeReusable<NetworkPacket<T>, NetPeer>(OnPacketReceived);
|
||||
}
|
||||
|
||||
if (list.Contains(onPacketReceived))
|
||||
return;
|
||||
|
||||
list.Add(onPacketReceived);
|
||||
}
|
||||
|
||||
public void UnregisterEntityPacketListener<T>(INetworkEntity networkEntity, INetworkCommunicator.EntityPacketReceivedDelegate onPacketReceived) where T : INetSerializable
|
||||
{
|
||||
if (!callbacks.TryGetValue(typeof(T), out var list))
|
||||
return;
|
||||
|
||||
list.Remove(onPacketReceived);
|
||||
}
|
||||
|
||||
public void SendEntityPacket<T>(INetworkEntity networkEntity, T packet, params NetPeer[] netPeers) where T : INetSerializable
|
||||
{
|
||||
NetworkPacket<T> networkPacket = new() { NetworkId = networkEntity.NetworkId, Data = packet };
|
||||
NetDataWriter netDataWriter = new();
|
||||
netPacketProcessor.Write(netDataWriter, networkPacket);
|
||||
foreach (var netPeer in netPeers)
|
||||
netPeer.Send(netDataWriter, DeliveryMethod.ReliableOrdered);
|
||||
}
|
||||
|
||||
private void OnPacketReceived<T>(NetworkPacket<T> packet, NetPeer peer) where T : INetSerializable
|
||||
{
|
||||
Debug.WriteLine($"Packet Received: {packet.NetworkId} - {typeof(T)}");
|
||||
|
||||
if (!callbacks.TryGetValue(typeof(T), out var list))
|
||||
return;
|
||||
|
||||
INetworkEntity networkEntity = networkEntities[packet.NetworkId];
|
||||
foreach (INetworkCommunicator.EntityPacketReceivedDelegate callback in list)
|
||||
callback.Invoke(networkEntity, packet, peer);
|
||||
}
|
||||
}
|
||||
|
@@ -48,21 +48,4 @@ public abstract class NetworkBehaviour : BehaviourOverride, INetworkBehaviour
|
||||
|
||||
IsServer = true;
|
||||
}
|
||||
|
||||
public void RegisterPacketListener<T>(INetworkEntity.PacketReceivedDelegate onPacketReceived) where T : INetSerializable
|
||||
|
||||
private void OnEntityPacketReceived(INetworkEntity networkEntity, object packet, NetPeer netPeer)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void UnregisterPacketListener<T>(INetworkEntity.PacketReceivedDelegate onPacketReceived) where T : INetSerializable
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SendPacket<T>(T packet) where T : INetSerializable
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
@@ -1,3 +1,5 @@
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using Syntriax.Engine.Network.Abstract;
|
||||
|
||||
namespace Syntriax.Engine.Network;
|
||||
|
@@ -1,3 +1,5 @@
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using Syntriax.Engine.Network.Abstract;
|
||||
|
||||
namespace Syntriax.Engine.Network;
|
||||
|
Reference in New Issue
Block a user