public StopServerResult StopServer(ServerModel server) { var serverProcess = GetServerProcess(server); StopServerResult stopServerResult; if (serverProcess != null) { var result = ""; try { _processLogic.StopProcess(serverProcess); } catch (Exception ex) { result = $"{ex.Message} Process Id: {serverProcess.Id}"; } if (result == string.Empty) { stopServerResult = new StopServerResult(StopServerResultType.Success, string.Empty); } else { stopServerResult = new StopServerResult(StopServerResultType.StopProcessFailed, result); } } else { stopServerResult = new StopServerResult(StopServerResultType.ProcessNotFound, string.Empty); } return(stopServerResult); }
internal async static Task <StopServerResponse> TryStopServer(ServerSetting serverSetting) { StopServerResponse response = null; KeyValuePair <string, SDaysTDieServer> keyValuePair = SDaysTDieServersByUserIds.FirstOrDefault(x => x.Value.ServerSettings.WorldGenSeed == serverSetting.WorldGenSeed); SDaysTDieServer sDaysTDieServer = keyValuePair.Value; StopServerResult stopServerResult = StopServerResult.STOPPING; void SDaysTDieServer_OnSDaysTDieServerStoppedHandler(SDaysTDieServer sender, SDaysTDieServer.OnSDaysTDieServerStoppedEventArgs e) { if (e.Message == "*** Shutdown successful ***" || e.Message == "*** Server already down! ***") { stopServerResult = StopServerResult.SERVER_STOPPED; } else if (e.Message == "*** Shutdown done with killing process ***") { stopServerResult = StopServerResult.SERVER_KILLED; } } sDaysTDieServer.OnSDaysTDieServerStoppedHandler += SDaysTDieServer_OnSDaysTDieServerStoppedHandler; keyValuePair.Value.Stop(); async Task <StopServerResponse> CheckServerStopped() { for (int tryShutDownCounter = 40; tryShutDownCounter > 0; tryShutDownCounter--) { if (stopServerResult != StopServerResult.STOPPING) { SDaysTDieServersByUserIds.Remove(keyValuePair.Key); return(new StopServerResponse(stopServerResult)); } await Task.Delay(1000); } return(new StopServerResponse(StopServerResult.FAILED_UNKNOWN_REASON)); } response = await CheckServerStopped(); sDaysTDieServer.OnSDaysTDieServerStoppedHandler -= SDaysTDieServer_OnSDaysTDieServerStoppedHandler; return(response); }