Пример #1
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);
        }
Пример #2
0
        private static ConnectTelnetResponse TryConnectTelnet(WebSocketHandler webSocketHandler)
        {
            ServerSetting serverSetting = JsonConvert.DeserializeObject <ServerSetting>(webSocketHandler.ReceivedCommand.CommandData.ToString());

            if (HasUserStartServerAndUseSettingsRights(webSocketHandler, serverSetting) == false)
            {
                return(new ConnectTelnetResponse(ConnectTelnetResult.RIGHT_VIOLATION));
            }

            if (IsServerOfSettingsRunning(serverSetting))
            {
                SDaysTDieServer sDaysTDieServer = SDaysTDieServersByUserIds[serverSetting.UserUuid];
                sDaysTDieServer.ConnectWebsocketHandler(webSocketHandler);
                return(new ConnectTelnetResponse(ConnectTelnetResult.OK));
            }
            else
            {
                return(new ConnectTelnetResponse(ConnectTelnetResult.SERVER_NOT_RUNNING));
            }
        }