From 9b2d508a2036ed5f0dcabbfc6121c888b6645838 Mon Sep 17 00:00:00 2001 From: Sanae Date: Mon, 14 Feb 2022 14:40:42 -0600 Subject: [PATCH] Fix a connect packet read among us --- Server/Program.cs | 14 +++++++++++++- Server/Server.cs | 10 +++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Server/Program.cs b/Server/Program.cs index 530df5c..ae59899 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -1,9 +1,11 @@ using System.Collections.Concurrent; using Server; using Shared.Packet.Packets; +using Timer = System.Timers.Timer; Server.Server server = new Server.Server(); -ConcurrentBag shineBag = new ConcurrentBag(); +HashSet shineBag = new HashSet(); +int shineTx = 0; // used for logging server.ClientJoined += async (c, type) => { c.Metadata["shineSync"] = new ConcurrentBag(); @@ -23,6 +25,14 @@ async void SyncShineBag() { }); } +Timer timer = new Timer(120000); +timer.AutoReset = true; +timer.Enabled = true; +timer.Elapsed += (_, _) => { + SyncShineBag(); +}; +timer.Start(); + server.PacketHandler += async (c, p) => { switch (p) { case CostumePacket: @@ -33,6 +43,8 @@ server.PacketHandler += async (c, p) => { if (c.Metadata["loadedSave"] is false) return; ConcurrentBag playerBag = (ConcurrentBag) c.Metadata["shineSync"]; shineBag.Add(shinePacket.ShineId); + if (playerBag.Contains(shinePacket.ShineId)) return; + Console.WriteLine($"{c.Name} got {shinePacket.ShineId}"); playerBag.Add(shinePacket.ShineId); SyncShineBag(); break; diff --git a/Server/Server.cs b/Server/Server.cs index 9ab9df8..32be0a6 100644 --- a/Server/Server.cs +++ b/Server/Server.cs @@ -107,7 +107,8 @@ public class Server { first = false; if (header.Type != PacketType.Connect) throw new Exception($"First packet was not init, instead it was {header.Type}"); - ConnectPacket connect = MemoryMarshal.Read(memory.Memory.Span[Constants.HeaderSize..size]); + ConnectPacket connect = new ConnectPacket(); + connect.Deserialize(memory.Memory.Span[Constants.HeaderSize..size]); lock (Clients) { bool firstConn = false; switch (connect.ConnectionType) { @@ -183,6 +184,13 @@ public class Server { client.CurrentCostume = costumePacket; } + { + if (header.Type is not PacketType.Cap and not PacketType.Player) Logger.Warn($"lol {header.Type}"); + IPacket packet = (IPacket) Activator.CreateInstance(Constants.PacketIdMap[header.Type])!; + packet.Deserialize(memory.Memory.Span[Constants.HeaderSize..]); + PacketHandler?.Invoke(client, packet); + } + await Broadcast(memory, client); } } catch (Exception e) {