diff --git a/Game/Behaviours/PaddleBehaviour.cs b/Game/Behaviours/PaddleBehaviour.cs index e72e961..eca82ff 100644 --- a/Game/Behaviours/PaddleBehaviour.cs +++ b/Game/Behaviours/PaddleBehaviour.cs @@ -67,10 +67,11 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp public override void ReceiveData(T data) { - if (data is PaddleInputs paddleInputs) - { - System.Diagnostics.Debug.WriteLine($"Paddle Inputs Arrived: {paddleInputs.IsUpPressed}, {paddleInputs.IsDownPressed}"); - } + if (data is not PaddleInputs paddleInputs) + return; + + isUpPressed = paddleInputs.IsUpPressed; + isDownPressed = paddleInputs.IsDownPressed; } [System.Serializable] diff --git a/Game/GamePong.cs b/Game/GamePong.cs index b2f121a..1f78a4f 100644 --- a/Game/GamePong.cs +++ b/Game/GamePong.cs @@ -87,6 +87,9 @@ public class GamePong : Game Window.Title = $"Pong - Client -> 127.0.0.1"; } + IGameObject gameObjectNetworkManager = gameManager.InstantiateGameObject().SetGameObject("Network Manager"); ; + gameObjectNetworkManager.BehaviourController.AddBehaviour(); + //////////////////////////////////////////////////////////////////////////////////// IGameObject gameObjectCamera = gameManager.InstantiateGameObject().SetGameObject("Camera"); ; diff --git a/Game/Network/NetworkBase.cs b/Game/Network/NetworkBase.cs index 70f314c..660b216 100644 --- a/Game/Network/NetworkBase.cs +++ b/Game/Network/NetworkBase.cs @@ -42,24 +42,25 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator .Where(t => typeof(INetworkPacket).IsAssignableFrom(t) && !t.IsInterface) .ToList(); - // MethodInfo subscribeMethod = netPacketProcessor.GetType() - // .GetMethod(nameof(NetPacketProcessor.SubscribeReusable), [typeof(Action<,>)]); - MethodInfo[] subscribeMethods = netPacketProcessor.GetType() .GetMethods() .Where(m => m.Name == nameof(NetPacketProcessor.SubscribeReusable)) .ToArray(); MethodInfo subscribeMethod = subscribeMethods - .FirstOrDefault(m => m.GetParameters().Length == 1 && - m.GetParameters()[0].ParameterType.GetGenericTypeDefinition() == typeof(Action<,>)); + .FirstOrDefault(m => + m.GetParameters().Length == 1 && + m.GetParameters()[0].ParameterType.GetGenericTypeDefinition() == typeof(Action<,>) + ) ?? throw new Exception(); MethodInfo[] methodInfos = typeof(NetworkBase) - .GetMethods(BindingFlags.NonPublic | BindingFlags.Instance); - MethodInfo method = methodInfos - .FirstOrDefault(m => m.Name == "OnPacketArrived" && m.IsGenericMethod); + .GetMethods(BindingFlags.NonPublic | BindingFlags.Instance); - // .GetMethod(nameof(OnPacketArrived), BindingFlags.NonPublic | BindingFlags.Instance) ?? throw new Exception(); + MethodInfo method = methodInfos + .FirstOrDefault( + m => m.Name == nameof(OnPacketArrived) && + m.IsGenericMethodDefinition + ) ?? throw new Exception(); foreach (var packetType in packetTypes) { @@ -68,39 +69,15 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator Action handler = (packet, peer) => { - method = method.MakeGenericMethod(packetType); - method.Invoke(this, [packet, peer]); + MethodInfo handlerMethod = method.MakeGenericMethod(packetType); + handlerMethod.Invoke(this, [packet, peer]); }; genericSubscribe.Invoke(netPacketProcessor, [handler]); } } - // private void RegisterPackets() - // { - // IEnumerable packetTypes = Assembly.GetExecutingAssembly().GetTypes().Where( - // t => t.GetInterfaces().Contains(typeof(INetworkPacket)) - // ); - // MethodInfo subscribeMethod = netPacketProcessor.GetType() - // .GetMethod(nameof(NetPacketProcessor.SubscribeReusable), [typeof(Action<,>)]) ?? throw new Exception(); - - // foreach (var packetType in packetTypes) - // { - // MethodInfo genericSubscribe = subscribeMethod.MakeGenericMethod(packetType, typeof(NetPeer)); - // Action handler = (packet, peer) => - // { - // MethodInfo method = GetType() - // .GetMethod(nameof(OnPacketArrived), BindingFlags.NonPublic | BindingFlags.Instance) ?? throw new Exception(); - // method = method.MakeGenericMethod(packetType.GetGenericArguments()[0]); - // method.Invoke(this, [packet, peer]); - // }; - // genericSubscribe.Invoke(netPacketProcessor, [handler]); - // } - // } - - private void OnPacketArrived(NetworkPacket packet, NetPeer peer) where T : INetworkPacket//OnPacketArrived(NetworkPacket packet, NetPeer peer) + private void OnPacketArrived(NetworkPacket packet, NetPeer peer) where T : INetworkPacket { - // Handle packet - Console.WriteLine($"Packet of type {typeof(T)} arrived with data: {packet.Data}"); if (networkEntities.TryGetValue(packet.NetworkId, out INetworkEntity? entity)) entity.ReceiveData(packet.Data); @@ -147,7 +124,11 @@ public abstract class NetworkBase : BehaviourOverride, INetworkCommunicator private void NetworkReceiveEvent(NetPeer peer, NetPacketReader reader, byte channel, DeliveryMethod deliveryMethod) { - netPacketProcessor.ReadAllPackets(reader, peer); + try + { + netPacketProcessor.ReadAllPackets(reader, peer); + } + catch { } } public void PollEvents() => Manager.PollEvents(); diff --git a/Game/Network/NetworkBehaviour.cs b/Game/Network/NetworkBehaviour.cs index 7ff1bf5..6fd3ef9 100644 --- a/Game/Network/NetworkBehaviour.cs +++ b/Game/Network/NetworkBehaviour.cs @@ -15,9 +15,6 @@ public abstract class NetworkBehaviour : BehaviourOverride, INetworkBehaviour get => _networkId; set { - if (!IsServer) - return; - if (value == _networkId) return; diff --git a/Game/Network/NetworkServer.cs b/Game/Network/NetworkServer.cs index 47a2731..1fc3abe 100644 --- a/Game/Network/NetworkServer.cs +++ b/Game/Network/NetworkServer.cs @@ -1,4 +1,6 @@ using System; +using System.Linq; +using System.Reflection; using LiteNetLib.Utils; using Syntriax.Engine.Network.Abstract; @@ -47,5 +49,19 @@ public class NetworkServer : NetworkBase, INetworkCommunicatorServer } private void ServerOnPacketReceived(INetworkCommunicator sender, object packet) - => Send((NetworkPacket)packet); + { + MethodInfo[] methodInfos = GetType() + .GetMethods(BindingFlags.Public | BindingFlags.Instance); + + MethodInfo method = methodInfos + .FirstOrDefault( + m => m.Name == nameof(Send) && m.IsGenericMethod + ) ?? throw new Exception(); + + Type typeArguments = packet.GetType().GetGenericArguments()[0]; + + MethodInfo methodInfo = method.MakeGenericMethod(typeArguments); + + methodInfo.Invoke(this, [packet]); + } }