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); }
internal async static Task StopServer(WebSocketHandler webSocketHandler) { ServerSetting serverSetting = JsonConvert.DeserializeObject <ServerSetting>(webSocketHandler.ReceivedCommand.CommandData.ToString()); StopServerResponse response = null; if (!IsServerOfSettingsRunning(serverSetting)) { response = new StopServerResponse(StopServerResult.SERVER_NOT_RUNNING); } else if (!HasUserStartServerAndUseSettingsRights(webSocketHandler, serverSetting)) { response = new StopServerResponse(StopServerResult.RIGHT_VIOLATION); } else { response = await TryStopServer(serverSetting); } Command command = new Command("StopServerResponse", response); await webSocketHandler.Send(command); }