private void ClientSocket_OnClose(object sender, CloseEventArgs e) { serverConnection = null; UnityDispatchQueue.RunOnMainThread(() => { // If the client is Quitting by himself, we don't have to inform him of his disconnection. if (e.Code == (ushort)DisconnectionReason.ClientRequestedDisconnect) { return; } // Opens the pause menu on disconnection to prevent NRE when leaving the game if (Multiplayer.Session?.IsGameLoaded ?? false) { GameMain.instance._paused = true; } if (e.Code == (ushort)DisconnectionReason.ModIsMissing) { InGamePopup.ShowWarning( "Mod Mismatch", $"You are missing mod {e.Reason}", "OK".Translate(), Multiplayer.LeaveGame); return; } if (e.Code == (ushort)DisconnectionReason.ModIsMissingOnServer) { InGamePopup.ShowWarning( "Mod Mismatch", $"Server is missing mod {e.Reason}", "OK".Translate(), Multiplayer.LeaveGame); return; } if (e.Code == (ushort)DisconnectionReason.ModVersionMismatch) { string[] versions = e.Reason.Split(';'); InGamePopup.ShowWarning( "Mod Version Mismatch", $"Your mod {versions[0]} version is not the same as the Host version.\nYou:{versions[1]} - Remote:{versions[2]}", "OK".Translate(), Multiplayer.LeaveGame); return; } if (e.Code == (ushort)DisconnectionReason.GameVersionMismatch) { string[] versions = e.Reason.Split(';'); InGamePopup.ShowWarning( "Game Version Mismatch", $"Your version of the game is not the same as the one used by the Host.\nYou:{versions[0]} - Remote:{versions[1]}", "OK".Translate(), Multiplayer.LeaveGame); return; } if (e.Code == (ushort)DisconnectionReason.ProtocolError && websocketAuthenticationFailure) { InGamePopup.AskInput( "Server Requires Password", "Server is protected. Please enter the correct password:"******"Connection Lost", $"You have been disconnected from the server.\n{e.Reason}", "Quit", Multiplayer.LeaveGame); if (Multiplayer.Session.IsInLobby) { Multiplayer.ShouldReturnToJoinMenu = false; Multiplayer.Session.IsInLobby = false; UIRoot.instance.galaxySelect.CancelSelect(); } } else { InGamePopup.ShowWarning( "Server Unavailable", $"Could not reach the server, please try again later.", "OK".Translate(), Multiplayer.LeaveGame); } }); }