/// <summary> /// Called when a game crashed. Displays a message and goes back home. /// </summary> /// <param name="crashMessageType"></param> /// <param name="exception"></param> /// <param name="cartridge"></param> public void HandleGameCrash(CrashMessageType crashMessageType, Exception exception, Cartridge cartridge) { // Prepares the message. StringBuilder sb = new StringBuilder(); sb.Append("A problem occurred while "); switch (crashMessageType) { case CrashMessageType.NewGame: sb.Append("starting a new game"); break; case CrashMessageType.Restore: sb.Append("restoring the saved game"); break; case CrashMessageType.Runtime: sb.Append("running the game"); break; default: sb.Append("running the game"); break; } sb.Append(", therefore Geowigo cannot go on. This most likely happens because of a faulty cartridge"); if (crashMessageType != CrashMessageType.NewGame) { sb.Append(" or savegame"); } sb.Append(".\n\nIf the problem persists, you should contact Geowigo's developers (\"get support\" from the main menu) or the Cartridge owner, "); string cartFullAuthor = cartridge.GetFullAuthor(); sb.Append(cartFullAuthor); AggregateException agex = exception as AggregateException; if (agex == null || (agex != null && agex.InnerExceptions != null && agex.InnerExceptions.Count > 0)) { sb.Append(", quoting the following error messages that were raised during the crash:"); List <string> messages = new List <string>(); if (agex == null) { // In-depth dump of inner exception messages. Exception curex = exception; while (curex != null) { messages.Add(curex.Message); curex = curex.InnerException; } messages.Reverse(); } else { foreach (Exception e in agex.InnerExceptions) { messages.Add(e.Message); } } int i = messages.Count; foreach (string message in messages) { sb.Append("\n" + i-- + "> " + message); } } else { sb.Append("."); } // Prepares the title. string caption = ""; switch (crashMessageType) { case CrashMessageType.NewGame: case CrashMessageType.Restore: caption = "Cannot start game"; break; case CrashMessageType.Runtime: caption = "Cartridge crashed"; break; default: caption = "Game crash"; break; } // Dump a log. DebugUtils.DumpException(exception, String.Format("Exception during play. Cartridge: {0} by {1}", cartridge.Name, cartFullAuthor), false); // Shows a message box. System.Windows.MessageBox.Show( sb.ToString(), caption, MessageBoxButton.OK ); // Goes back! NavigationManager.NavigateToAppHome(true); }
/// <summary> /// Called when a game crashed. Displays a message and goes back home. /// </summary> /// <param name="crashMessageType"></param> /// <param name="exception"></param> /// <param name="cartridge"></param> public void HandleGameCrash(CrashMessageType crashMessageType, Exception exception, Cartridge cartridge) { // Prepares the message. StringBuilder sb = new StringBuilder(); sb.Append("A problem occurred while "); switch (crashMessageType) { case CrashMessageType.NewGame: sb.Append("starting a new game"); break; case CrashMessageType.Restore: sb.Append("restoring the saved game"); break; case CrashMessageType.Runtime: sb.Append("running the game"); break; default: sb.Append("running the game"); break; } sb.Append(", therefore Geowigo cannot go on. This most likely happens because of a faulty cartridge"); if (crashMessageType != CrashMessageType.NewGame) { sb.Append(" or savegame"); } sb.Append(".\n\nIf the problem persists, you should contact the Cartridge owner, "); sb.Append(cartridge.GetFullAuthor()); AggregateException agex = exception as AggregateException; if (agex == null || (agex != null && agex.InnerExceptions != null && agex.InnerExceptions.Count > 0)) { sb.Append(", quoting the following error messages that were raised during the crash:"); List<string> messages = new List<string>(); if (agex == null) { // In-depth dump of inner exception messages. Exception curex = exception; while (curex != null) { messages.Add(curex.Message); curex = curex.InnerException; } messages.Reverse(); } else { foreach (Exception e in agex.InnerExceptions) { messages.Add(e.Message); } } int i = messages.Count; foreach (string message in messages) { sb.Append("\n" + i-- + "> " + message); } } else { sb.Append("."); } // Prepares the title. string caption = ""; switch (crashMessageType) { case CrashMessageType.NewGame: case CrashMessageType.Restore: caption = "Cannot start game"; break; case CrashMessageType.Runtime: caption = "Cartridge crashed"; break; default: caption = "Game crash"; break; } // Shows a message box. System.Windows.MessageBox.Show( sb.ToString(), caption, MessageBoxButton.OK ); // Goes back! App.Current.ViewModel.NavigationManager.NavigateToAppHome(true); }