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); }
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); }
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); }
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 static bool IsServerRunningBySeed(string worldGenSeed) { KeyValuePair <string, SDaysTDieServer> keyValuePair = SDaysTDieServersByUserIds.FirstOrDefault(x => x.Value.ServerSettings.WorldGenSeed == worldGenSeed); return(keyValuePair.Key != "" && keyValuePair.Key != null); }
private SDaysTDieServer GetServerUserInstance(string userId) { return(!SDaysTDieServersByUserIds.ContainsKey(userId) ? SDaysTDieServersByUserIds[userId] : null); }
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); }
private static bool IsServerCountOfUserExceeding(ServerSettings serverSettings) { return(SDaysTDieServersByUserIds.ContainsKey(serverSettings.UserUuid)); }