Ejemplo n.º 1
0
        private static bool IsPortBlockedBySDaysTDieServer(int port)
        {
            KeyValuePair <string, SDaysTDieServer> keyValuePair = SDaysTDieServersByUserIds.FirstOrDefault(x =>
                                                                                                           x.Value.ServerSettings.ServerPort == port || x.Value.ServerSettings.TelnetPort == port);

            return(keyValuePair.Key != "" && keyValuePair.Key != null);
        }
Ejemplo n.º 2
0
        private static int GetFreePortInRange(int portFrom, int portTo)
        {
            //todo block available channels so we do not need to iterate through all applications
            IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();

            TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();
            List <int> blockedPorts = new List <int>();

            foreach (TcpConnectionInformation tcpi in tcpConnInfoArray)
            {
                blockedPorts.Add(tcpi.LocalEndPoint.Port);
            }
            SDaysTDieServersByUserIds.ForEach((userId, server) =>
            {
                blockedPorts.Add(server.ServerSettings.TelnetPort);
                blockedPorts.Add(server.ServerSettings.ServerPort);
            });
            for (int port = portFrom; port <= portTo; port++)
            {
                if (!blockedPorts.Contains(port))
                {
                    return(port);
                }
            }
            return(0);
        }
Ejemplo n.º 3
0
        private static StartServerResponse StartServerByServerSettings(ServerSettings serverSettings)
        {
            StartServerResponse response;

            try
            {
                //serverSettings.ServerConfigFilepath = serverSettings.ServerConfigFilepath.Replace(".xml", serverSettings.WorldGenSeed + ".xml");
                serverSettings.ServerConfigFilepath = serverSettings.ServerConfigFilepath.Replace(".xml", RandomString(12) + ".xml");
                //todo set ports range from settings
                serverSettings.ServerPort = GetFreePortInRange(26903, 26909);
                serverSettings.TelnetPort = GetFreePortInRange(8083, 8089);
                if (serverSettings.ServerPort == 0 || serverSettings.TelnetPort == 0)
                {
                    return(new StartServerResponse(StartServerResult.NO_FREE_PORT));
                }
                string sDaysToDiePath = SDaysToDiePath;
                if (serverSettings.GameMod != "" && serverSettings.GameMod != "Default")
                {
                    sDaysToDiePath = GetGameFilesPathByGameMod(serverSettings.GameMod);
                    Console.WriteLine("Start Server from Path: '" + sDaysToDiePath + "'");
                }
                serverSettings.SaveToFile(sDaysToDiePath + SEP + serverSettings.ServerConfigFilepath);
                SDaysTDieServersByUserIds.Add(serverSettings.UserUuid, new SDaysTDieServer(sDaysToDiePath, serverSettings));
                SDaysTDieServersByUserIds[serverSettings.UserUuid].Start();
                response = new StartServerResponse(StartServerResult.SERVER_STARTED);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                response = new StartServerResponse(StartServerResult.EXCEPTION);
            }
            return(response);
        }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
        internal static bool IsServerRunningBySeed(string worldGenSeed)
        {
            KeyValuePair <string, SDaysTDieServer> keyValuePair = SDaysTDieServersByUserIds.FirstOrDefault(x => x.Value.ServerSettings.WorldGenSeed == worldGenSeed);

            return(keyValuePair.Key != "" && keyValuePair.Key != null);
        }
Ejemplo n.º 6
0
 private SDaysTDieServer GetServerUserInstance(string userId)
 {
     return(!SDaysTDieServersByUserIds.ContainsKey(userId) ? SDaysTDieServersByUserIds[userId] : null);
 }
Ejemplo n.º 7
0
        private static bool IsServerOfSettingsRunning(ServerSettings serverSettings)
        {
            KeyValuePair <string, SDaysTDieServer> keyValuePair = SDaysTDieServersByUserIds.FirstOrDefault(x => x.Value.ServerSettings.WorldGenSeed == serverSettings.WorldGenSeed);

            return(keyValuePair.Key != "" && keyValuePair.Key != null);
        }
Ejemplo n.º 8
0
 private static bool IsServerCountOfUserExceeding(ServerSettings serverSettings)
 {
     return(SDaysTDieServersByUserIds.ContainsKey(serverSettings.UserUuid));
 }