private void dedicatedProcess_Exited(object sender, EventArgs e) { try { Context.IsCrash = (process.ExitCode != 0) && !Context.WasKilled; process.UnsubscribeEvents(this); try { if (!process.WaitForExit(2000)) { process.Kill(); } } catch { } process = null; talker.UnsubscribeEvents(this); talker?.Close(); talker = null; Thread.Sleep(1000); if (LobbyStartContext != null) { foreach (var p in Context.ActualPlayers) { p.IsIngame = false; } } if (File.Exists(scriptPath)) { try { File.Delete(scriptPath); } catch { } } if (Context.OutputExtras.Count(x => x.StartsWith("award")) == 0) { //No awards received, do a strict majority vote on awards int playersReportingAwards = gamePrivateMessages.Where(x => x.Key.StartsWith("award")).SelectMany(x => x.Value).Distinct().Count(); Context.OutputExtras = gamePrivateMessages.Where(x => x.Value.Count >= playersReportingAwards / 2 + 1).Select(x => x.Key).ToList(); } DedicatedServerExited?.Invoke(this, Context); AnyDedicatedExited?.Invoke(this, Context); } catch (Exception ex) { Trace.TraceError("Error processing dedicated server exit: {0}", ex); } }
private void dedicatedProcess_Exited(object sender, EventArgs e) { try { Context.IsCrash = (process.ExitCode != 0) && !Context.WasKilled; process.UnsubscribeEvents(this); try { if (!process.WaitForExit(2000)) { process.Kill(); } } catch { } process = null; talker.UnsubscribeEvents(this); talker?.Close(); talker = null; Thread.Sleep(1000); if (LobbyStartContext != null) { foreach (var p in Context.ActualPlayers) { p.IsIngame = false; } } if (File.Exists(scriptPath)) { try { File.Delete(scriptPath); } catch { } } DedicatedServerExited?.Invoke(this, Context); AnyDedicatedExited?.Invoke(this, Context); } catch (Exception ex) { Trace.TraceError("Error processing dedicated server exit: {0}", ex); } }
private void springProcess_Exited(object sender, EventArgs e) { var isCrash = process.ExitCode != 0 && !wasKilled; try { if (!process.WaitForExit(2000)) { process.Kill(); } } catch {} process = null; talker.Close(); talker = null; Thread.Sleep(1000); var logText = LogLines.ToString(); ParseInfolog(logText, isCrash); try { File.WriteAllText(Path.Combine(paths.WritableDirectory, string.Format("infolog_{0}.txt", battleResult.EngineBattleID)), logText); } catch (Exception ex) { Trace.TraceWarning("Error saving infolog: {0}", ex); } GameExited = DateTime.Now; if (StartContext != null) { foreach (var p in StartContext.Players) { p.IsIngame = false; } } IsBattleOver = true; if (SpringExited != null) { SpringExited(this, new EventArgs <bool>(isCrash)); } }