Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }