From eda3d9a533628faf0e1825ee44639118c22a4679 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Mon, 25 Mar 2019 19:51:11 +0200 Subject: [PATCH] (4f62d9b8f) Clients stop reading a network message if EventManager reports an error to the server. Otherwise the reading will fail with an "unknown object header" error, causing the client to disconnect themselves before receiving the more descriptive error message from the server. --- .../BarotraumaClient/Source/Networking/GameClient.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs index 2992282f5..9d1365ce6 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs @@ -1400,6 +1400,7 @@ namespace Barotrauma.Networking ServerNetObject objHeader; while ((objHeader = (ServerNetObject)inc.ReadByte()) != ServerNetObject.END_OF_MESSAGE) { + bool eventReadFailed = false; switch (objHeader) { case ServerNetObject.SYNC_IDS: @@ -1428,7 +1429,11 @@ namespace Barotrauma.Networking break; case ServerNetObject.ENTITY_EVENT: case ServerNetObject.ENTITY_EVENT_INITIAL: - if (!entityEventManager.Read(objHeader, inc, sendingTime, entities)) { break; } + if (!entityEventManager.Read(objHeader, inc, sendingTime, entities)) + { + eventReadFailed = true; + break; + } break; case ServerNetObject.CHAT_MESSAGE: ChatMessage.ClientRead(inc); @@ -1484,6 +1489,11 @@ namespace Barotrauma.Networking prevObjHeader = objHeader; prevBitPos = inc.Position; prevBytePos = inc.PositionInBytes; + + if (eventReadFailed) + { + break; + } } }