diff --git a/di-test/obj/Debug/net6.0/apphost b/di-test/obj/Debug/net6.0/apphost index cb1dd17..a7a9b91 100755 Binary files a/di-test/obj/Debug/net6.0/apphost and b/di-test/obj/Debug/net6.0/apphost differ diff --git a/di-test/obj/Debug/net6.0/di-test.csproj.AssemblyReference.cache b/di-test/obj/Debug/net6.0/di-test.csproj.AssemblyReference.cache index 3defcb8..ad09a68 100644 Binary files a/di-test/obj/Debug/net6.0/di-test.csproj.AssemblyReference.cache and b/di-test/obj/Debug/net6.0/di-test.csproj.AssemblyReference.cache differ diff --git a/multiplayer-game/Program.cs b/multiplayer-game/Program.cs index 5b2a526..59673da 100644 --- a/multiplayer-game/Program.cs +++ b/multiplayer-game/Program.cs @@ -4,10 +4,10 @@ { bool isHost = args.Contains("--host"); // bool isHost = true; - // var game = new MultiPlayerGame(isHost); - // game.Run(); - var p = new Publisher(isHost ? InteractorKind.Server : InteractorKind.Client); - p.Dump(); - Console.WriteLine("Hello World!"); + var game = new MultiPlayerGame(isHost); + game.Run(); + // var p = new Publisher(isHost ? InteractorKind.Server : InteractorKind.Client); + // p.Dump(); + // Console.WriteLine("Hello World!"); } } diff --git a/multiplayer-game/src/backend/Backend.cs b/multiplayer-game/src/backend/Backend.cs index 28db107..226ae6d 100644 --- a/multiplayer-game/src/backend/Backend.cs +++ b/multiplayer-game/src/backend/Backend.cs @@ -6,6 +6,7 @@ using WatsonTcp; class Backend : IBackend { private WatsonTcpServer server; + private Publisher publisher; private Queue pendingPackets = new Queue(); public void Process(double dt) @@ -25,35 +26,16 @@ class Backend : IBackend public void ProcessPacket(ValueType packet) { - var gameState = Context.Get().GameState; - if (packet is MovePacket movePacket) - { - if ( - gameState.PlayerPositions.Find(player => player.name == movePacket.playerName) - is Player player - ) - { - player.movement = movePacket.movement * 4; - } - } - if (packet is ConnectPacket connectPacket) - { - Console.WriteLine($"Player {connectPacket.playerName} connected"); - gameState.PlayerPositions.Add( - new Player - { - name = connectPacket.playerName, - position = new Vector2(50, 50), - movement = new Vector2(0, 0) - } - ); - } + this.publisher.Publish(packet); this.sendGameState(); } public void Init() { Task.Run(Run); + this.publisher = new Publisher( + Context.Get().IsHost ? InteractorKind.Server : InteractorKind.Client + ); } public void Run() diff --git a/multiplayer-game/src/backend/Publisher.cs b/multiplayer-game/src/backend/Publisher.cs index b4ce24f..211439a 100644 --- a/multiplayer-game/src/backend/Publisher.cs +++ b/multiplayer-game/src/backend/Publisher.cs @@ -63,4 +63,16 @@ class Publisher } } } + + public void Publish(ValueType packet) + { + var type = PacketUtils.GetType(packet); + if (subscribers.ContainsKey(type)) + { + foreach (var del in subscribers[type]) + { + del.DynamicInvoke(packet); + } + } + } } diff --git a/multiplayer-game/src/engine/PacketUtils.cs b/multiplayer-game/src/engine/PacketUtils.cs new file mode 100644 index 0000000..f5dc1bf --- /dev/null +++ b/multiplayer-game/src/engine/PacketUtils.cs @@ -0,0 +1,22 @@ +class PacketUtils +{ + public static string GetType(ValueType packet) + { + var t = packet.GetType(); + foreach (var pp in t.GetProperties()) + { + Console.WriteLine(pp.Name); + } + var p = t.GetField("type"); + if (p == null) + { + throw new Exception("p undef"); + } + var v = p.GetValue(packet); + if (v == null) + { + throw new Exception("v undef"); + } + return (string)v; + } +}