From e1a8c9410d494eeff07a842d1cb80271c5ba0c85 Mon Sep 17 00:00:00 2001 From: MasterGordon Date: Fri, 28 Oct 2022 17:44:16 +0200 Subject: [PATCH] added publisher --- di-test/obj/Debug/net6.0/apphost | Bin 142840 -> 142840 bytes .../di-test.csproj.AssemblyReference.cache | Bin 70646 -> 141445 bytes multiplayer-game/Program.cs | 10 +++---- multiplayer-game/src/backend/Backend.cs | 28 ++++-------------- multiplayer-game/src/backend/Publisher.cs | 12 ++++++++ multiplayer-game/src/engine/PacketUtils.cs | 22 ++++++++++++++ 6 files changed, 44 insertions(+), 28 deletions(-) create mode 100644 multiplayer-game/src/engine/PacketUtils.cs diff --git a/di-test/obj/Debug/net6.0/apphost b/di-test/obj/Debug/net6.0/apphost index cb1dd178e725bb281f20c4002506ac01371f4ef0..a7a9b91d232167d5698f02df45d54f39012f85c8 100755 GIT binary patch delta 27881 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 delta 27523 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 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 3defcb8d6da91f6b29716a0cca6cc4e8cbda6da3..ad09a6847b7991f78146a47d8228c15550a930df 100644 GIT binary patch delta 5271 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 A9{>OV delta 36 scmZp@$nkAC3o{$z{OR!=j2_e9iZXIdcN1Y0m~73-)tJ9EpRrvS0NsTPCIA2c 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; + } +}