From 57b7eb80139e8402f7af4bceb25ff499f64304db Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 23 Dec 2015 23:19:36 +1100 Subject: [PATCH] Workaround for servers that rarely send LevelDataChunk before LevelBegin due to async sending. (Thanks BPzeBanshee) --- ClassicalSharp/Network/NetworkProcessor.Original.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ClassicalSharp/Network/NetworkProcessor.Original.cs b/ClassicalSharp/Network/NetworkProcessor.Original.cs index f9b8434fa..2d79ce60a 100644 --- a/ClassicalSharp/Network/NetworkProcessor.Original.cs +++ b/ClassicalSharp/Network/NetworkProcessor.Original.cs @@ -82,6 +82,8 @@ namespace ClassicalSharp { } void HandleLevelInit() { + if( gzipStream != null ) + return; game.Map.Reset(); game.SetNewScreen( new LoadingMapScreen( game, ServerName, ServerMotd ) ); if( ServerMotd.Contains( "cfg=" ) ) { @@ -108,6 +110,10 @@ namespace ClassicalSharp { } void HandleLevelDataChunk() { + // Workaround for some servers that send LevelDataChunk before LevelInit + // due to their async packet sending behaviour. + if( gzipStream == null ) + HandleLevelInit(); int usedLength = reader.ReadInt16(); gzippedMap.Position = 0; gzippedMap.SetLength( usedLength ); @@ -149,6 +155,8 @@ namespace ClassicalSharp { sentWomId = true; } gzipStream = null; + ServerName = null; + ServerMotd = null; GC.Collect(); }