feat: Test Network
This commit is contained in:
		@@ -1,16 +1,19 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using Microsoft.Xna.Framework;
 | 
					using Microsoft.Xna.Framework;
 | 
				
			||||||
using Microsoft.Xna.Framework.Graphics;
 | 
					using Microsoft.Xna.Framework.Graphics;
 | 
				
			||||||
using Microsoft.Xna.Framework.Input;
 | 
					using Microsoft.Xna.Framework.Input;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using Pong.Behaviours;
 | 
					 | 
				
			||||||
using Apos.Shapes;
 | 
					using Apos.Shapes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using Pong.Behaviours;
 | 
				
			||||||
 | 
					using Syntriax.Engine.Network;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using Syntriax.Engine.Core;
 | 
					using Syntriax.Engine.Core;
 | 
				
			||||||
using Syntriax.Engine.Core.Abstract;
 | 
					using Syntriax.Engine.Core.Abstract;
 | 
				
			||||||
using Syntriax.Engine.Physics2D;
 | 
					using Syntriax.Engine.Physics2D;
 | 
				
			||||||
using Syntriax.Engine.Physics2D.Primitives;
 | 
					 | 
				
			||||||
using Syntriax.Engine.Physics2D.Abstract;
 | 
					using Syntriax.Engine.Physics2D.Abstract;
 | 
				
			||||||
 | 
					using Syntriax.Engine.Physics2D.Primitives;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Pong;
 | 
					namespace Pong;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,58 +67,81 @@ public class GamePong : Game
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        ////////////////////////////////////////////////////////////////////////////////////
 | 
					        ////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectCamera = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Camera"); ;
 | 
					        string[] commandLineArguments = Environment.GetCommandLineArgs();
 | 
				
			||||||
 | 
					        if (commandLineArguments.Length != 1)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (commandLineArguments[1].Equals("server", StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                gameManager.InstantiateGameObject().BehaviourController.AddBehaviour<NetworkServer>().Start(8888, 2);
 | 
				
			||||||
 | 
					                Window.Title = "Pong - Server";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Window.Title = $"Pong - Client -> {commandLineArguments[1]}";
 | 
				
			||||||
 | 
					                gameManager.InstantiateGameObject().BehaviourController.AddBehaviour<NetworkClient>().Connect(commandLineArguments[1], 8888);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            gameManager.InstantiateGameObject().BehaviourController.AddBehaviour<NetworkClient>().Connect("127.0.0.1", 8888);
 | 
				
			||||||
 | 
					            Window.Title = $"Pong - Client -> 127.0.0.1";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        IGameObject gameObjectCamera = gameManager.InstantiateGameObject().SetGameObject("Camera"); ;
 | 
				
			||||||
        gameObjectCamera.BehaviourController.AddBehaviour<CameraController>();
 | 
					        gameObjectCamera.BehaviourController.AddBehaviour<CameraController>();
 | 
				
			||||||
        cameraBehaviour = gameObjectCamera.BehaviourController.AddBehaviour<MonoGameCamera2DBehaviour>(graphics);
 | 
					        cameraBehaviour = gameObjectCamera.BehaviourController.AddBehaviour<MonoGameCamera2DBehaviour>(graphics);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ////////////////////////////////////////////////////////////////////////////////////
 | 
					        ////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectPongManager = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Pong Game Manager");
 | 
					        IGameObject gameObjectPongManager = gameManager.InstantiateGameObject().SetGameObject("Pong Game Manager");
 | 
				
			||||||
        pongManager = gameObjectPongManager.BehaviourController.AddBehaviour<PongManagerBehaviour>(5);
 | 
					        pongManager = gameObjectPongManager.BehaviourController.AddBehaviour<PongManagerBehaviour>(5);
 | 
				
			||||||
 | 
					        pongManager.Id = "pongManager";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ////////////////////////////////////////////////////////////////////////////////////
 | 
					        ////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectBall = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Ball");
 | 
					        IGameObject gameObjectBall = gameManager.InstantiateGameObject().SetGameObject("Ball");
 | 
				
			||||||
        gameObjectBall.Transform.SetTransform(position: new Vector2D(0, 0f), scale: new Vector2D(10f, 10f));
 | 
					        gameObjectBall.Transform.SetTransform(position: new Vector2D(0, 0f), scale: new Vector2D(10f, 10f));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        gameObjectBall.BehaviourController.AddBehaviour<CircleBehaviour>(new Circle(Vector2D.Zero, 1f));
 | 
					        gameObjectBall.BehaviourController.AddBehaviour<CircleBehaviour>(new Circle(Vector2D.Zero, 1f));
 | 
				
			||||||
        gameObjectBall.BehaviourController.AddBehaviour<BallBehaviour>();
 | 
					        gameObjectBall.BehaviourController.AddBehaviour<BallBehaviour>().Id = "ball";
 | 
				
			||||||
        gameObjectBall.BehaviourController.AddBehaviour<RigidBody2D>();
 | 
					        gameObjectBall.BehaviourController.AddBehaviour<RigidBody2D>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ////////////////////////////////////////////////////////////////////////////////////
 | 
					        ////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectLeftPaddle = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Left Paddle");
 | 
					        IGameObject gameObjectLeftPaddle = gameManager.InstantiateGameObject().SetGameObject("Left Paddle");
 | 
				
			||||||
        gameObjectLeftPaddle.Transform.SetTransform(position: new Vector2D(-468f, 0f), scale: new Vector2D(15f, 60f));
 | 
					        gameObjectLeftPaddle.Transform.SetTransform(position: new Vector2D(-468f, 0f), scale: new Vector2D(15f, 60f));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        gameObjectLeftPaddle.BehaviourController.AddBehaviour<PaddleBehaviour>(Keys.W, Keys.S, 228f, -228f, 400f);
 | 
					        gameObjectLeftPaddle.BehaviourController.AddBehaviour<PaddleBehaviour>(Keys.W, Keys.S, 228f, -228f, 400f).Id = "leftPaddle";
 | 
				
			||||||
        gameObjectLeftPaddle.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
					        gameObjectLeftPaddle.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
				
			||||||
        gameObjectLeftPaddle.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
					        gameObjectLeftPaddle.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectRightPaddle = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Right Paddle");
 | 
					        IGameObject gameObjectRightPaddle = gameManager.InstantiateGameObject().SetGameObject("Right Paddle");
 | 
				
			||||||
        gameObjectRightPaddle.Transform.SetTransform(position: new Vector2D(468f, 0f), scale: new Vector2D(15f, 60f));
 | 
					        gameObjectRightPaddle.Transform.SetTransform(position: new Vector2D(468f, 0f), scale: new Vector2D(15f, 60f));
 | 
				
			||||||
        gameObjectRightPaddle.BehaviourController.AddBehaviour<PaddleBehaviour>(Keys.Up, Keys.Down, 228f, -228f, 400f);
 | 
					        gameObjectRightPaddle.BehaviourController.AddBehaviour<PaddleBehaviour>(Keys.Up, Keys.Down, 228f, -228f, 400f).Id = "rightPaddle";
 | 
				
			||||||
        gameObjectRightPaddle.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
					        gameObjectRightPaddle.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
				
			||||||
        gameObjectRightPaddle.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
					        gameObjectRightPaddle.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ////////////////////////////////////////////////////////////////////////////////////
 | 
					        ////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectWallTop = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Wall Top");
 | 
					        IGameObject gameObjectWallTop = gameManager.InstantiateGameObject().SetGameObject("Wall Top");
 | 
				
			||||||
        gameObjectWallTop.Transform.SetTransform(position: new Vector2D(0f, 308f), scale: new Vector2D(552f, 20f));
 | 
					        gameObjectWallTop.Transform.SetTransform(position: new Vector2D(0f, 308f), scale: new Vector2D(552f, 20f));
 | 
				
			||||||
        gameObjectWallTop.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
					        gameObjectWallTop.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
				
			||||||
        gameObjectWallTop.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
					        gameObjectWallTop.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectWallBottom = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Wall Bottom");
 | 
					        IGameObject gameObjectWallBottom = gameManager.InstantiateGameObject().SetGameObject("Wall Bottom");
 | 
				
			||||||
        gameObjectWallBottom.Transform.SetTransform(position: new Vector2D(0f, -308f), scale: new Vector2D(552f, 20f));
 | 
					        gameObjectWallBottom.Transform.SetTransform(position: new Vector2D(0f, -308f), scale: new Vector2D(552f, 20f));
 | 
				
			||||||
        gameObjectWallBottom.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
					        gameObjectWallBottom.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
				
			||||||
        gameObjectWallBottom.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
					        gameObjectWallBottom.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectWallRight = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Wall Right");
 | 
					        IGameObject gameObjectWallRight = gameManager.InstantiateGameObject().SetGameObject("Wall Right");
 | 
				
			||||||
        gameObjectWallRight.Transform.SetTransform(position: new Vector2D(532f, 0f), scale: new Vector2D(20f, 328f));
 | 
					        gameObjectWallRight.Transform.SetTransform(position: new Vector2D(532f, 0f), scale: new Vector2D(20f, 328f));
 | 
				
			||||||
        gameObjectWallRight.BehaviourController.AddBehaviour<WallScoreBehaviour>((Action)pongManager.ScoreToLeft);
 | 
					        gameObjectWallRight.BehaviourController.AddBehaviour<WallScoreBehaviour>((Action)pongManager.ScoreToLeft);
 | 
				
			||||||
        gameObjectWallRight.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
					        gameObjectWallRight.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
				
			||||||
        gameObjectWallRight.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
					        gameObjectWallRight.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectWallLeft = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Wall Left");
 | 
					        IGameObject gameObjectWallLeft = gameManager.InstantiateGameObject().SetGameObject("Wall Left");
 | 
				
			||||||
        gameObjectWallLeft.Transform.SetTransform(position: new Vector2D(-532f, 0f), scale: new Vector2D(20f, 328f));
 | 
					        gameObjectWallLeft.Transform.SetTransform(position: new Vector2D(-532f, 0f), scale: new Vector2D(20f, 328f));
 | 
				
			||||||
        gameObjectWallLeft.BehaviourController.AddBehaviour<WallScoreBehaviour>((Action)pongManager.ScoreToRight);
 | 
					        gameObjectWallLeft.BehaviourController.AddBehaviour<WallScoreBehaviour>((Action)pongManager.ScoreToRight);
 | 
				
			||||||
        gameObjectWallLeft.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
					        gameObjectWallLeft.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape.Box);
 | 
				
			||||||
@@ -123,11 +149,11 @@ public class GamePong : Game
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        ////////////////////////////////////////////////////////////////////////////////////
 | 
					        ////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectLeftScoreText = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Score Left");
 | 
					        IGameObject gameObjectLeftScoreText = gameManager.InstantiateGameObject().SetGameObject("Score Left");
 | 
				
			||||||
        gameObjectLeftScoreText.Transform.SetTransform(position: new Vector2D(-250f, 250f), scale: Vector2D.One * .25f);
 | 
					        gameObjectLeftScoreText.Transform.SetTransform(position: new Vector2D(-250f, 250f), scale: Vector2D.One * .25f);
 | 
				
			||||||
        gameObjectLeftScoreText.BehaviourController.AddBehaviour<TextScoreBehaviour>(true, spriteFont);
 | 
					        gameObjectLeftScoreText.BehaviourController.AddBehaviour<TextScoreBehaviour>(true, spriteFont);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IGameObject gameObjectRightScoreText = gameManager.InstantiateGameObject<GameObject>().SetGameObject("Score Right");
 | 
					        IGameObject gameObjectRightScoreText = gameManager.InstantiateGameObject().SetGameObject("Score Right");
 | 
				
			||||||
        gameObjectRightScoreText.Transform.SetTransform(position: new Vector2D(250f, 250f), scale: Vector2D.One * .25f);
 | 
					        gameObjectRightScoreText.Transform.SetTransform(position: new Vector2D(250f, 250f), scale: Vector2D.One * .25f);
 | 
				
			||||||
        gameObjectRightScoreText.BehaviourController.AddBehaviour<TextScoreBehaviour>(false, spriteFont);
 | 
					        gameObjectRightScoreText.BehaviourController.AddBehaviour<TextScoreBehaviour>(false, spriteFont);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
using LiteNetLib;
 | 
					using LiteNetLib;
 | 
				
			||||||
using LiteNetLib.Utils;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Syntriax.Engine.Network.Abstract;
 | 
					namespace Syntriax.Engine.Network.Abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,10 +9,4 @@ public interface INetworkCommunicator
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void PollEvents();
 | 
					    void PollEvents();
 | 
				
			||||||
    void Stop();
 | 
					    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;
 | 
					namespace Syntriax.Engine.Network.Abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public interface INetworkEntity
 | 
					public interface INetworkEntity
 | 
				
			||||||
@@ -9,9 +7,4 @@ public interface INetworkEntity
 | 
				
			|||||||
    uint NetworkId { get; set; }
 | 
					    uint NetworkId { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    delegate void OnNetworkIdChangedDelegate(INetworkEntity sender, uint previousId);
 | 
					    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;
 | 
					namespace Syntriax.Engine.Network.Abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class NetworkPacket<T>()
 | 
					public class NetworkPacket<T>
 | 
				
			||||||
    : INetSerializable
 | 
					 | 
				
			||||||
    where T : INetSerializable
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public uint NetworkId = 0;
 | 
					    public uint NetworkId { get; set; } = 0;
 | 
				
			||||||
    public T Data = default!;
 | 
					    public T Data { get; set; } = default!;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void Deserialize(NetDataReader reader)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        NetworkId = reader.GetUInt();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void Serialize(NetDataWriter writer)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        writer.Put(NetworkId);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Diagnostics;
 | 
					using System.Diagnostics;
 | 
				
			||||||
 | 
					 | 
				
			||||||
using LiteNetLib;
 | 
					using LiteNetLib;
 | 
				
			||||||
using LiteNetLib.Utils;
 | 
					using LiteNetLib.Utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -15,7 +14,6 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator
 | 
				
			|||||||
    private readonly NetPacketProcessor netPacketProcessor = new();
 | 
					    private readonly NetPacketProcessor netPacketProcessor = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly Dictionary<uint, INetworkEntity> networkEntities = [];
 | 
					    private readonly Dictionary<uint, INetworkEntity> networkEntities = [];
 | 
				
			||||||
    private readonly Dictionary<Type, List<INetworkCommunicator.EntityPacketReceivedDelegate>> callbacks = [];
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private BehaviourCollector<INetworkEntity> networkEntityCollector = null!;
 | 
					    private BehaviourCollector<INetworkEntity> networkEntityCollector = null!;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -30,6 +28,12 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator
 | 
				
			|||||||
        Manager = new NetManager(Listener);
 | 
					        Manager = new NetManager(Listener);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Listener.NetworkReceiveEvent += NetworkReceiveEvent;
 | 
					        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()
 | 
					    protected override void OnInitialize()
 | 
				
			||||||
@@ -40,6 +44,7 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator
 | 
				
			|||||||
        networkEntityCollector.OnCollected += OnNetworkEntityCollected;
 | 
					        networkEntityCollector.OnCollected += OnNetworkEntityCollected;
 | 
				
			||||||
        networkEntityCollector.OnRemoved += OnNetworkEntityRemoved;
 | 
					        networkEntityCollector.OnRemoved += OnNetworkEntityRemoved;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected override void OnFinalize()
 | 
					    protected override void OnFinalize()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        networkEntityCollector.OnCollected -= OnNetworkEntityCollected;
 | 
					        networkEntityCollector.OnCollected -= OnNetworkEntityCollected;
 | 
				
			||||||
@@ -62,48 +67,4 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator
 | 
				
			|||||||
    public void Stop() => Manager.Stop();
 | 
					    public void Stop() => Manager.Stop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected override void OnUpdate() => PollEvents();
 | 
					    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;
 | 
					        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;
 | 
					using Syntriax.Engine.Network.Abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Syntriax.Engine.Network;
 | 
					namespace Syntriax.Engine.Network;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,5 @@
 | 
				
			|||||||
 | 
					using System.Diagnostics;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using Syntriax.Engine.Network.Abstract;
 | 
					using Syntriax.Engine.Network.Abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Syntriax.Engine.Network;
 | 
					namespace Syntriax.Engine.Network;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user