From f73b8c530d272dcd1c27f9abd116bf0540852687 Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Wed, 15 Dec 2021 18:25:35 +1000 Subject: [PATCH 1/7] merged individual LoadServerFiles into one method to fetch steam users only once. --- src/ARKServerManager/Lib/ServerProfile.cs | 146 +++++++++--------- .../ServerSettingsControl.xaml.cs | 6 +- src/ConanServerManager/Lib/ServerProfile.cs | 102 ++++++------ .../ServerSettingsControl.xaml.cs | 4 +- 4 files changed, 131 insertions(+), 127 deletions(-) diff --git a/src/ARKServerManager/Lib/ServerProfile.cs b/src/ARKServerManager/Lib/ServerProfile.cs index df939a7c..fcea7349 100644 --- a/src/ARKServerManager/Lib/ServerProfile.cs +++ b/src/ARKServerManager/Lib/ServerProfile.cs @@ -3473,9 +3473,7 @@ namespace ServerManagerTool.Lib { InstallDirectory = folder; - LoadServerFileAdministrators(); - LoadServerFileExclusive(); - LoadServerFileWhitelisted(); + LoadServerFiles(true, true, true); SetupServerFilesWatcher(); } @@ -3561,9 +3559,7 @@ namespace ServerManagerTool.Lib settings.MutagenLevelBoostBred.Reset(); settings.PerLevelStatsMultiplier_Player.Reset(); settings.PlayerBaseStatMultipliers.Reset(); - settings.LoadServerFileAdministrators(); - settings.LoadServerFileExclusive(); - settings.LoadServerFileWhitelisted(); + settings.LoadServerFiles(true, true, true); settings.SetupServerFilesWatcher(); return settings; } @@ -4140,9 +4136,7 @@ namespace ServerManagerTool.Lib if (Config.Default.SectionPreventTransferOverridesEnabled) profile.PreventTransferForClassNames.RenderToView(); - profile.LoadServerFileAdministrators(); - profile.LoadServerFileExclusive(); - profile.LoadServerFileWhitelisted(); + profile.LoadServerFiles(true, true, true); profile.SetupServerFilesWatcher(); profile._lastSaveLocation = file; @@ -6364,18 +6358,24 @@ namespace ServerManagerTool.Lib #region Server Files private void ServerFilesWatcher_Changed(object sender, FileSystemEventArgs e) { + var adminFile = false; + var exclusiveFile = false; + var whitelistFile = false; + if (e.Name.Equals(Config.Default.ArkAdminFile, StringComparison.OrdinalIgnoreCase)) { - TaskUtils.RunOnUIThreadAsync(() => LoadServerFileAdministrators()).DoNotWait(); + adminFile = true; } - else if (e.Name.Equals(Config.Default.ArkExclusiveFile, StringComparison.OrdinalIgnoreCase)) + if (e.Name.Equals(Config.Default.ArkExclusiveFile, StringComparison.OrdinalIgnoreCase)) { - TaskUtils.RunOnUIThreadAsync(() => LoadServerFileExclusive()).DoNotWait(); + exclusiveFile = true; } - else if (e.Name.Equals(Config.Default.ArkWhitelistFile, StringComparison.OrdinalIgnoreCase)) + if (e.Name.Equals(Config.Default.ArkWhitelistFile, StringComparison.OrdinalIgnoreCase)) { - TaskUtils.RunOnUIThreadAsync(() => LoadServerFileWhitelisted()).DoNotWait(); + whitelistFile = true; } + + TaskUtils.RunOnUIThreadAsync(() => LoadServerFiles(adminFile, exclusiveFile, whitelistFile)).DoNotWait(); } private void ServerFilesWatcher_Error(object sender, ErrorEventArgs e) @@ -6447,74 +6447,76 @@ namespace ServerManagerTool.Lib _serverFilesWatcherSaved.EnableRaisingEvents = true; } - public void LoadServerFileAdministrators() + public void LoadServerFiles(bool adminFile, bool exclusiveFile, bool whitelistFile) { try { - var list = this.ServerFilesAdmins ?? new PlayerUserList(); + var list1 = this.ServerFilesAdmins ?? new PlayerUserList(); + var list2 = this.ServerFilesExclusive ?? new PlayerUserList(); + var list3 = this.ServerFilesWhitelisted ?? new PlayerUserList(); - var file = Path.Combine(InstallDirectory, Config.Default.SavedRelativePath, Config.Default.ArkAdminFile); - if (File.Exists(file)) + var allSteamIds = new List(); + string[] adminSteamIds = null; + string[] exclusiveSteamIds = null; + string[] whitelistSteamIds = null; + + if (adminFile) { - var steamIds = File.ReadAllLines(file); - var steamUsers = SteamUtils.GetSteamUserDetails(steamIds.ToList()); - - list = PlayerUserList.GetList(steamUsers, steamIds); + var file = Path.Combine(InstallDirectory, Config.Default.SavedRelativePath, Config.Default.ArkAdminFile); + if (File.Exists(file)) + { + adminSteamIds = File.ReadAllLines(file); + allSteamIds.AddRange(adminSteamIds); + } } - this.ServerFilesAdmins = list; + if (exclusiveFile) + { + var file = Path.Combine(InstallDirectory, Config.Default.ServerBinaryRelativePath, Config.Default.ArkExclusiveFile); + if (File.Exists(file)) + { + exclusiveSteamIds = File.ReadAllLines(file); + allSteamIds.AddRange(exclusiveSteamIds); + } + } + + if (whitelistFile) + { + var file = Path.Combine(InstallDirectory, Config.Default.ServerBinaryRelativePath, Config.Default.ArkWhitelistFile); + if (File.Exists(file)) + { + whitelistSteamIds = File.ReadAllLines(file); + allSteamIds.AddRange(whitelistSteamIds); + } + } + + // remove all duplicates + allSteamIds = allSteamIds.Distinct().ToList(); + + // fetch the details of all steam users in the list + var steamUsers = SteamUtils.GetSteamUserDetails(allSteamIds); + + if (adminFile && adminSteamIds != null) + { + list1 = PlayerUserList.GetList(steamUsers, adminSteamIds); + } + + if (exclusiveFile && exclusiveSteamIds != null) + { + list2 = PlayerUserList.GetList(steamUsers, exclusiveSteamIds); + } + + if (whitelistFile && whitelistSteamIds != null) + { + list3 = PlayerUserList.GetList(steamUsers, whitelistSteamIds); + } + + this.ServerFilesAdmins = list1; + this.ServerFilesExclusive = list2; + this.ServerFilesWhitelisted = list3; } catch (Exception ex) { - this.ServerFilesAdmins = new PlayerUserList(); - MessageBox.Show(ex.Message, _globalizer.GetResourceString("ServerSettings_ServerFilesLoadErrorTitle"), MessageBoxButton.OK, MessageBoxImage.Error); - } - } - - public void LoadServerFileExclusive() - { - try - { - var list = this.ServerFilesExclusive ?? new PlayerUserList(); - - var file = Path.Combine(InstallDirectory, Config.Default.ServerBinaryRelativePath, Config.Default.ArkExclusiveFile); - if (File.Exists(file)) - { - var steamIds = File.ReadAllLines(file); - var steamUsers = SteamUtils.GetSteamUserDetails(steamIds.ToList()); - - list = PlayerUserList.GetList(steamUsers, steamIds); - } - - this.ServerFilesExclusive = list; - } - catch (Exception ex) - { - this.ServerFilesExclusive = new PlayerUserList(); - MessageBox.Show(ex.Message, _globalizer.GetResourceString("ServerSettings_ServerFilesLoadErrorTitle"), MessageBoxButton.OK, MessageBoxImage.Error); - } - } - - public void LoadServerFileWhitelisted() - { - try - { - var list = this.ServerFilesWhitelisted ?? new PlayerUserList(); - - var file = Path.Combine(InstallDirectory, Config.Default.ServerBinaryRelativePath, Config.Default.ArkWhitelistFile); - if (File.Exists(file)) - { - var steamIds = File.ReadAllLines(file); - var steamUsers = SteamUtils.GetSteamUserDetails(steamIds.ToList()); - - list = PlayerUserList.GetList(steamUsers, steamIds); - } - - this.ServerFilesWhitelisted = list; - } - catch (Exception ex) - { - this.ServerFilesWhitelisted = new PlayerUserList(); MessageBox.Show(ex.Message, _globalizer.GetResourceString("ServerSettings_ServerFilesLoadErrorTitle"), MessageBoxButton.OK, MessageBoxImage.Error); } } diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs index 4e39d153..f4bb2897 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -2693,7 +2693,7 @@ namespace ServerManagerTool Application.Current.Dispatcher.Invoke(() => this.Cursor = Cursors.Wait); await Task.Delay(500); - Settings.LoadServerFileAdministrators(); + Settings.LoadServerFiles(true, false, false); } catch (Exception ex) { @@ -2714,7 +2714,7 @@ namespace ServerManagerTool Application.Current.Dispatcher.Invoke(() => this.Cursor = Cursors.Wait); await Task.Delay(500); - Settings.LoadServerFileExclusive(); + Settings.LoadServerFiles(false, true, false); } catch (Exception ex) { @@ -2735,7 +2735,7 @@ namespace ServerManagerTool Application.Current.Dispatcher.Invoke(() => this.Cursor = Cursors.Wait); await Task.Delay(500); - Settings.LoadServerFileWhitelisted(); + Settings.LoadServerFiles(false, false, true); } catch (Exception ex) { diff --git a/src/ConanServerManager/Lib/ServerProfile.cs b/src/ConanServerManager/Lib/ServerProfile.cs index 9e6531e3..1fc71af3 100644 --- a/src/ConanServerManager/Lib/ServerProfile.cs +++ b/src/ConanServerManager/Lib/ServerProfile.cs @@ -688,8 +688,7 @@ namespace ServerManagerTool.Lib { InstallDirectory = folder; - LoadServerFileBlacklisted(); - LoadServerFileWhitelisted(); + LoadServerFiles(true, true); SetupServerFilesWatcher(); } @@ -759,8 +758,7 @@ namespace ServerManagerTool.Lib internal static ServerProfile FromDefaults() { var settings = new ServerProfile(); - settings.LoadServerFileBlacklisted(); - settings.LoadServerFileWhitelisted(); + settings.LoadServerFiles(true, true); settings.SetupServerFilesWatcher(); return settings; } @@ -949,8 +947,7 @@ namespace ServerManagerTool.Lib profile = LoadFromConfigFiles(serverConfigFile, profile); } - profile.LoadServerFileBlacklisted(); - profile.LoadServerFileWhitelisted(); + profile.LoadServerFiles(true, true); profile.SetupServerFilesWatcher(); profile._lastSaveLocation = file; @@ -1536,14 +1533,19 @@ namespace ServerManagerTool.Lib #region Server Files private void ServerFilesWatcher_Changed(object sender, FileSystemEventArgs e) { + var blacklistFile = false; + var whitelistFile = false; + if (e.Name.Equals(Config.Default.ServerBlacklistFile, StringComparison.OrdinalIgnoreCase)) { - TaskUtils.RunOnUIThreadAsync(() => LoadServerFileBlacklisted()).DoNotWait(); + blacklistFile = true; } if (e.Name.Equals(Config.Default.ServerWhitelistFile, StringComparison.OrdinalIgnoreCase)) { - TaskUtils.RunOnUIThreadAsync(() => LoadServerFileWhitelisted()).DoNotWait(); + whitelistFile = true; } + + TaskUtils.RunOnUIThreadAsync(() => LoadServerFiles(blacklistFile, whitelistFile)).DoNotWait(); } private void ServerFilesWatcher_Error(object sender, ErrorEventArgs e) @@ -1589,58 +1591,58 @@ namespace ServerManagerTool.Lib _serverFilesWatcher.EnableRaisingEvents = true; } - public void LoadServerFileBlacklisted() + public void LoadServerFiles(bool blacklistFile, bool whitelistFile) { try { - var list = this.ServerFilesBlacklisted ?? new PlayerUserList(); + var list1 = this.ServerFilesBlacklisted ?? new PlayerUserList(); + var list2 = this.ServerFilesWhitelisted ?? new PlayerUserList(); - var file = Path.Combine(InstallDirectory, Config.Default.SavedFilesRelativePath, Config.Default.ServerBlacklistFile); - if (File.Exists(file)) + var allSteamIds = new List(); + string[] blacklistSteamIds = null; + string[] whitelistSteamIds = null; + + if (blacklistFile) { - var steamIds = File.ReadAllLines(file); - var steamUsers = SteamUtils.GetSteamUserDetails(steamIds.ToList()); - - list = PlayerUserList.GetList(steamUsers, steamIds); + var file = Path.Combine(InstallDirectory, Config.Default.ServerBinaryRelativePath, Config.Default.ServerBlacklistFile); + if (File.Exists(file)) + { + blacklistSteamIds = File.ReadAllLines(file); + allSteamIds.AddRange(blacklistSteamIds); + } } - this.ServerFilesBlacklisted = list; - } - catch (IOException) - { - // do nothing + if (whitelistFile) + { + var file = Path.Combine(InstallDirectory, Config.Default.ServerBinaryRelativePath, Config.Default.ServerWhitelistFile); + if (File.Exists(file)) + { + whitelistSteamIds = File.ReadAllLines(file); + allSteamIds.AddRange(whitelistSteamIds); + } + } + + // remove all duplicates + allSteamIds = allSteamIds.Distinct().ToList(); + + // fetch the details of all steam users in the list + var steamUsers = SteamUtils.GetSteamUserDetails(allSteamIds); + + if (blacklistFile && blacklistSteamIds != null) + { + list1 = PlayerUserList.GetList(steamUsers, blacklistSteamIds); + } + + if (whitelistFile && whitelistSteamIds != null) + { + list2 = PlayerUserList.GetList(steamUsers, whitelistSteamIds); + } + + this.ServerFilesBlacklisted = list1; + this.ServerFilesWhitelisted = list2; } catch (Exception ex) { - this.ServerFilesBlacklisted = new PlayerUserList(); - MessageBox.Show(ex.Message, _globalizer.GetResourceString("ServerSettings_ServerFilesLoadErrorTitle"), MessageBoxButton.OK, MessageBoxImage.Error); - } - } - - public void LoadServerFileWhitelisted() - { - try - { - var list = this.ServerFilesWhitelisted ?? new PlayerUserList(); - - var file = Path.Combine(InstallDirectory, Config.Default.SavedFilesRelativePath, Config.Default.ServerWhitelistFile); - if (File.Exists(file)) - { - var steamIds = File.ReadAllLines(file); - var steamUsers = SteamUtils.GetSteamUserDetails(steamIds.ToList()); - - list = PlayerUserList.GetList(steamUsers, steamIds); - } - - this.ServerFilesWhitelisted = list; - } - catch (IOException) - { - // do nothing - } - catch (Exception ex) - { - this.ServerFilesWhitelisted = new PlayerUserList(); MessageBox.Show(ex.Message, _globalizer.GetResourceString("ServerSettings_ServerFilesLoadErrorTitle"), MessageBoxButton.OK, MessageBoxImage.Error); } } diff --git a/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs index 615db47b..622295a7 100644 --- a/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -1130,7 +1130,7 @@ namespace ServerManagerTool Application.Current.Dispatcher.Invoke(() => this.Cursor = Cursors.Wait); await Task.Delay(500); - Settings.LoadServerFileBlacklisted(); + Settings.LoadServerFiles(true, false); } catch (Exception ex) { @@ -1151,7 +1151,7 @@ namespace ServerManagerTool Application.Current.Dispatcher.Invoke(() => this.Cursor = Cursors.Wait); await Task.Delay(500); - Settings.LoadServerFileWhitelisted(); + Settings.LoadServerFiles(false, true); } catch (Exception ex) { From 5c06fd00d524b0883b6d79f6b84c8905b828eb2a Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Wed, 15 Dec 2021 21:31:04 +1000 Subject: [PATCH 2/7] Deserialize code optimisations 1. reading ini files 2. regex match of section names. --- .../Serialization/BaseSystemIniFile.cs | 201 +++++++++++------- .../Utils/IniFileUtils.cs | 22 +- 2 files changed, 143 insertions(+), 80 deletions(-) diff --git a/src/ServerManager.Common/Serialization/BaseSystemIniFile.cs b/src/ServerManager.Common/Serialization/BaseSystemIniFile.cs index 7956d173..75272603 100644 --- a/src/ServerManager.Common/Serialization/BaseSystemIniFile.cs +++ b/src/ServerManager.Common/Serialization/BaseSystemIniFile.cs @@ -35,26 +35,35 @@ namespace ServerManagerTool.Common.Serialization public void Deserialize(object obj, Enum[] exclusions) { var iniFiles = new Dictionary(); - var fields = obj.GetType().GetProperties().Where(f => f.IsDefined(typeof(BaseIniFileEntryAttribute), false)); + var fields = obj.GetType() + .GetProperties() + .Where(f => f.IsDefined(typeof(BaseIniFileEntryAttribute), false)); if (exclusions == null) + { exclusions = new Enum[0]; + } foreach (var field in fields) { - var attributes = field.GetCustomAttributes(typeof(BaseIniFileEntryAttribute), false); - foreach (var attr in attributes.OfType()) + var attributes = field + .GetCustomAttributes(typeof(BaseIniFileEntryAttribute), false) + .OfType() + .Where(a => !exclusions.Contains(a.Category)); + + foreach (var attr in attributes) { if (exclusions.Contains(attr.Category)) + { continue; + } try { if (attr.IsCustom) { // this code is to handle custom sections - var collection = field.GetValue(obj) as IIniSectionCollection; - if (collection != null) + if (field.GetValue(obj) is IIniSectionCollection collection) { ReadFile(iniFiles, attr.File); @@ -77,61 +86,76 @@ namespace ServerManagerTool.Common.Serialization } else { - var iniValue = ReadValue(iniFiles, attr.File, attr.Section, keyName); - var fieldType = field.PropertyType; - var collection = field.GetValue(obj) as IIniValuesCollection; - - if (collection != null) + if (field.GetValue(obj) is IIniValuesCollection collection) { var section = ReadSection(iniFiles, attr.File, attr.Section); - var filteredSection = collection.IsArray - ? section.Where(s => s.StartsWith(collection.IniCollectionKey + "[")) + var filteredSection = collection.IsArray + ? section.Where(s => s.StartsWith(collection.IniCollectionKey + "[")) : section.Where(s => s.StartsWith(collection.IniCollectionKey + "=")); collection.FromIniValues(filteredSection); } - else if (fieldType == typeof(string)) - { - var stringValue = iniValue; - if (attr.QuotedString == QuotedStringType.True) - { - // remove the leading and trailing quotes, if any - if (stringValue.StartsWith("\"")) - stringValue = stringValue.Substring(1); - if (stringValue.EndsWith("\"")) - stringValue = stringValue.Substring(0, stringValue.Length - 1); - } - else if (attr.QuotedString == QuotedStringType.Remove) - { - // remove the leading and trailing quotes, if any - if (stringValue.StartsWith("\"")) - stringValue = stringValue.Substring(1); - if (stringValue.EndsWith("\"")) - stringValue = stringValue.Substring(0, stringValue.Length - 1); - } - if (attr.Multiline) - { - stringValue = stringValue.Replace(attr.MultilineSeparator, Environment.NewLine); - } - field.SetValue(obj, stringValue); - } else { - if (string.IsNullOrWhiteSpace(iniValue)) + var iniValue = ReadValue(iniFiles, attr.File, attr.Section, keyName); + + var fieldType = field.PropertyType; + if (fieldType == typeof(string)) { - // Skip non-string values which are not found - continue; + var stringValue = iniValue; + if (attr.QuotedString == QuotedStringType.True) + { + // remove the leading and trailing quotes, if any + if (stringValue.StartsWith("\"")) + { + stringValue = stringValue.Substring(1); + } + + if (stringValue.EndsWith("\"")) + { + stringValue = stringValue.Substring(0, stringValue.Length - 1); + } + } + else if (attr.QuotedString == QuotedStringType.Remove) + { + // remove the leading and trailing quotes, if any + if (stringValue.StartsWith("\"")) + { + stringValue = stringValue.Substring(1); + } + + if (stringValue.EndsWith("\"")) + { + stringValue = stringValue.Substring(0, stringValue.Length - 1); + } + } + if (attr.Multiline) + { + stringValue = stringValue.Replace(attr.MultilineSeparator, Environment.NewLine); + } + field.SetValue(obj, stringValue); + } + else + { + if (string.IsNullOrWhiteSpace(iniValue)) + { + // Skip non-string values which are not found + continue; + } + + // Update the ConditionedOn flag, if this field has one. + if (!string.IsNullOrWhiteSpace(attr.ConditionedOn)) + { + var conditionField = obj.GetType().GetProperty(attr.ConditionedOn); + conditionField.SetValue(obj, true); + } + + var valueSet = StringUtils.SetPropertyValue(iniValue, obj, field, attr); + if (!valueSet) + { + throw new ArgumentException($"Unexpected field type {fieldType} for INI key {keyName} in section {attr.Section}."); + } } - // Update the ConditionedOn flag, if this field has one. - if (!string.IsNullOrWhiteSpace(attr.ConditionedOn)) - { - var conditionField = obj.GetType().GetProperty(attr.ConditionedOn); - conditionField.SetValue(obj, true); - } - - var valueSet = StringUtils.SetPropertyValue(iniValue, obj, field, attr); - if (!valueSet) - throw new ArgumentException($"Unexpected field type {fieldType} for INI key {keyName} in section {attr.Section}."); } } } @@ -147,26 +171,30 @@ namespace ServerManagerTool.Common.Serialization public void Serialize(object obj, Enum[] exclusions) { var iniFiles = new Dictionary(); - var fields = obj.GetType().GetProperties().Where(f => f.IsDefined(typeof(BaseIniFileEntryAttribute), false)); + var fields = obj.GetType() + .GetProperties() + .Where(f => f.IsDefined(typeof(BaseIniFileEntryAttribute), false)); if (exclusions == null) + { exclusions = new Enum[0]; + } foreach (var field in fields) { - var attributes = field.GetCustomAttributes(typeof(BaseIniFileEntryAttribute), false).OfType(); + var attributes = field + .GetCustomAttributes(typeof(BaseIniFileEntryAttribute), false) + .OfType() + .Where(a => !exclusions.Contains(a.Category)); + foreach (var attr in attributes) { - if (exclusions.Contains(attr.Category)) - continue; - try { if (attr.IsCustom) { // this code is to handle custom sections - var collection = field.GetValue(obj) as IIniSectionCollection; - if (collection != null) + if (field.GetValue(obj) is IIniSectionCollection collection) { collection.Update(); @@ -372,15 +400,20 @@ namespace ServerManagerTool.Common.Serialization public void WriteSection(Enum iniFile, string sectionName, string[] values) { var file = Path.Combine(this.BasePath, FileNames[iniFile]); - var result = IniFileUtils.WriteSection(file, sectionName, values); + IniFileUtils.WriteSection(file, sectionName, values); } private string[] ReadCustomSectionNames(Dictionary iniFiles, Enum iniFile) { - ReadFile(iniFiles, iniFile); - if (!iniFiles.ContainsKey(FileNames[iniFile])) - return new string[0]; + { + ReadFile(iniFiles, iniFile); + + if (!iniFiles.ContainsKey(FileNames[iniFile])) + { + return new string[0]; + } + } return iniFiles[FileNames[iniFile]].Sections.Select(s => s.SectionName).Where(s => !SectionNames.ContainsValue(s)).ToArray(); } @@ -392,20 +425,30 @@ namespace ServerManagerTool.Common.Serialization private string[] ReadSection(Dictionary iniFiles, Enum iniFile, string sectionName) { - ReadFile(iniFiles, iniFile); - if (!iniFiles.ContainsKey(FileNames[iniFile])) - return new string[0]; + { + ReadFile(iniFiles, iniFile); + + if (!iniFiles.ContainsKey(FileNames[iniFile])) + { + return new string[0]; + } + } return iniFiles[FileNames[iniFile]].GetSection(sectionName)?.KeysToStringArray() ?? new string[0]; } private string ReadValue(Dictionary iniFiles, Enum iniFile, Enum section, string keyName) { - ReadFile(iniFiles, iniFile); - if (!iniFiles.ContainsKey(FileNames[iniFile])) - return string.Empty; + { + ReadFile(iniFiles, iniFile); + + if (!iniFiles.ContainsKey(FileNames[iniFile])) + { + return string.Empty; + } + } return iniFiles[FileNames[iniFile]].GetKey(SectionNames[section], keyName)?.KeyValue ?? string.Empty; } @@ -417,10 +460,15 @@ namespace ServerManagerTool.Common.Serialization private void WriteSection(Dictionary iniFiles, Enum iniFile, string sectionName, string[] values) { - ReadFile(iniFiles, iniFile); - if (!iniFiles.ContainsKey(FileNames[iniFile])) - return; + { + ReadFile(iniFiles, iniFile); + + if (!iniFiles.ContainsKey(FileNames[iniFile])) + { + return; + } + } iniFiles[FileNames[iniFile]].WriteSection(sectionName, values); } @@ -432,10 +480,15 @@ namespace ServerManagerTool.Common.Serialization private void WriteValue(Dictionary iniFiles, Enum iniFile, string sectionName, string keyName, string keyValue) { - ReadFile(iniFiles, iniFile); - if (!iniFiles.ContainsKey(FileNames[iniFile])) - return; + { + ReadFile(iniFiles, iniFile); + + if (!iniFiles.ContainsKey(FileNames[iniFile])) + { + return; + } + } iniFiles[FileNames[iniFile]].WriteKey(sectionName, keyName, keyValue); } @@ -454,7 +507,7 @@ namespace ServerManagerTool.Common.Serialization foreach (var iniFile in iniFiles) { var file = Path.Combine(this.BasePath, iniFile.Key); - var result = IniFileUtils.SaveToFile(file, iniFile.Value); + IniFileUtils.SaveToFile(file, iniFile.Value); } } } diff --git a/src/ServerManager.Common/Utils/IniFileUtils.cs b/src/ServerManager.Common/Utils/IniFileUtils.cs index ebfacfcd..ded51df2 100644 --- a/src/ServerManager.Common/Utils/IniFileUtils.cs +++ b/src/ServerManager.Common/Utils/IniFileUtils.cs @@ -85,10 +85,14 @@ namespace ServerManagerTool.Common.Utils public static IniFile ReadFromFile(string file) { if (string.IsNullOrWhiteSpace(file)) + { return null; + } if (!File.Exists(file)) + { return new IniFile(); + } var iniFile = new IniFile(); @@ -96,18 +100,24 @@ namespace ServerManagerTool.Common.Utils { while (!reader.EndOfStream) { - var line = reader.ReadLine(); + var line = reader.ReadLine().Trim(); if (string.IsNullOrWhiteSpace(line) || line.StartsWith(";") || line.StartsWith("#")) + { continue; + } - var sectionName = Regex.Match(line, @"(?<=^\[).*(?=\]$)").Value.Trim(); + var sectionName = string.Empty; + if (line.StartsWith("[") && line.EndsWith("]")) + { + sectionName = Regex.Match(line, @"(?<=^\[).*(?=\]$)").Value.Trim(); + } var section = iniFile.AddSection(sectionName); - if (section != null) - continue; - - iniFile.AddKey(line); + if (section is null) + { + iniFile.AddKey(line); + } } reader.Close(); From cd9d36a51d46c894c8cdffc616c481bbc5ed43fa Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Wed, 15 Dec 2021 22:26:33 +1000 Subject: [PATCH 3/7] Type assignment change --- src/ServerManager.Common/Model/AggregateIniValue.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ServerManager.Common/Model/AggregateIniValue.cs b/src/ServerManager.Common/Model/AggregateIniValue.cs index 291a7faa..47c76ad8 100644 --- a/src/ServerManager.Common/Model/AggregateIniValue.cs +++ b/src/ServerManager.Common/Model/AggregateIniValue.cs @@ -171,8 +171,7 @@ namespace ServerManagerTool.Common.Model kvPropertyValue = kvPropertyValue.Substring(0, kvPropertyValue.Length - 1); } - var collection = property.GetValue(this) as IIniValuesCollection; - if (collection != null) + if (property.GetValue(this) is IIniValuesCollection collection) { var values = SplitCollectionValues(kvPropertyValue, DELIMITER); values = values.Where(v => !string.IsNullOrWhiteSpace(v)).ToArray(); From 9eb22da9e7a775bcf7361f91bca1ce33a45995ca Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Wed, 15 Dec 2021 23:03:50 +1000 Subject: [PATCH 4/7] Dino Settings code optimisations --- .../Lib/ViewModel/DinoSettingsList.cs | 183 ++++++++++-------- 1 file changed, 98 insertions(+), 85 deletions(-) diff --git a/src/ARKServerManager/Lib/ViewModel/DinoSettingsList.cs b/src/ARKServerManager/Lib/ViewModel/DinoSettingsList.cs index c132fb8e..fc8ce102 100644 --- a/src/ARKServerManager/Lib/ViewModel/DinoSettingsList.cs +++ b/src/ARKServerManager/Lib/ViewModel/DinoSettingsList.cs @@ -87,20 +87,24 @@ namespace ServerManagerTool.Lib.ViewModel { Reset(); - foreach(var entry in this.DinoSpawnWeightMultipliers) + foreach(var entry in this.DinoSpawnWeightMultipliers.Where(e => !string.IsNullOrWhiteSpace(e.DinoNameTag))) { - if (string.IsNullOrWhiteSpace(entry.DinoNameTag)) - continue; - - var dinoSettings = this.Where(vi => vi.NameTag == entry.DinoNameTag).ToArray(); - if (dinoSettings == null || dinoSettings.Length == 0) + if (this.Any(d => d.NameTag == entry.DinoNameTag)) { - this.Add(CreateDinoSetting(entry.DinoNameTag, entry.Mod, entry.KnownDino, true, false)); + foreach (var dinoSetting in this.Where(d => d.NameTag == entry.DinoNameTag)) + { + dinoSetting.SpawnWeightMultiplier = entry.SpawnWeightMultiplier; + dinoSetting.OverrideSpawnLimitPercentage = entry.OverrideSpawnLimitPercentage; + dinoSetting.SpawnLimitPercentage = entry.SpawnLimitPercentage; + + dinoSetting.OriginalSpawnWeightMultiplier = entry.SpawnWeightMultiplier; + dinoSetting.OriginalOverrideSpawnLimitPercentage = entry.OverrideSpawnLimitPercentage; + dinoSetting.OriginalSpawnLimitPercentage = entry.SpawnLimitPercentage; + } } - - dinoSettings = this.Where(vi => vi.NameTag == entry.DinoNameTag).ToArray(); - foreach (var dinoSetting in dinoSettings) + else { + var dinoSetting = CreateDinoSetting(entry.DinoNameTag, entry.Mod, entry.KnownDino, true, false); dinoSetting.SpawnWeightMultiplier = entry.SpawnWeightMultiplier; dinoSetting.OverrideSpawnLimitPercentage = entry.OverrideSpawnLimitPercentage; dinoSetting.SpawnLimitPercentage = entry.SpawnLimitPercentage; @@ -108,115 +112,118 @@ namespace ServerManagerTool.Lib.ViewModel dinoSetting.OriginalSpawnWeightMultiplier = entry.SpawnWeightMultiplier; dinoSetting.OriginalOverrideSpawnLimitPercentage = entry.OverrideSpawnLimitPercentage; dinoSetting.OriginalSpawnLimitPercentage = entry.SpawnLimitPercentage; + + this.Add(dinoSetting); } } - foreach(var entry in this.PreventDinoTameClassNames) + foreach(var entry in this.PreventDinoTameClassNames.Where(e => !string.IsNullOrWhiteSpace(e))) { - if (string.IsNullOrWhiteSpace(entry)) - continue; - - var dinoSettings = this.Where(vi => vi.ClassName == entry).ToArray(); - if (dinoSettings == null || dinoSettings.Length == 0) + if (this.Any(d => d.ClassName == entry)) { - this.Add(CreateDinoSetting(entry, GameData.MOD_UNKNOWN, false, false, true)); + foreach (var dinoSetting in this.Where(d => d.ClassName == entry && !d.CanTame)) + { + dinoSetting.CanTame = false; + } } - - dinoSettings = this.Where(vi => vi.ClassName == entry).ToArray(); - foreach (var dinoSetting in dinoSettings) + else { + var dinoSetting = CreateDinoSetting(entry, GameData.MOD_UNKNOWN, false, false, true); dinoSetting.CanTame = false; + + this.Add(dinoSetting); } } - foreach(var entry in this.NpcReplacements) + foreach(var entry in this.NpcReplacements.Where(e => !string.IsNullOrWhiteSpace(e.FromClassName))) { - if (string.IsNullOrWhiteSpace(entry.FromClassName)) - continue; - - var dinoSettings = this.Where(vi => vi.ClassName == entry.FromClassName).ToArray(); - if (dinoSettings == null || dinoSettings.Length == 0) + if (this.Any(d => d.ClassName == entry.FromClassName)) { - this.Add(CreateDinoSetting(entry.FromClassName, GameData.MOD_UNKNOWN, false, false, true)); + foreach (var dinoSetting in this.Where(d => d.ClassName == entry.FromClassName)) + { + dinoSetting.CanSpawn = !string.IsNullOrWhiteSpace(entry.ToClassName); + dinoSetting.ReplacementClass = dinoSetting.CanSpawn ? entry.ToClassName : dinoSetting.ClassName; + } } - - dinoSettings = this.Where(vi => vi.ClassName == entry.FromClassName).ToArray(); - foreach (var dinoSetting in dinoSettings) + else { + var dinoSetting = CreateDinoSetting(entry.FromClassName, GameData.MOD_UNKNOWN, false, false, true); dinoSetting.CanSpawn = !string.IsNullOrWhiteSpace(entry.ToClassName); dinoSetting.ReplacementClass = dinoSetting.CanSpawn ? entry.ToClassName : dinoSetting.ClassName; + + this.Add(dinoSetting); } } - foreach (var entry in this.TamedDinoClassDamageMultipliers) + foreach (var entry in this.TamedDinoClassDamageMultipliers.Where(e => !string.IsNullOrWhiteSpace(e.ClassName))) { - if (string.IsNullOrWhiteSpace(entry.ClassName)) - continue; - - var dinoSettings = this.Where(vi => vi.ClassName == entry.ClassName).ToArray(); - if (dinoSettings == null || dinoSettings.Length == 0) + if (this.Any(d => d.ClassName == entry.ClassName)) { - this.Add(CreateDinoSetting(entry.ClassName, GameData.MOD_UNKNOWN, false, false, true)); + foreach (var dinoSetting in this.Where(d => d.ClassName == entry.ClassName && d.TamedDamageMultiplier != entry.Multiplier)) + { + dinoSetting.TamedDamageMultiplier = entry.Multiplier; + } } - - dinoSettings = this.Where(vi => vi.ClassName == entry.ClassName).ToArray(); - foreach (var dinoSetting in dinoSettings) + else { + var dinoSetting = CreateDinoSetting(entry.ClassName, GameData.MOD_UNKNOWN, false, false, true); dinoSetting.TamedDamageMultiplier = entry.Multiplier; + + this.Add(dinoSetting); } } - foreach(var entry in this.TamedDinoClassResistanceMultipliers) + foreach(var entry in this.TamedDinoClassResistanceMultipliers.Where(e => !string.IsNullOrWhiteSpace(e.ClassName))) { - if (string.IsNullOrWhiteSpace(entry.ClassName)) - continue; - - var dinoSettings = this.Where(vi => vi.ClassName == entry.ClassName).ToArray(); - if (dinoSettings == null || dinoSettings.Length == 0) + if (this.Any(d => d.ClassName == entry.ClassName)) { - this.Add(CreateDinoSetting(entry.ClassName, GameData.MOD_UNKNOWN, false, false, true)); + foreach (var dinoSetting in this.Where(d => d.ClassName == entry.ClassName && d.TamedResistanceMultiplier != entry.Multiplier)) + { + dinoSetting.TamedResistanceMultiplier = entry.Multiplier; + } } - - dinoSettings = this.Where(vi => vi.ClassName == entry.ClassName).ToArray(); - foreach (var dinoSetting in dinoSettings) + else { + var dinoSetting = CreateDinoSetting(entry.ClassName, GameData.MOD_UNKNOWN, false, false, true); dinoSetting.TamedResistanceMultiplier = entry.Multiplier; + + this.Add(dinoSetting); } } - foreach (var entry in this.DinoClassDamageMultipliers) + foreach (var entry in this.DinoClassDamageMultipliers.Where(e => !string.IsNullOrWhiteSpace(e.ClassName))) { - if (string.IsNullOrWhiteSpace(entry.ClassName)) - continue; - - var dinoSettings = this.Where(vi => vi.ClassName == entry.ClassName).ToArray(); - if (dinoSettings == null || dinoSettings.Length == 0) + if (this.Any(d => d.ClassName == entry.ClassName)) { - this.Add(CreateDinoSetting(entry.ClassName, GameData.MOD_UNKNOWN, false, false, true)); + foreach (var dinoSetting in this.Where(d => d.ClassName == entry.ClassName && d.WildDamageMultiplier != entry.Multiplier)) + { + dinoSetting.WildDamageMultiplier = entry.Multiplier; + } } - - dinoSettings = this.Where(vi => vi.ClassName == entry.ClassName).ToArray(); - foreach (var dinoSetting in dinoSettings) + else { + var dinoSetting = CreateDinoSetting(entry.ClassName, GameData.MOD_UNKNOWN, false, false, true); dinoSetting.WildDamageMultiplier = entry.Multiplier; + + this.Add(dinoSetting); } } - foreach (var entry in this.DinoClassResistanceMultipliers) + foreach (var entry in this.DinoClassResistanceMultipliers.Where(e => !string.IsNullOrWhiteSpace(e.ClassName))) { - if (string.IsNullOrWhiteSpace(entry.ClassName)) - continue; - - var dinoSettings = this.Where(vi => vi.ClassName == entry.ClassName).ToArray(); - if (dinoSettings == null || dinoSettings.Length == 0) + if (this.Any(d => d.ClassName == entry.ClassName)) { - this.Add(CreateDinoSetting(entry.ClassName, GameData.MOD_UNKNOWN, false, false, true)); + foreach (var dinoSetting in this.Where(d => d.ClassName == entry.ClassName && d.WildResistanceMultiplier != entry.Multiplier)) + { + dinoSetting.WildResistanceMultiplier = entry.Multiplier; + } } - - dinoSettings = this.Where(vi => vi.ClassName == entry.ClassName).ToArray(); - foreach (var dinoSetting in dinoSettings) + else { + var dinoSetting = CreateDinoSetting(entry.ClassName, GameData.MOD_UNKNOWN, false, false, true); dinoSetting.WildResistanceMultiplier = entry.Multiplier; + + this.Add(dinoSetting); } } @@ -244,22 +251,9 @@ namespace ServerManagerTool.Lib.ViewModel !entry.SpawnLimitPercentage.Equals(DinoSpawn.DEFAULT_SPAWN_LIMIT_PERCENTAGE) || !entry.SpawnWeightMultiplier.Equals(DinoSpawn.DEFAULT_SPAWN_WEIGHT_MULTIPLIER)) { - - var dinoSpawns = this.DinoSpawnWeightMultipliers.Where(d => d.DinoNameTag.Equals(entry.NameTag, StringComparison.OrdinalIgnoreCase)).ToArray(); - if (dinoSpawns == null || dinoSpawns.Length == 0) + if (this.DinoSpawnWeightMultipliers.Any(d => d.DinoNameTag.Equals(entry.NameTag, StringComparison.OrdinalIgnoreCase))) { - this.DinoSpawnWeightMultipliers.Add(new DinoSpawn() - { - ClassName = entry.ClassName, - DinoNameTag = entry.NameTag, - OverrideSpawnLimitPercentage = entry.OverrideSpawnLimitPercentage, - SpawnLimitPercentage = entry.SpawnLimitPercentage, - SpawnWeightMultiplier = entry.SpawnWeightMultiplier - }); - } - else - { - foreach (var dinoSpawn in dinoSpawns) + foreach (var dinoSpawn in this.DinoSpawnWeightMultipliers.Where(d => d.DinoNameTag.Equals(entry.NameTag, StringComparison.OrdinalIgnoreCase))) { if (entry.SpawnWeightMultiplier != entry.OriginalSpawnWeightMultiplier || entry.OverrideSpawnLimitPercentage != entry.OriginalOverrideSpawnLimitPercentage || @@ -271,6 +265,17 @@ namespace ServerManagerTool.Lib.ViewModel } } } + else + { + this.DinoSpawnWeightMultipliers.Add(new DinoSpawn() + { + ClassName = entry.ClassName, + DinoNameTag = entry.NameTag, + OverrideSpawnLimitPercentage = entry.OverrideSpawnLimitPercentage, + SpawnLimitPercentage = entry.SpawnLimitPercentage, + SpawnWeightMultiplier = entry.SpawnWeightMultiplier + }); + } } } @@ -287,20 +292,28 @@ namespace ServerManagerTool.Lib.ViewModel { // check if the value has changed. if (!entry.TamedDamageMultiplier.Equals(ClassMultiplier.DEFAULT_MULTIPLIER)) + { this.TamedDinoClassDamageMultipliers.Add(new ClassMultiplier() { ClassName = entry.ClassName, Multiplier = entry.TamedDamageMultiplier }); + } // check if the value has changed. if (!entry.TamedResistanceMultiplier.Equals(ClassMultiplier.DEFAULT_MULTIPLIER)) + { this.TamedDinoClassResistanceMultipliers.Add(new ClassMultiplier() { ClassName = entry.ClassName, Multiplier = entry.TamedResistanceMultiplier }); + } } // check if the value has changed. if (!entry.WildDamageMultiplier.Equals(ClassMultiplier.DEFAULT_MULTIPLIER)) + { this.DinoClassDamageMultipliers.Add(new ClassMultiplier() { ClassName = entry.ClassName, Multiplier = entry.WildDamageMultiplier }); + } // check if the value has changed. if (!entry.WildResistanceMultiplier.Equals(ClassMultiplier.DEFAULT_MULTIPLIER)) + { this.DinoClassResistanceMultipliers.Add(new ClassMultiplier() { ClassName = entry.ClassName, Multiplier = entry.WildResistanceMultiplier }); + } } } } From 9f5cf132f0b3af420a6d8d213aac741cbb6e5442 Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Thu, 16 Dec 2021 00:21:23 +1000 Subject: [PATCH 5/7] Removal of ToArray() --- .../Lib/Model/EngramAutoUnlock.cs | 8 +-- src/ARKServerManager/Lib/Model/EngramEntry.cs | 8 +-- src/ARKServerManager/Lib/Model/Level.cs | 2 +- .../Lib/Model/PreventTransferOverride.cs | 6 +- .../Lib/Model/ResourceClassMultiplier.cs | 11 ++-- .../Lib/Model/StackSizeOverride.cs | 4 +- .../Lib/Model/SupplyCrateOverride.cs | 4 +- src/ARKServerManager/Lib/ServerApp.cs | 8 +-- src/ARKServerManager/Lib/ServerPlayers.cs | 2 +- src/ARKServerManager/Lib/ServerProfile.cs | 22 +++---- src/ARKServerManager/Lib/ServerRCON.cs | 8 +-- .../Lib/ViewModel/EngramSettings.cs | 10 ++-- .../ServerSettingsControl.xaml.cs | 60 +++++++++---------- src/ArkData/DataContainerAsync.cs | 29 +++++---- src/ArkData/DataContainerSync.cs | 29 +++++---- src/ArkData/Extensions.cs | 4 +- src/ConanServerManager/Lib/ServerApp.cs | 8 +-- src/ConanServerManager/Lib/ServerPlayers.cs | 2 +- src/ConanServerManager/Lib/ServerProfile.cs | 14 ++--- src/ConanServerManager/Lib/ServerRcon.cs | 2 +- .../ServerSettingsControl.xaml.cs | 2 +- src/ConanServerManager/Utils/ModUtils.cs | 2 +- src/QueryMaster/RconSource.cs | 7 --- src/QueryMaster/RconUtil.cs | 2 - .../Interfaces/IIniSectionCollection.cs | 6 +- .../Lib/UserScopedSettingContractResolver.cs | 2 +- .../Model/AggregateIniValue.cs | 12 ++-- .../Model/AggregateIniValueList.cs | 7 +-- .../Model/CustomSectionList.cs | 5 +- .../Model/IniValueList.cs | 3 +- .../Model/PlayerUserList.cs | 10 ++-- .../Model/SteamCmdManifestDetailsResult.cs | 2 +- .../Serialization/BaseSystemIniFile.cs | 33 +++++----- .../Serialization/IniFile.cs | 4 +- .../Serialization/IniSection.cs | 4 +- .../Utils/IniFileUtils.cs | 9 +-- .../Utils/ProcessUtils.cs | 4 +- .../Utils/SettingsUtils.cs | 2 +- src/ServerManager.Common/Utils/ZipUtils.cs | 9 +-- src/ServerManager.Updater/Program.cs | 2 +- .../Utils/ProcessUtils.cs | 5 +- 41 files changed, 184 insertions(+), 189 deletions(-) diff --git a/src/ARKServerManager/Lib/Model/EngramAutoUnlock.cs b/src/ARKServerManager/Lib/Model/EngramAutoUnlock.cs index 92c836c2..588ef774 100644 --- a/src/ARKServerManager/Lib/Model/EngramAutoUnlock.cs +++ b/src/ARKServerManager/Lib/Model/EngramAutoUnlock.cs @@ -17,15 +17,13 @@ namespace ServerManagerTool.Lib public override void FromIniValues(IEnumerable iniValues) { - var items = iniValues?.Select(AggregateIniValue.FromINIValue).ToArray(); + var items = iniValues?.Select(AggregateIniValue.FromINIValue); Clear(); - var itemsToAdd = items.Where(i => !this.Any(e => e.IsEquivalent(i))).ToArray(); - AddRange(itemsToAdd); + AddRange(items.Where(i => !this.Any(e => e.IsEquivalent(i)))); - var itemsToUpdate = items.Where(i => this.Any(e => e.IsEquivalent(i))).ToArray(); - foreach (var item in itemsToUpdate) + foreach (var item in items.Where(i => this.Any(e => e.IsEquivalent(i)))) { var e = this.FirstOrDefault(r => r.IsEquivalent(item)); e.LevelToAutoUnlock = item.LevelToAutoUnlock; diff --git a/src/ARKServerManager/Lib/Model/EngramEntry.cs b/src/ARKServerManager/Lib/Model/EngramEntry.cs index f446055c..611a52f3 100644 --- a/src/ARKServerManager/Lib/Model/EngramEntry.cs +++ b/src/ARKServerManager/Lib/Model/EngramEntry.cs @@ -18,15 +18,13 @@ namespace ServerManagerTool.Lib public override void FromIniValues(IEnumerable iniValues) { - var items = iniValues?.Select(AggregateIniValue.FromINIValue).ToArray(); + var items = iniValues?.Select(AggregateIniValue.FromINIValue); Clear(); - var itemsToAdd = items.Where(i => !this.Any(e => e.IsEquivalent(i))).ToArray(); - AddRange(itemsToAdd); + AddRange(items.Where(i => !this.Any(e => e.IsEquivalent(i)))); - var itemsToUpdate = items.Where(i => this.Any(e => e.IsEquivalent(i))).ToArray(); - foreach (var item in itemsToUpdate) + foreach (var item in items.Where(i => this.Any(e => e.IsEquivalent(i)))) { var e = this.FirstOrDefault(r => r.IsEquivalent(item)); e.EngramLevelRequirement = item.EngramLevelRequirement; diff --git a/src/ARKServerManager/Lib/Model/Level.cs b/src/ARKServerManager/Lib/Model/Level.cs index 4c243b1d..40959641 100644 --- a/src/ARKServerManager/Lib/Model/Level.cs +++ b/src/ARKServerManager/Lib/Model/Level.cs @@ -61,7 +61,7 @@ namespace ServerManagerTool.Lib int index = 0; int xpTotal = 0; int engramTotal = 0; - foreach (var existingLevel in this.OrderBy(l => l.XPRequired).ToArray()) + foreach (var existingLevel in this.OrderBy(l => l.XPRequired)) { xpTotal += existingLevel.XPRequired; engramTotal += existingLevel.EngramPoints; diff --git a/src/ARKServerManager/Lib/Model/PreventTransferOverride.cs b/src/ARKServerManager/Lib/Model/PreventTransferOverride.cs index 29600480..ef151823 100644 --- a/src/ARKServerManager/Lib/Model/PreventTransferOverride.cs +++ b/src/ARKServerManager/Lib/Model/PreventTransferOverride.cs @@ -14,11 +14,9 @@ namespace ServerManagerTool.Lib { } - public string[] RenderToView() + public IEnumerable RenderToView() { - List errors = new List(); - - return errors.ToArray(); + return new List(); } public void RenderToModel() diff --git a/src/ARKServerManager/Lib/Model/ResourceClassMultiplier.cs b/src/ARKServerManager/Lib/Model/ResourceClassMultiplier.cs index b01adbde..5183d1e1 100644 --- a/src/ARKServerManager/Lib/Model/ResourceClassMultiplier.cs +++ b/src/ARKServerManager/Lib/Model/ResourceClassMultiplier.cs @@ -1,5 +1,4 @@ using ServerManagerTool.Common.Model; -using ServerManagerTool.Enums; using System; using System.Collections.Generic; using System.Linq; @@ -18,22 +17,20 @@ namespace ServerManagerTool.Lib public override void FromIniValues(IEnumerable iniValues) { - var items = iniValues?.Select(AggregateIniValue.FromINIValue).ToArray(); + var items = iniValues?.Select(AggregateIniValue.FromINIValue); Clear(); if (this._resetFunc != null) this.AddRange(this._resetFunc()); - var itemsToAdd = items.Where(i => !this.Any(r => r.IsEquivalent(i))).ToArray(); - AddRange(itemsToAdd); + AddRange(items.Where(i => !this.Any(r => r.IsEquivalent(i)))); - var itemsToUpdate = items.Where(i => this.Any(r => r.IsEquivalent(i))).ToArray(); - foreach (var item in itemsToUpdate) + foreach (var item in items.Where(i => this.Any(r => r.IsEquivalent(i)))) { this.FirstOrDefault(r => r.IsEquivalent(item)).Multiplier = item.Multiplier; } - IsEnabled = (items.Length > 0); + IsEnabled = (Count > 0); Sort(AggregateIniValue.SortKeySelector); } diff --git a/src/ARKServerManager/Lib/Model/StackSizeOverride.cs b/src/ARKServerManager/Lib/Model/StackSizeOverride.cs index ea6fe876..f86af661 100644 --- a/src/ARKServerManager/Lib/Model/StackSizeOverride.cs +++ b/src/ARKServerManager/Lib/Model/StackSizeOverride.cs @@ -14,7 +14,7 @@ namespace ServerManagerTool.Lib { } - public string[] RenderToView() + public IEnumerable RenderToView() { List errors = new List(); @@ -27,7 +27,7 @@ namespace ServerManagerTool.Lib } } - return errors.ToArray(); + return errors; } public void RenderToModel() diff --git a/src/ARKServerManager/Lib/Model/SupplyCrateOverride.cs b/src/ARKServerManager/Lib/Model/SupplyCrateOverride.cs index 16abf720..82104834 100644 --- a/src/ARKServerManager/Lib/Model/SupplyCrateOverride.cs +++ b/src/ARKServerManager/Lib/Model/SupplyCrateOverride.cs @@ -17,7 +17,7 @@ namespace ServerManagerTool.Lib { } - public string[] RenderToView() + public IEnumerable RenderToView() { List errors = new List(); @@ -48,7 +48,7 @@ namespace ServerManagerTool.Lib Update(); - return errors.ToArray(); + return errors; } public void RenderToModel() diff --git a/src/ARKServerManager/Lib/ServerApp.cs b/src/ARKServerManager/Lib/ServerApp.cs index ff142609..c4bfbaa6 100644 --- a/src/ARKServerManager/Lib/ServerApp.cs +++ b/src/ARKServerManager/Lib/ServerApp.cs @@ -1875,7 +1875,7 @@ namespace ServerManagerTool.Lib comment.AppendLine($"PGM Server: {_profile.PGM_Enabled}"); comment.AppendLine($"Process: {ServerProcess}"); - ZipUtils.ZipFiles(backupFile, files.ToArray(), comment.ToString(), false); + ZipUtils.ZipFiles(backupFile, files, comment.ToString(), false); LogProfileMessage($"Backup file created - {backupFile}"); } @@ -2025,7 +2025,7 @@ namespace ServerManagerTool.Lib comment.AppendLine($"PGM Server: {_profile.PGM_Enabled}"); comment.AppendLine($"Process: {ServerProcess}"); - ZipUtils.ZipFiles(backupFile, files.ToArray(), comment.ToString(), false); + ZipUtils.ZipFiles(backupFile, files, comment.ToString(), false); LogProfileMessage($"Backed up world files - {saveFolder}"); LogProfileMessage($"Backup file created - {backupFile}"); @@ -2998,7 +2998,7 @@ namespace ServerManagerTool.Lib if (ExitCode == EXITCODE_NORMALEXIT) { // get the profile associated with the branch - var profiles = _profiles.Keys.Where(p => p.EnableAutoUpdate && p.BranchName.Equals(branch.BranchName, StringComparison.OrdinalIgnoreCase)).ToArray(); + var profiles = _profiles.Keys.Where(p => p.EnableAutoUpdate && p.BranchName.Equals(branch.BranchName, StringComparison.OrdinalIgnoreCase)); var profileExitCodes = new ConcurrentDictionary(); if (Config.Default.AutoUpdate_ParallelUpdate) @@ -3249,7 +3249,7 @@ namespace ServerManagerTool.Lib if (exitCode == EXITCODE_NORMALEXIT) { - var branches = _profiles.Keys.Where(p => p.EnableAutoUpdate).Select(p => BranchSnapshot.Create(p)).Distinct(new BranchSnapshotComparer()).ToArray(); + var branches = _profiles.Keys.Where(p => p.EnableAutoUpdate).Select(p => BranchSnapshot.Create(p)).Distinct(new BranchSnapshotComparer()); var exitCodes = new ConcurrentDictionary(); // update the server cache for each branch diff --git a/src/ARKServerManager/Lib/ServerPlayers.cs b/src/ARKServerManager/Lib/ServerPlayers.cs index bddaf25e..306c936e 100644 --- a/src/ARKServerManager/Lib/ServerPlayers.cs +++ b/src/ARKServerManager/Lib/ServerPlayers.cs @@ -223,7 +223,7 @@ namespace ServerManagerTool.Lib token.ThrowIfCancellationRequested(); // remove any players that do not have a player file. - var droppedPlayers = _players.Values.Where(p => dataContainer.Players.FirstOrDefault(pd => pd.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null).ToArray(); + var droppedPlayers = _players.Values.Where(p => dataContainer.Players.FirstOrDefault(pd => pd.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null); foreach (var droppedPlayer in droppedPlayers) { _players.TryRemove(droppedPlayer.PlayerId, out PlayerInfo player); diff --git a/src/ARKServerManager/Lib/ServerProfile.cs b/src/ARKServerManager/Lib/ServerProfile.cs index fcea7349..e931cb17 100644 --- a/src/ARKServerManager/Lib/ServerProfile.cs +++ b/src/ARKServerManager/Lib/ServerProfile.cs @@ -3593,7 +3593,7 @@ namespace ServerManagerTool.Lib } } - private static Enum[] GetExclusions() + private static IEnumerable GetExclusions() { var exclusions = new List(); @@ -3637,7 +3637,7 @@ namespace ServerManagerTool.Lib exclusions.Add(ServerProfileCategory.SOTF); } - return exclusions.ToArray(); + return exclusions; } private LevelList GetLevelList(LevelProgression levelProgression) @@ -4022,7 +4022,7 @@ namespace ServerManagerTool.Lib return profile; } - public static ServerProfile LoadFromINIFiles(string file, ServerProfile profile, Enum[] exclusions = null) + public static ServerProfile LoadFromINIFiles(string file, ServerProfile profile, IEnumerable exclusions = null) { if (string.IsNullOrWhiteSpace(file) || !File.Exists(file)) return null; @@ -4394,7 +4394,7 @@ namespace ServerManagerTool.Lib SaveINIFile(configDir); } - public void SaveINIFile(string profileIniDir, Enum[] exclusions = null) + public void SaveINIFile(string profileIniDir, IEnumerable exclusions = null) { if (exclusions == null) exclusions = GetExclusions(); @@ -4418,7 +4418,7 @@ namespace ServerManagerTool.Lib filteredValues.AddRange(this.PlayerLevels.ToINIValuesForEngramPoints()); } - iniFile.WriteSection(IniFiles.Game, IniSections.Game_ShooterGameMode, filteredValues.ToArray()); + iniFile.WriteSection(IniFiles.Game, IniSections.Game_ShooterGameMode, filteredValues); } public bool UpdateDirectoryPermissions() @@ -5860,7 +5860,7 @@ namespace ServerManagerTool.Lib this.CustomEngineSettings.Clear(); foreach (var section in sourceProfile.CustomEngineSettings) { - this.CustomEngineSettings.Add(section.SectionName, section.ToIniValues().ToArray()); + this.CustomEngineSettings.Add(section.SectionName, section.ToIniValues()); } } @@ -5869,7 +5869,7 @@ namespace ServerManagerTool.Lib this.CustomGameSettings.Clear(); foreach (var section in sourceProfile.CustomGameSettings) { - this.CustomGameSettings.Add(section.SectionName, section.ToIniValues().ToArray()); + this.CustomGameSettings.Add(section.SectionName, section.ToIniValues()); } } @@ -5878,7 +5878,7 @@ namespace ServerManagerTool.Lib this.CustomGameUserSettings.Clear(); foreach (var section in sourceProfile.CustomGameUserSettings) { - this.CustomGameUserSettings.Add(section.SectionName, section.ToIniValues().ToArray()); + this.CustomGameUserSettings.Add(section.SectionName, section.ToIniValues()); } } @@ -6530,7 +6530,7 @@ namespace ServerManagerTool.Lib Directory.CreateDirectory(folder); var file = Path.Combine(folder, Config.Default.ArkAdminFile); - File.WriteAllLines(file, this.ServerFilesAdmins.ToArray()); + File.WriteAllLines(file, this.ServerFilesAdmins.ToEnumerable()); } catch (Exception ex) { @@ -6547,7 +6547,7 @@ namespace ServerManagerTool.Lib Directory.CreateDirectory(folder); var file = Path.Combine(folder, Config.Default.ArkExclusiveFile); - File.WriteAllLines(file, this.ServerFilesExclusive.ToArray()); + File.WriteAllLines(file, this.ServerFilesExclusive.ToEnumerable()); } catch (Exception ex) { @@ -6564,7 +6564,7 @@ namespace ServerManagerTool.Lib Directory.CreateDirectory(folder); var file = Path.Combine(folder, Config.Default.ArkWhitelistFile); - File.WriteAllLines(file, this.ServerFilesWhitelisted.ToArray()); + File.WriteAllLines(file, this.ServerFilesWhitelisted.ToEnumerable()); } catch (Exception ex) { diff --git a/src/ARKServerManager/Lib/ServerRCON.cs b/src/ARKServerManager/Lib/ServerRCON.cs index e64b4bd3..8f4c85f5 100644 --- a/src/ARKServerManager/Lib/ServerRCON.cs +++ b/src/ARKServerManager/Lib/ServerRCON.cs @@ -325,8 +325,8 @@ namespace ServerManagerTool.Lib else if (command.command.Equals(RCON_COMMAND_GETCHAT, StringComparison.OrdinalIgnoreCase)) { // TODO: Extract the player name from the chat - var lines = command.lines.Where(l => !String.IsNullOrEmpty(l) && l != NoResponseOutput).ToArray(); - if (lines.Length == 0 && command.suppressCommand) + var lines = command.lines.Where(l => !String.IsNullOrEmpty(l) && l != NoResponseOutput); + if (!lines.Any() && command.suppressCommand) { command.suppressOutput = true; } @@ -398,7 +398,7 @@ namespace ServerManagerTool.Lib } } - var droppedPlayers = this.players.Values.Where(p => onlinePlayers.FirstOrDefault(np => np.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null).ToArray(); + var droppedPlayers = this.players.Values.Where(p => onlinePlayers.FirstOrDefault(np => np.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null); foreach (var droppedPlayer in droppedPlayers) { if (droppedPlayer.IsOnline) @@ -604,7 +604,7 @@ namespace ServerManagerTool.Lib token.ThrowIfCancellationRequested(); // remove any players that do not have a player file. - var droppedPlayers = this.players.Values.Where(p => dataContainer.Players.FirstOrDefault(pd => pd.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null).ToArray(); + var droppedPlayers = this.players.Values.Where(p => dataContainer.Players.FirstOrDefault(pd => pd.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null); foreach (var droppedPlayer in droppedPlayers) { players.TryRemove(droppedPlayer.PlayerId, out PlayerInfo player); diff --git a/src/ARKServerManager/Lib/ViewModel/EngramSettings.cs b/src/ARKServerManager/Lib/ViewModel/EngramSettings.cs index df4620f4..56eca10d 100644 --- a/src/ARKServerManager/Lib/ViewModel/EngramSettings.cs +++ b/src/ARKServerManager/Lib/ViewModel/EngramSettings.cs @@ -80,14 +80,13 @@ namespace ServerManagerTool.Lib.ViewModel if (string.IsNullOrWhiteSpace(entry.EngramClassName)) continue; - var engramSettings = this.Where(vi => vi.EngramClassName == entry.EngramClassName).ToArray(); - if (engramSettings == null || engramSettings.Length == 0) + if (!this.Any(vi => vi.EngramClassName == entry.EngramClassName)) { var engram = GameData.GetEngramForClass(entry.EngramClassName); this.Add(CreateEngramSetting(entry.EngramClassName, engram?.Mod ?? GameData.MOD_UNKNOWN, engram?.KnownEngram ?? false, engram?.IsTekgram ?? false)); } - engramSettings = this.Where(vi => vi.EngramClassName == entry.EngramClassName).ToArray(); + var engramSettings = this.Where(vi => vi.EngramClassName == entry.EngramClassName); foreach (var engramSetting in engramSettings) { engramSetting.EngramLevelRequirement = entry.EngramLevelRequirement; @@ -117,14 +116,13 @@ namespace ServerManagerTool.Lib.ViewModel if (string.IsNullOrWhiteSpace(entry.EngramClassName)) continue; - var engramSettings = this.Where(vi => vi.EngramClassName == entry.EngramClassName).ToArray(); - if (engramSettings == null || engramSettings.Length == 0) + if (!this.Any(vi => vi.EngramClassName == entry.EngramClassName)) { var engram = GameData.GetEngramForClass(entry.EngramClassName); this.Add(CreateEngramSetting(entry.EngramClassName, engram?.Mod ?? GameData.MOD_UNKNOWN, engram?.KnownEngram ?? false, engram?.IsTekgram ?? false)); } - engramSettings = this.Where(vi => vi.EngramClassName == entry.EngramClassName).ToArray(); + var engramSettings = this.Where(vi => vi.EngramClassName == entry.EngramClassName); foreach (var engramSetting in engramSettings) { engramSetting.EngramAutoUnlock = true; diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs index f4bb2897..7b16ebcb 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -990,7 +990,7 @@ namespace ServerManagerTool var zipFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), this.Settings.ProfileID + ".zip"); if (File.Exists(zipFile)) File.Delete(zipFile); - ZipUtils.ZipFiles(zipFile, files.ToArray(), comment.ToString()); + ZipUtils.ZipFiles(zipFile, files, comment.ToString()); foreach (var kvp in obfuscateFiles) { ZipUtils.ZipAFile(zipFile, kvp.Key, kvp.Value); @@ -1348,37 +1348,37 @@ namespace ServerManagerTool foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { var dinoSpawnWeightMultipliers = new AggregateIniValueList(nameof(Server.Profile.DinoSpawnWeightMultipliers), null); - dinoSpawnWeightMultipliers.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{dinoSpawnWeightMultipliers.IniCollectionKey}="))); + dinoSpawnWeightMultipliers.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{dinoSpawnWeightMultipliers.IniCollectionKey}="))); Server.Profile.DinoSpawnWeightMultipliers.AddRange(dinoSpawnWeightMultipliers); Server.Profile.DinoSpawnWeightMultipliers.IsEnabled |= dinoSpawnWeightMultipliers.IsEnabled; var preventDinoTameClassNames = new StringIniValueList(nameof(Server.Profile.PreventDinoTameClassNames), null); - preventDinoTameClassNames.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{preventDinoTameClassNames.IniCollectionKey}="))); + preventDinoTameClassNames.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{preventDinoTameClassNames.IniCollectionKey}="))); Server.Profile.PreventDinoTameClassNames.AddRange(preventDinoTameClassNames); Server.Profile.PreventDinoTameClassNames.IsEnabled |= preventDinoTameClassNames.IsEnabled; var npcReplacements = new AggregateIniValueList(nameof(Server.Profile.NPCReplacements), null); - npcReplacements.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{npcReplacements.IniCollectionKey}="))); + npcReplacements.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{npcReplacements.IniCollectionKey}="))); Server.Profile.NPCReplacements.AddRange(npcReplacements); Server.Profile.NPCReplacements.IsEnabled |= npcReplacements.IsEnabled; var tamedDinoClassDamageMultipliers = new AggregateIniValueList(nameof(Server.Profile.TamedDinoClassDamageMultipliers), null); - tamedDinoClassDamageMultipliers.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{tamedDinoClassDamageMultipliers.IniCollectionKey}="))); + tamedDinoClassDamageMultipliers.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{tamedDinoClassDamageMultipliers.IniCollectionKey}="))); Server.Profile.TamedDinoClassDamageMultipliers.AddRange(tamedDinoClassDamageMultipliers); Server.Profile.TamedDinoClassDamageMultipliers.IsEnabled |= tamedDinoClassDamageMultipliers.IsEnabled; var tamedDinoClassResistanceMultipliers = new AggregateIniValueList(nameof(Server.Profile.TamedDinoClassResistanceMultipliers), null); - tamedDinoClassResistanceMultipliers.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{tamedDinoClassResistanceMultipliers.IniCollectionKey}="))); + tamedDinoClassResistanceMultipliers.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{tamedDinoClassResistanceMultipliers.IniCollectionKey}="))); Server.Profile.TamedDinoClassResistanceMultipliers.AddRange(tamedDinoClassResistanceMultipliers); Server.Profile.TamedDinoClassResistanceMultipliers.IsEnabled |= tamedDinoClassResistanceMultipliers.IsEnabled; var dinoClassDamageMultipliers = new AggregateIniValueList(nameof(Server.Profile.DinoClassDamageMultipliers), null); - dinoClassDamageMultipliers.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{dinoClassDamageMultipliers.IniCollectionKey}="))); + dinoClassDamageMultipliers.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{dinoClassDamageMultipliers.IniCollectionKey}="))); Server.Profile.DinoClassDamageMultipliers.AddRange(dinoClassDamageMultipliers); Server.Profile.DinoClassDamageMultipliers.IsEnabled |= dinoClassDamageMultipliers.IsEnabled; var dinoClassResistanceMultipliers = new AggregateIniValueList(nameof(Server.Profile.DinoClassResistanceMultipliers), null); - dinoClassResistanceMultipliers.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{dinoClassResistanceMultipliers.IniCollectionKey}="))); + dinoClassResistanceMultipliers.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{dinoClassResistanceMultipliers.IniCollectionKey}="))); Server.Profile.DinoClassResistanceMultipliers.AddRange(dinoClassResistanceMultipliers); Server.Profile.DinoClassResistanceMultipliers.IsEnabled |= dinoClassResistanceMultipliers.IsEnabled; } @@ -1458,7 +1458,7 @@ namespace ServerManagerTool foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { var harvestResourceItemAmountClassMultipliers = new AggregateIniValueList(nameof(Server.Profile.HarvestResourceItemAmountClassMultipliers), null); - harvestResourceItemAmountClassMultipliers.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{harvestResourceItemAmountClassMultipliers.IniCollectionKey}="))); + harvestResourceItemAmountClassMultipliers.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{harvestResourceItemAmountClassMultipliers.IniCollectionKey}="))); Server.Profile.HarvestResourceItemAmountClassMultipliers.AddRange(harvestResourceItemAmountClassMultipliers); Server.Profile.HarvestResourceItemAmountClassMultipliers.IsEnabled |= harvestResourceItemAmountClassMultipliers.IsEnabled; } @@ -1686,12 +1686,12 @@ namespace ServerManagerTool foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { var overrideNamedEngramEntries = new EngramEntryList(nameof(Server.Profile.OverrideNamedEngramEntries)); - overrideNamedEngramEntries.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{overrideNamedEngramEntries.IniCollectionKey}="))); + overrideNamedEngramEntries.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{overrideNamedEngramEntries.IniCollectionKey}="))); Server.Profile.OverrideNamedEngramEntries.AddRange(overrideNamedEngramEntries); Server.Profile.OverrideNamedEngramEntries.IsEnabled |= overrideNamedEngramEntries.IsEnabled; var engramEntryAutoUnlocks = new EngramAutoUnlockList(nameof(Server.Profile.EngramEntryAutoUnlocks)); - engramEntryAutoUnlocks.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{engramEntryAutoUnlocks.IniCollectionKey}="))); + engramEntryAutoUnlocks.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{engramEntryAutoUnlocks.IniCollectionKey}="))); Server.Profile.EngramEntryAutoUnlocks.AddRange(engramEntryAutoUnlocks); Server.Profile.EngramEntryAutoUnlocks.IsEnabled |= engramEntryAutoUnlocks.IsEnabled; } @@ -1790,7 +1790,7 @@ namespace ServerManagerTool foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { var configOverrideItemCraftingCosts = new AggregateIniValueList(nameof(Server.Profile.ConfigOverrideItemCraftingCosts), null); - configOverrideItemCraftingCosts.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{configOverrideItemCraftingCosts.IniCollectionKey}="))); + configOverrideItemCraftingCosts.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{configOverrideItemCraftingCosts.IniCollectionKey}="))); Server.Profile.ConfigOverrideItemCraftingCosts.AddRange(configOverrideItemCraftingCosts); Server.Profile.ConfigOverrideItemCraftingCosts.IsEnabled |= configOverrideItemCraftingCosts.IsEnabled; } @@ -1898,7 +1898,7 @@ namespace ServerManagerTool // cycle through the sections, adding them to the custom section list. Will bypass any sections that are named as per the ARK default sections. foreach (var section in iniFile.Sections.Where(s => !string.IsNullOrWhiteSpace(s.SectionName) && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { - Settings.CustomGameUserSettings.Add(section.SectionName, section.KeysToStringArray(), false); + Settings.CustomGameUserSettings.Add(section.SectionName, section.KeysToStringEnumerable(), false); } MessageBox.Show(_globalizer.GetResourceString("ServerSettings_LoadCustomConfig_Label"), _globalizer.GetResourceString("ServerSettings_LoadCustomConfig_Title"), MessageBoxButton.OK, MessageBoxImage.Information); @@ -1957,7 +1957,7 @@ namespace ServerManagerTool // cycle through the sections, adding them to the custom section list. Will bypass any sections that are named as per the ARK default sections. foreach (var section in iniFile.Sections.Where(s => !string.IsNullOrWhiteSpace(s.SectionName) && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { - Settings.CustomGameUserSettings.Add(section.SectionName, section.KeysToStringArray(), false); + Settings.CustomGameUserSettings.Add(section.SectionName, section.KeysToStringEnumerable(), false); } } @@ -1980,7 +1980,7 @@ namespace ServerManagerTool var configIniFile = Path.Combine(ServerProfile.GetProfileServerConfigDir(Settings), Config.Default.ServerGameUserSettingsConfigFile); // load only this section, using the full exclusion list - var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions.ToArray()); + var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions); // perform a profile sync Settings.SyncSettings(ServerProfileCategory.CustomGameUserSettings, tempServerProfile); } @@ -2059,7 +2059,7 @@ namespace ServerManagerTool // cycle through the sections, adding them to the custom section list. Will bypass any sections that are named as per the ARK default sections. foreach (var section in iniFile.Sections.Where(s => !string.IsNullOrWhiteSpace(s.SectionName) && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { - Settings.CustomGameSettings.Add(section.SectionName, section.KeysToStringArray(), false); + Settings.CustomGameSettings.Add(section.SectionName, section.KeysToStringEnumerable(), false); } MessageBox.Show(_globalizer.GetResourceString("ServerSettings_LoadCustomConfig_Label"), _globalizer.GetResourceString("ServerSettings_LoadCustomConfig_Title"), MessageBoxButton.OK, MessageBoxImage.Information); @@ -2118,7 +2118,7 @@ namespace ServerManagerTool // cycle through the sections, adding them to the custom section list. Will bypass any sections that are named as per the ARK default sections. foreach (var section in iniFile.Sections.Where(s => !string.IsNullOrWhiteSpace(s.SectionName) && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { - Settings.CustomGameSettings.Add(section.SectionName, section.KeysToStringArray(), false); + Settings.CustomGameSettings.Add(section.SectionName, section.KeysToStringEnumerable(), false); } } @@ -2141,7 +2141,7 @@ namespace ServerManagerTool var configIniFile = Path.Combine(ServerProfile.GetProfileServerConfigDir(Settings), Config.Default.ServerGameUserSettingsConfigFile); // load only this section, using the full exclusion list - var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions.ToArray()); + var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions); // perform a profile sync Settings.SyncSettings(ServerProfileCategory.CustomGameSettings, tempServerProfile); } @@ -2220,7 +2220,7 @@ namespace ServerManagerTool // cycle through the sections, adding them to the custom section list. Will bypass any sections that are named as per the ARK default sections. foreach (var section in iniFile.Sections.Where(s => !string.IsNullOrWhiteSpace(s.SectionName) && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { - Settings.CustomEngineSettings.Add(section.SectionName, section.KeysToStringArray(), false); + Settings.CustomEngineSettings.Add(section.SectionName, section.KeysToStringEnumerable(), false); } MessageBox.Show(_globalizer.GetResourceString("ServerSettings_LoadCustomConfig_Label"), _globalizer.GetResourceString("ServerSettings_LoadCustomConfig_Title"), MessageBoxButton.OK, MessageBoxImage.Information); @@ -2279,7 +2279,7 @@ namespace ServerManagerTool // cycle through the sections, adding them to the custom section list. Will bypass any sections that are named as per the ARK default sections. foreach (var section in iniFile.Sections.Where(s => !string.IsNullOrWhiteSpace(s.SectionName) && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { - Settings.CustomEngineSettings.Add(section.SectionName, section.KeysToStringArray(), false); + Settings.CustomEngineSettings.Add(section.SectionName, section.KeysToStringEnumerable(), false); } } @@ -2302,7 +2302,7 @@ namespace ServerManagerTool var configIniFile = Path.Combine(ServerProfile.GetProfileServerConfigDir(Settings), Config.Default.ServerGameUserSettingsConfigFile); // load only this section, using the full exclusion list - var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions.ToArray()); + var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions); // perform a profile sync Settings.SyncSettings(ServerProfileCategory.CustomEngineSettings, tempServerProfile); } @@ -2919,17 +2919,17 @@ namespace ServerManagerTool foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { var configAddNPCSpawnEntriesContainer = new NPCSpawnContainerList(nameof(Server.Profile.ConfigAddNPCSpawnEntriesContainer), NPCSpawnContainerType.Add); - configAddNPCSpawnEntriesContainer.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{configAddNPCSpawnEntriesContainer.IniCollectionKey}="))); + configAddNPCSpawnEntriesContainer.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{configAddNPCSpawnEntriesContainer.IniCollectionKey}="))); Server.Profile.ConfigAddNPCSpawnEntriesContainer.AddRange(configAddNPCSpawnEntriesContainer); Server.Profile.ConfigAddNPCSpawnEntriesContainer.IsEnabled |= configAddNPCSpawnEntriesContainer.IsEnabled; var configSubtractNPCSpawnEntriesContainer = new NPCSpawnContainerList(nameof(Server.Profile.ConfigSubtractNPCSpawnEntriesContainer), NPCSpawnContainerType.Subtract); - configSubtractNPCSpawnEntriesContainer.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{configSubtractNPCSpawnEntriesContainer.IniCollectionKey}="))); + configSubtractNPCSpawnEntriesContainer.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{configSubtractNPCSpawnEntriesContainer.IniCollectionKey}="))); Server.Profile.ConfigSubtractNPCSpawnEntriesContainer.AddRange(configSubtractNPCSpawnEntriesContainer); Server.Profile.ConfigSubtractNPCSpawnEntriesContainer.IsEnabled |= configSubtractNPCSpawnEntriesContainer.IsEnabled; var configOverrideNPCSpawnEntriesContainer = new NPCSpawnContainerList(nameof(Server.Profile.ConfigOverrideNPCSpawnEntriesContainer), NPCSpawnContainerType.Override); - configOverrideNPCSpawnEntriesContainer.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{configOverrideNPCSpawnEntriesContainer.IniCollectionKey}="))); + configOverrideNPCSpawnEntriesContainer.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{configOverrideNPCSpawnEntriesContainer.IniCollectionKey}="))); Server.Profile.ConfigOverrideNPCSpawnEntriesContainer.AddRange(configOverrideNPCSpawnEntriesContainer); Server.Profile.ConfigOverrideNPCSpawnEntriesContainer.IsEnabled |= configOverrideNPCSpawnEntriesContainer.IsEnabled; } @@ -3123,7 +3123,7 @@ namespace ServerManagerTool foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { var configOverrideSupplyCrateItems = new SupplyCrateOverrideList(nameof(Server.Profile.ConfigOverrideSupplyCrateItems)); - configOverrideSupplyCrateItems.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{configOverrideSupplyCrateItems.IniCollectionKey}="))); + configOverrideSupplyCrateItems.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{configOverrideSupplyCrateItems.IniCollectionKey}="))); Server.Profile.ConfigOverrideSupplyCrateItems.AddRange(configOverrideSupplyCrateItems); Server.Profile.ConfigOverrideSupplyCrateItems.IsEnabled |= configOverrideSupplyCrateItems.IsEnabled; } @@ -3133,7 +3133,7 @@ namespace ServerManagerTool RefreshBaseSupplyCrateList(); RefreshBasePrimalItemList(); - if (errors.Length > 0) + if (errors.Any()) { var error = $"The following errors have been found:\r\n\r\n{string.Join("\r\n", errors)}"; @@ -3265,7 +3265,7 @@ namespace ServerManagerTool foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { var configOverrideItemMaxQuantity = new AggregateIniValueList(nameof(Server.Profile.ConfigOverrideItemMaxQuantity), null); - configOverrideItemMaxQuantity.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{configOverrideItemMaxQuantity.IniCollectionKey}="))); + configOverrideItemMaxQuantity.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{configOverrideItemMaxQuantity.IniCollectionKey}="))); Server.Profile.ConfigOverrideItemMaxQuantity.AddRange(configOverrideItemMaxQuantity); Server.Profile.ConfigOverrideItemMaxQuantity.IsEnabled |= configOverrideItemMaxQuantity.IsEnabled; } @@ -3274,7 +3274,7 @@ namespace ServerManagerTool RefreshBasePrimalItemList(); - if (errors.Length > 0) + if (errors.Any()) { var error = $"The following errors have been found:\r\n\r\n{string.Join("\r\n", errors)}"; @@ -3365,7 +3365,7 @@ namespace ServerManagerTool foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { var preventTransferForClassNames = new AggregateIniValueList(nameof(Server.Profile.PreventTransferForClassNames), null); - preventTransferForClassNames.FromIniValues(section.KeysToStringArray().Where(s => s.StartsWith($"{preventTransferForClassNames.IniCollectionKey}="))); + preventTransferForClassNames.FromIniValues(section.KeysToStringEnumerable().Where(s => s.StartsWith($"{preventTransferForClassNames.IniCollectionKey}="))); Server.Profile.PreventTransferForClassNames.AddRange(preventTransferForClassNames); Server.Profile.PreventTransferForClassNames.IsEnabled |= preventTransferForClassNames.IsEnabled; } @@ -3374,7 +3374,7 @@ namespace ServerManagerTool RefreshBaseDinoList(); - if (errors.Length > 0) + if (errors.Any()) { var error = $"The following errors have been found:\r\n\r\n{string.Join("\r\n", errors)}"; diff --git a/src/ArkData/DataContainerAsync.cs b/src/ArkData/DataContainerAsync.cs index a6a044ac..6a5472e2 100644 --- a/src/ArkData/DataContainerAsync.cs +++ b/src/ArkData/DataContainerAsync.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; @@ -18,29 +19,35 @@ namespace ArkData /// The async task context containing the resulting container. public static async Task CreateAsync(string playerFileFolder, string tribeFileFolder) { - var playerFiles = new string[0]; - var tribeFiles = new string[0]; + IEnumerable playerFiles = null; + IEnumerable tribeFiles = null; if (Directory.Exists(playerFileFolder)) { playerFiles = Directory.GetFiles(playerFileFolder).Where(f => Path.GetFileNameWithoutExtension(f).StartsWith(DataFileDetails.PlayerFilePrefix) && Path.GetFileNameWithoutExtension(f).EndsWith(DataFileDetails.PlayerFileSuffix) - && Path.GetExtension(f).Equals(DataFileDetails.PlayerFileExtension)).ToArray(); + && Path.GetExtension(f).Equals(DataFileDetails.PlayerFileExtension)); } if (Directory.Exists(tribeFileFolder)) { tribeFiles = Directory.GetFiles(tribeFileFolder).Where(f => Path.GetFileNameWithoutExtension(f).StartsWith(DataFileDetails.TribeFilePrefix) && Path.GetFileNameWithoutExtension(f).EndsWith(DataFileDetails.TribeFileSuffix) - && Path.GetExtension(f).Equals(DataFileDetails.TribeFileExtension)).ToArray(); + && Path.GetExtension(f).Equals(DataFileDetails.TribeFileExtension)); } var container = new DataContainer(); - foreach (var file in playerFiles) - container.Players.Add(await Parser.ParsePlayerAsync(file)); + if (playerFiles != null) + { + foreach (var file in playerFiles) + container.Players.Add(await Parser.ParsePlayerAsync(file)); + } - foreach (var file in tribeFiles) - container.Tribes.Add(await Parser.ParseTribeAsync(file)); + if (tribeFiles != null) + { + foreach (var file in tribeFiles) + container.Tribes.Add(await Parser.ParseTribeAsync(file)); + } container.LinkPlayerTribe(); @@ -58,14 +65,14 @@ namespace ArkData // need to make multiple calls of 100 steam id's. var lastSteamUpdateUtc = DateTime.UtcNow; var startIndex = 0; - var playerSteamIds = Players.Where(p => p.LastPlatformUpdateUtc.AddMinutes(steamUpdateInterval) < DateTime.UtcNow).Select(p => p.PlayerId).ToArray(); + var playerSteamIds = Players.Where(p => p.LastPlatformUpdateUtc.AddMinutes(steamUpdateInterval) < DateTime.UtcNow).Select(p => p.PlayerId); while (true) { // check if the start index has exceeded the Players list count. - if (startIndex >= playerSteamIds.Length) break; + if (startIndex >= playerSteamIds.Count()) break; // get the number of steam ids to read. - int steamIdsCount = System.Math.Min(MAX_STEAM_IDS, playerSteamIds.Length - startIndex); + int steamIdsCount = Math.Min(MAX_STEAM_IDS, playerSteamIds.Count() - startIndex); // get a comma delimited list of the steam ids to process var builder = string.Join(",", playerSteamIds, startIndex, steamIdsCount); diff --git a/src/ArkData/DataContainerSync.cs b/src/ArkData/DataContainerSync.cs index cd1dd34d..b1d36194 100644 --- a/src/ArkData/DataContainerSync.cs +++ b/src/ArkData/DataContainerSync.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; @@ -16,29 +17,35 @@ namespace ArkData /// public static DataContainer Create(string playerFileFolder, string tribeFileFolder) { - var playerFiles = new string[0]; - var tribeFiles = new string[0]; + IEnumerable playerFiles = null; + IEnumerable tribeFiles = null; if (Directory.Exists(playerFileFolder)) { playerFiles = Directory.GetFiles(playerFileFolder).Where(f => Path.GetFileNameWithoutExtension(f).StartsWith(DataFileDetails.PlayerFilePrefix) && Path.GetFileNameWithoutExtension(f).EndsWith(DataFileDetails.PlayerFileSuffix) - && Path.GetExtension(f).Equals(DataFileDetails.PlayerFileExtension)).ToArray(); + && Path.GetExtension(f).Equals(DataFileDetails.PlayerFileExtension)); } if (Directory.Exists(tribeFileFolder)) { tribeFiles = Directory.GetFiles(tribeFileFolder).Where(f => Path.GetFileNameWithoutExtension(f).StartsWith(DataFileDetails.TribeFilePrefix) && Path.GetFileNameWithoutExtension(f).EndsWith(DataFileDetails.TribeFileSuffix) - && Path.GetExtension(f).Equals(DataFileDetails.TribeFileExtension)).ToArray(); + && Path.GetExtension(f).Equals(DataFileDetails.TribeFileExtension)); } var container = new DataContainer(); - foreach (var file in playerFiles) - container.Players.Add(Parser.ParsePlayer(file)); + if (playerFiles != null) + { + foreach (var file in playerFiles) + container.Players.Add(Parser.ParsePlayer(file)); + } - foreach (var file in tribeFiles) - container.Tribes.Add(Parser.ParseTribe(file)); + if (tribeFiles != null) + { + foreach (var file in tribeFiles) + container.Tribes.Add(Parser.ParseTribe(file)); + } container.LinkPlayerTribe(); @@ -56,14 +63,14 @@ namespace ArkData // need to make multiple calls of 100 steam id's. var lastSteamUpdateUtc = DateTime.UtcNow; var startIndex = 0; - var playerSteamIds = Players.Where(p => p.LastPlatformUpdateUtc.AddMinutes(steamUpdateInterval) < DateTime.UtcNow).Select(p => p.PlayerId).ToArray(); + var playerSteamIds = Players.Where(p => p.LastPlatformUpdateUtc.AddMinutes(steamUpdateInterval) < DateTime.UtcNow).Select(p => p.PlayerId); while (true) { // check if the start index has exceeded the Players list count. - if (startIndex >= playerSteamIds.Length) break; + if (startIndex >= playerSteamIds.Count()) break; // get the number of steam ids to read. - int steamIdsCount = System.Math.Min(MAX_STEAM_IDS, playerSteamIds.Length - startIndex); + int steamIdsCount = Math.Min(MAX_STEAM_IDS, playerSteamIds.Count() - startIndex); // get a comma delimited list of the steam ids to process var builder = string.Join(",", playerSteamIds, startIndex, steamIdsCount); diff --git a/src/ArkData/Extensions.cs b/src/ArkData/Extensions.cs index df2ff5d7..a03c8958 100644 --- a/src/ArkData/Extensions.cs +++ b/src/ArkData/Extensions.cs @@ -18,7 +18,7 @@ namespace ArkData return -1; } - public static int[] Locate(this byte[] self, byte[] candidate) + public static IEnumerable Locate(this byte[] self, byte[] candidate) { if (IsEmptyLocate(self, candidate, 0)) return Empty; @@ -29,7 +29,7 @@ namespace ArkData list.Add(position); if (list.Count != 0) - return list.ToArray(); + return list; return Empty; } diff --git a/src/ConanServerManager/Lib/ServerApp.cs b/src/ConanServerManager/Lib/ServerApp.cs index 13ffb523..20ed7c28 100644 --- a/src/ConanServerManager/Lib/ServerApp.cs +++ b/src/ConanServerManager/Lib/ServerApp.cs @@ -1790,7 +1790,7 @@ namespace ServerManagerTool.Lib comment.AppendLine($"Profile Name: {_profile.ProfileName}"); comment.AppendLine($"Process: {ServerProcess}"); - ZipUtils.ZipFiles(backupFile, files.ToArray(), comment.ToString(), false); + ZipUtils.ZipFiles(backupFile, files, comment.ToString(), false); LogProfileMessage($"Backup file created - {backupFile}"); } @@ -1910,7 +1910,7 @@ namespace ServerManagerTool.Lib ZipUtils.ZipAFile(backupFile, worldFileName, worldBackupFile, comment.ToString()); if (files.Count > 0) - ZipUtils.UpdateFiles(backupFile, files.ToArray(), null, false, ""); + ZipUtils.UpdateFiles(backupFile, files, null, false, ""); LogProfileMessage($"Backed up world files - {saveFolder}"); LogProfileMessage($"Backup file created - {backupFile}"); @@ -2851,7 +2851,7 @@ namespace ServerManagerTool.Lib if (ExitCode == EXITCODE_NORMALEXIT) { // get the profile associated with the branch - var profiles = _profiles.Keys.Where(p => p.EnableAutoUpdate && p.BranchName.Equals(branch.BranchName, StringComparison.OrdinalIgnoreCase)).ToArray(); + var profiles = _profiles.Keys.Where(p => p.EnableAutoUpdate && p.BranchName.Equals(branch.BranchName, StringComparison.OrdinalIgnoreCase)); var profileExitCodes = new ConcurrentDictionary(); if (Config.Default.AutoUpdate_ParallelUpdate) @@ -3102,7 +3102,7 @@ namespace ServerManagerTool.Lib if (exitCode == EXITCODE_NORMALEXIT) { - var branches = _profiles.Keys.Where(p => p.EnableAutoUpdate).Select(p => BranchSnapshot.Create(p)).Distinct(new BranchSnapshotComparer()).ToArray(); + var branches = _profiles.Keys.Where(p => p.EnableAutoUpdate).Select(p => BranchSnapshot.Create(p)).Distinct(new BranchSnapshotComparer()); var exitCodes = new ConcurrentDictionary(); // update the server cache for each branch diff --git a/src/ConanServerManager/Lib/ServerPlayers.cs b/src/ConanServerManager/Lib/ServerPlayers.cs index 8205979e..4ba60503 100644 --- a/src/ConanServerManager/Lib/ServerPlayers.cs +++ b/src/ConanServerManager/Lib/ServerPlayers.cs @@ -212,7 +212,7 @@ namespace ServerManagerTool.Lib return; // remove any players that do not have a player record. - var droppedPlayers = this._players.Values.Where(p => dataContainer.Players.FirstOrDefault(pd => pd.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null).ToArray(); + var droppedPlayers = this._players.Values.Where(p => dataContainer.Players.FirstOrDefault(pd => pd.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null); foreach (var droppedPlayer in droppedPlayers) { _players.TryRemove(droppedPlayer.PlayerId, out PlayerInfo player); diff --git a/src/ConanServerManager/Lib/ServerProfile.cs b/src/ConanServerManager/Lib/ServerProfile.cs index 1fc71af3..428bad2d 100644 --- a/src/ConanServerManager/Lib/ServerProfile.cs +++ b/src/ConanServerManager/Lib/ServerProfile.cs @@ -792,11 +792,9 @@ namespace ServerManagerTool.Lib } } - private static Enum[] GetExclusions() + private static IEnumerable GetExclusions() { - var exclusions = new List(); - - return exclusions.ToArray(); + return new List(); } public string GetLauncherFile() => Path.Combine(GetProfileServerConfigDir(), Config.Default.LauncherFile); @@ -885,7 +883,7 @@ namespace ServerManagerTool.Lib return profile; } - public static ServerProfile LoadFromConfigFiles(string file, ServerProfile profile, Enum[] exclusions = null) + public static ServerProfile LoadFromConfigFiles(string file, ServerProfile profile, IEnumerable exclusions = null) { if (string.IsNullOrWhiteSpace(file) || !File.Exists(file)) return null; @@ -1108,7 +1106,7 @@ namespace ServerManagerTool.Lib SaveConfigFile(serverConfigDir); } - public void SaveConfigFile(string configDir, Enum[] exclusions = null) + public void SaveConfigFile(string configDir, IEnumerable exclusions = null) { if (exclusions == null) exclusions = GetExclusions(); @@ -1656,7 +1654,7 @@ namespace ServerManagerTool.Lib Directory.CreateDirectory(folder); var file = Path.Combine(folder, Config.Default.ServerBlacklistFile); - File.WriteAllLines(file, this.ServerFilesBlacklisted.ToArray()); + File.WriteAllLines(file, this.ServerFilesBlacklisted.ToEnumerable()); } catch (Exception ex) { @@ -1673,7 +1671,7 @@ namespace ServerManagerTool.Lib Directory.CreateDirectory(folder); var file = Path.Combine(folder, Config.Default.ServerWhitelistFile); - File.WriteAllLines(file, this.ServerFilesWhitelisted.ToArray()); + File.WriteAllLines(file, this.ServerFilesWhitelisted.ToEnumerable()); } catch (Exception ex) { diff --git a/src/ConanServerManager/Lib/ServerRcon.cs b/src/ConanServerManager/Lib/ServerRcon.cs index a7ceba57..979fe124 100644 --- a/src/ConanServerManager/Lib/ServerRcon.cs +++ b/src/ConanServerManager/Lib/ServerRcon.cs @@ -450,7 +450,7 @@ namespace ServerManagerTool.Lib return new List(); // remove any players that do not have a player record. - var droppedPlayers = this._players.Values.Where(p => dataContainer.Players.FirstOrDefault(pd => pd.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null).ToArray(); + var droppedPlayers = this._players.Values.Where(p => dataContainer.Players.FirstOrDefault(pd => pd.PlayerId.Equals(p.PlayerId, StringComparison.OrdinalIgnoreCase)) == null); foreach (var droppedPlayer in droppedPlayers) { _players.TryRemove(droppedPlayer.PlayerId, out PlayerInfo player); diff --git a/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs index 622295a7..60e21a10 100644 --- a/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -720,7 +720,7 @@ namespace ServerManagerTool var zipFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), this.Settings.ProfileID + ".zip"); if (File.Exists(zipFile)) File.Delete(zipFile); - ZipUtils.ZipFiles(zipFile, files.ToArray(), comment.ToString()); + ZipUtils.ZipFiles(zipFile, files, comment.ToString()); foreach (var kvp in obfuscateFiles) { ZipUtils.ZipAFile(zipFile, kvp.Key, kvp.Value); diff --git a/src/ConanServerManager/Utils/ModUtils.cs b/src/ConanServerManager/Utils/ModUtils.cs index 0cb51fcd..6435e68e 100644 --- a/src/ConanServerManager/Utils/ModUtils.cs +++ b/src/ConanServerManager/Utils/ModUtils.cs @@ -86,7 +86,7 @@ namespace ServerManagerTool.Utils Directory.CreateDirectory(modRootFolder); // get the a list of the mod file into include in the mod file - var modFileItems = modIdList.Select(m => $"{m}.pak").ToArray(); + var modFileItems = modIdList.Select(m => $"{m}.pak"); // create the mod file. File.WriteAllLines(modListFile, modFileItems); } diff --git a/src/QueryMaster/RconSource.cs b/src/QueryMaster/RconSource.cs index 8980a872..bcfb974f 100644 --- a/src/QueryMaster/RconSource.cs +++ b/src/QueryMaster/RconSource.cs @@ -50,14 +50,7 @@ namespace QueryMaster //consecutive rcon command replies start with an empty packet if (BitConverter.ToInt32(recvData[i], 4) == (int)PacketId.Empty) continue; - //if (recvData[i].Length - BitConverter.ToInt32(recvData[i], 0) == 4) - //{ str.Append(RconUtil.ProcessPacket(recvData[i]).Body); - //} - //else - //{ - // str.Append(RconUtil.ProcessPacket(recvData[i]).Body + Util.BytesToString(recvData[++i].Take(recvData[i].Length - 2).ToArray())); - //} } } catch (Exception e) diff --git a/src/QueryMaster/RconUtil.cs b/src/QueryMaster/RconUtil.cs index 133e9596..a8d6c09b 100644 --- a/src/QueryMaster/RconUtil.cs +++ b/src/QueryMaster/RconUtil.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; namespace QueryMaster { diff --git a/src/ServerManager.Common/Interfaces/IIniSectionCollection.cs b/src/ServerManager.Common/Interfaces/IIniSectionCollection.cs index 332d72de..7ae69f60 100644 --- a/src/ServerManager.Common/Interfaces/IIniSectionCollection.cs +++ b/src/ServerManager.Common/Interfaces/IIniSectionCollection.cs @@ -1,10 +1,12 @@ -namespace ServerManagerTool.Common.Interfaces +using System.Collections.Generic; + +namespace ServerManagerTool.Common.Interfaces { public interface IIniSectionCollection { IIniValuesCollection[] Sections { get; } - void Add(string sectionName, string[] values); + void Add(string sectionName, IEnumerable values); void Update(); } diff --git a/src/ServerManager.Common/Lib/UserScopedSettingContractResolver.cs b/src/ServerManager.Common/Lib/UserScopedSettingContractResolver.cs index 94855d0f..4ed0a4ea 100644 --- a/src/ServerManager.Common/Lib/UserScopedSettingContractResolver.cs +++ b/src/ServerManager.Common/Lib/UserScopedSettingContractResolver.cs @@ -13,7 +13,7 @@ namespace ServerManagerTool.Common.Lib { JsonProperty property = base.CreateProperty(member, memberSerialization); - var customAttributes = member.CustomAttributes?.ToArray() ?? new CustomAttributeData[0]; + var customAttributes = member.CustomAttributes ?? new CustomAttributeData[0]; if (customAttributes.Any(a => a.AttributeType == typeof(System.Configuration.UserScopedSettingAttribute))) { property.ShouldSerialize = instance => { return property.PropertyType.IsValueType || property.PropertyType == typeof(string); }; diff --git a/src/ServerManager.Common/Model/AggregateIniValue.cs b/src/ServerManager.Common/Model/AggregateIniValue.cs index 47c76ad8..7edb9020 100644 --- a/src/ServerManager.Common/Model/AggregateIniValue.cs +++ b/src/ServerManager.Common/Model/AggregateIniValue.cs @@ -173,13 +173,13 @@ namespace ServerManagerTool.Common.Model if (property.GetValue(this) is IIniValuesCollection collection) { - var values = SplitCollectionValues(kvPropertyValue, DELIMITER); - values = values.Where(v => !string.IsNullOrWhiteSpace(v)).ToArray(); + var values = SplitCollectionValues(kvPropertyValue, DELIMITER) + .Where(v => !string.IsNullOrWhiteSpace(v)); if (attr?.ListValueWithinBrackets ?? false) { - values = values.Select(v => v.Substring(1)).ToArray(); - values = values.Select(v => v.Substring(0, v.Length - 1)).ToArray(); + values = values.Select(v => v.Substring(1)); + values = values.Select(v => v.Substring(0, v.Length - 1)); } collection.FromIniValues(values); } @@ -266,7 +266,7 @@ namespace ServerManagerTool.Common.Model return result.ToString(); } - protected string[] SplitCollectionValues(string valueString, char delimiter) + protected IEnumerable SplitCollectionValues(string valueString, char delimiter) { if (string.IsNullOrWhiteSpace(valueString)) return new string[0]; @@ -306,7 +306,7 @@ namespace ServerManagerTool.Common.Model result.Add(tempString.Substring(startIndex)); - return result.ToArray(); + return result; } public void Update(AggregateIniValue other) diff --git a/src/ServerManager.Common/Model/AggregateIniValueList.cs b/src/ServerManager.Common/Model/AggregateIniValueList.cs index b62fb4af..87630037 100644 --- a/src/ServerManager.Common/Model/AggregateIniValueList.cs +++ b/src/ServerManager.Common/Model/AggregateIniValueList.cs @@ -59,17 +59,16 @@ namespace ServerManagerTool.Common.Model public virtual void FromIniValues(IEnumerable iniValues) { - var items = iniValues?.Select(AggregateIniValue.FromINIValue).ToArray(); + var items = iniValues?.Select(AggregateIniValue.FromINIValue); Clear(); AddRange(items); - IsEnabled = (Count != 0); + IsEnabled = (Count > 0); // Add any default values which were missing if (_resetFunc != null) { - var defaultItemsToAdd = _resetFunc().Where(r => !this.Any(v => v.IsEquivalent(r))).ToArray(); - AddRange(defaultItemsToAdd); + AddRange(_resetFunc().Where(r => !this.Any(v => v.IsEquivalent(r)))); } Sort(AggregateIniValue.SortKeySelector); diff --git a/src/ServerManager.Common/Model/CustomSectionList.cs b/src/ServerManager.Common/Model/CustomSectionList.cs index dc46c5b4..fc395447 100644 --- a/src/ServerManager.Common/Model/CustomSectionList.cs +++ b/src/ServerManager.Common/Model/CustomSectionList.cs @@ -1,5 +1,6 @@ using ServerManagerTool.Common.Interfaces; using System; +using System.Collections.Generic; using System.Linq; namespace ServerManagerTool.Common.Model @@ -14,12 +15,12 @@ namespace ServerManagerTool.Common.Model } } - public void Add(string sectionName, string[] values) + public void Add(string sectionName, IEnumerable values) { Add(sectionName, values, true); } - public void Add(string sectionName, string[] values, bool clearExisting) + public void Add(string sectionName, IEnumerable values, bool clearExisting) { var section = this.Items.FirstOrDefault(s => s.SectionName.Equals(sectionName, StringComparison.OrdinalIgnoreCase) && !s.IsDeleted); if (section == null) diff --git a/src/ServerManager.Common/Model/IniValueList.cs b/src/ServerManager.Common/Model/IniValueList.cs index 22febae9..71540c3c 100644 --- a/src/ServerManager.Common/Model/IniValueList.cs +++ b/src/ServerManager.Common/Model/IniValueList.cs @@ -98,8 +98,7 @@ namespace ServerManagerTool.Common.Model // Add any default values which were missing if (this.ResetFunc != null) { - var defaultItemsToAdd = this.ResetFunc().Where(r => !this.Any(v => this.EquivalencyFunc(v, r))).ToArray(); - this.AddRange(defaultItemsToAdd); + this.AddRange(this.ResetFunc().Where(r => !this.Any(v => this.EquivalencyFunc(v, r)))); this.Sort(this.SortKeySelectorFunc); } } diff --git a/src/ServerManager.Common/Model/PlayerUserList.cs b/src/ServerManager.Common/Model/PlayerUserList.cs index 44e6a076..19d9e9fa 100644 --- a/src/ServerManager.Common/Model/PlayerUserList.cs +++ b/src/ServerManager.Common/Model/PlayerUserList.cs @@ -1,4 +1,5 @@ -using System.Collections.ObjectModel; +using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Runtime.Serialization; @@ -68,16 +69,15 @@ namespace ServerManagerTool.Common.Model public void Remove(string steamId) { - var items = this.Where(i => i.PlayerId.Equals(steamId, System.StringComparison.OrdinalIgnoreCase)).ToArray(); - foreach (var item in items) + foreach (var item in this.Where(i => i.PlayerId.Equals(steamId, System.StringComparison.OrdinalIgnoreCase))) { this.Remove(item); } } - public string[] ToArray() + public IEnumerable ToEnumerable() { - return this.Select(i => i.PlayerId).ToArray(); + return this.Select(i => i.PlayerId); } public string ToDelimitedString(string delimiter) diff --git a/src/ServerManager.Common/Model/SteamCmdManifestDetailsResult.cs b/src/ServerManager.Common/Model/SteamCmdManifestDetailsResult.cs index f6549537..bcc02796 100644 --- a/src/ServerManager.Common/Model/SteamCmdManifestDetailsResult.cs +++ b/src/ServerManager.Common/Model/SteamCmdManifestDetailsResult.cs @@ -18,7 +18,7 @@ namespace ServerManagerTool.Common.Model var tableValue = value as VdfTable; if (tableValue != null && tableValue.Count > 0) { - var betaKeyItems = tableValue.Where(v => v.Name.Equals("betakey", StringComparison.OrdinalIgnoreCase)).ToArray(); + var betaKeyItems = tableValue.Where(v => v.Name.Equals("betakey", StringComparison.OrdinalIgnoreCase)); foreach (var item in betaKeyItems) { tableValue.Remove(item); diff --git a/src/ServerManager.Common/Serialization/BaseSystemIniFile.cs b/src/ServerManager.Common/Serialization/BaseSystemIniFile.cs index 75272603..b4d89f88 100644 --- a/src/ServerManager.Common/Serialization/BaseSystemIniFile.cs +++ b/src/ServerManager.Common/Serialization/BaseSystemIniFile.cs @@ -32,7 +32,7 @@ namespace ServerManagerTool.Common.Serialization get; } - public void Deserialize(object obj, Enum[] exclusions) + public void Deserialize(object obj, IEnumerable exclusions) { var iniFiles = new Dictionary(); var fields = obj.GetType() @@ -168,7 +168,7 @@ namespace ServerManagerTool.Common.Serialization } } - public void Serialize(object obj, Enum[] exclusions) + public void Serialize(object obj, IEnumerable exclusions) { var iniFiles = new Dictionary(); var fields = obj.GetType() @@ -205,7 +205,7 @@ namespace ServerManagerTool.Common.Serialization if (section.IsEnabled) { - WriteSection(iniFiles, attr.File, section.IniCollectionKey, section.ToIniValues().ToArray()); + WriteSection(iniFiles, attr.File, section.IniCollectionKey, section.ToIniValues()); } } } @@ -228,8 +228,7 @@ namespace ServerManagerTool.Common.Serialization { var section = ReadSection(iniFiles, attr.File, attr.Section); var filteredSection = section - .Where(s => !s.StartsWith(collection.IniCollectionKey + (collection.IsArray ? "[" : "="))) - .ToArray(); + .Where(s => !s.StartsWith(collection.IniCollectionKey + (collection.IsArray ? "[" : "="))); WriteSection(iniFiles, attr.File, attr.Section, filteredSection); } @@ -314,7 +313,7 @@ namespace ServerManagerTool.Common.Serialization result = result.Concat(collection.ToIniValues()); } - WriteSection(iniFiles, attr.File, attr.Section, result?.ToArray()); + WriteSection(iniFiles, attr.File, attr.Section, result); } } else @@ -381,29 +380,29 @@ namespace ServerManagerTool.Common.Serialization SaveFiles(iniFiles); } - public string[] ReadSection(Enum iniFile, Enum section) + public IEnumerable ReadSection(Enum iniFile, Enum section) { return ReadSection(iniFile, SectionNames[section]); } - public string[] ReadSection(Enum iniFile, string sectionName) + public IEnumerable ReadSection(Enum iniFile, string sectionName) { var file = Path.Combine(this.BasePath, FileNames[iniFile]); return IniFileUtils.ReadSection(file, sectionName); } - public void WriteSection(Enum iniFile, Enum section, string[] values) + public void WriteSection(Enum iniFile, Enum section, IEnumerable values) { WriteSection(iniFile, SectionNames[section], values); } - public void WriteSection(Enum iniFile, string sectionName, string[] values) + public void WriteSection(Enum iniFile, string sectionName, IEnumerable values) { var file = Path.Combine(this.BasePath, FileNames[iniFile]); IniFileUtils.WriteSection(file, sectionName, values); } - private string[] ReadCustomSectionNames(Dictionary iniFiles, Enum iniFile) + private IEnumerable ReadCustomSectionNames(Dictionary iniFiles, Enum iniFile) { if (!iniFiles.ContainsKey(FileNames[iniFile])) { @@ -415,15 +414,15 @@ namespace ServerManagerTool.Common.Serialization } } - return iniFiles[FileNames[iniFile]].Sections.Select(s => s.SectionName).Where(s => !SectionNames.ContainsValue(s)).ToArray(); + return iniFiles[FileNames[iniFile]].Sections.Select(s => s.SectionName).Where(s => !SectionNames.ContainsValue(s)); } - private string[] ReadSection(Dictionary iniFiles, Enum iniFile, Enum section) + private IEnumerable ReadSection(Dictionary iniFiles, Enum iniFile, Enum section) { return ReadSection(iniFiles, iniFile, SectionNames[section]); } - private string[] ReadSection(Dictionary iniFiles, Enum iniFile, string sectionName) + private IEnumerable ReadSection(Dictionary iniFiles, Enum iniFile, string sectionName) { if (!iniFiles.ContainsKey(FileNames[iniFile])) { @@ -435,7 +434,7 @@ namespace ServerManagerTool.Common.Serialization } } - return iniFiles[FileNames[iniFile]].GetSection(sectionName)?.KeysToStringArray() ?? new string[0]; + return iniFiles[FileNames[iniFile]].GetSection(sectionName)?.KeysToStringEnumerable() ?? new string[0]; } private string ReadValue(Dictionary iniFiles, Enum iniFile, Enum section, string keyName) @@ -453,12 +452,12 @@ namespace ServerManagerTool.Common.Serialization return iniFiles[FileNames[iniFile]].GetKey(SectionNames[section], keyName)?.KeyValue ?? string.Empty; } - private void WriteSection(Dictionary iniFiles, Enum iniFile, Enum section, string[] values) + private void WriteSection(Dictionary iniFiles, Enum iniFile, Enum section, IEnumerable values) { WriteSection(iniFiles, iniFile, SectionNames[section], values); } - private void WriteSection(Dictionary iniFiles, Enum iniFile, string sectionName, string[] values) + private void WriteSection(Dictionary iniFiles, Enum iniFile, string sectionName, IEnumerable values) { if (!iniFiles.ContainsKey(FileNames[iniFile])) { diff --git a/src/ServerManager.Common/Serialization/IniFile.cs b/src/ServerManager.Common/Serialization/IniFile.cs index 8d7e856d..15c6fdd1 100644 --- a/src/ServerManager.Common/Serialization/IniFile.cs +++ b/src/ServerManager.Common/Serialization/IniFile.cs @@ -68,7 +68,7 @@ namespace ServerManagerTool.Common.Serialization Sections.Remove(section); } - public bool WriteSection(string sectionName, string[] keysValuePairs) + public bool WriteSection(string sectionName, IEnumerable keysValuePairs) { if (sectionName == null) return false; @@ -186,7 +186,7 @@ namespace ServerManagerTool.Common.Serialization { result.AppendLine($"[{section.SectionName}]"); - foreach (var keyString in section.KeysToStringArray()) + foreach (var keyString in section.KeysToStringEnumerable()) { result.AppendLine(keyString); } diff --git a/src/ServerManager.Common/Serialization/IniSection.cs b/src/ServerManager.Common/Serialization/IniSection.cs index 72c360a2..8a848b01 100644 --- a/src/ServerManager.Common/Serialization/IniSection.cs +++ b/src/ServerManager.Common/Serialization/IniSection.cs @@ -41,9 +41,9 @@ namespace ServerManagerTool.Common.Serialization return Keys?.FirstOrDefault(s => s.KeyName.Equals(keyName, StringComparison.OrdinalIgnoreCase)); } - public string[] KeysToStringArray() + public IEnumerable KeysToStringEnumerable() { - return Keys.Select(k => k.ToString()).ToArray(); + return Keys.Select(k => k.ToString()); } public void RemoveKey(string keyName) diff --git a/src/ServerManager.Common/Utils/IniFileUtils.cs b/src/ServerManager.Common/Utils/IniFileUtils.cs index ded51df2..1cbc29ab 100644 --- a/src/ServerManager.Common/Utils/IniFileUtils.cs +++ b/src/ServerManager.Common/Utils/IniFileUtils.cs @@ -1,5 +1,6 @@ using ServerManagerTool.Common.Serialization; using System; +using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; @@ -13,13 +14,13 @@ namespace ServerManagerTool.Common.Utils /// The name of the initialization file. /// The name of the section in the initialization file. /// A string array containing the key name and value pairs associated with the named section. - public static string[] ReadSection(string file, string sectionName) + public static IEnumerable ReadSection(string file, string sectionName) { if (sectionName == null) return new string[0]; var iniFile = ReadFromFile(file); - return iniFile?.GetSection(sectionName)?.KeysToStringArray() ?? new string[0]; + return iniFile?.GetSection(sectionName)?.KeysToStringEnumerable() ?? new string[0]; } /// @@ -46,7 +47,7 @@ namespace ServerManagerTool.Common.Utils /// The name of the section in which data is written. /// An array of key names and associated values that are to be written to the named section. /// True if the function succeeds; otherwise False. - public static bool WriteSection(string file, string sectionName, string[] keysValuePairs) + public static bool WriteSection(string file, string sectionName, IEnumerable keysValuePairs) { if (sectionName == null) return false; @@ -165,7 +166,7 @@ namespace ServerManagerTool.Common.Utils { writer.WriteLine($"[{section.SectionName}]"); - foreach (var keyString in section.KeysToStringArray()) + foreach (var keyString in section.KeysToStringEnumerable()) { writer.WriteLine(keyString); } diff --git a/src/ServerManager.Common/Utils/ProcessUtils.cs b/src/ServerManager.Common/Utils/ProcessUtils.cs index 42009d28..4e5fbad9 100644 --- a/src/ServerManager.Common/Utils/ProcessUtils.cs +++ b/src/ServerManager.Common/Utils/ProcessUtils.cs @@ -285,7 +285,7 @@ namespace ServerManagerTool.Common.Utils } } - public static BigInteger[] GetProcessorAffinityList() + public static IEnumerable GetProcessorAffinityList() { var processorCount = ProcessorCount; var results = new List(processorCount + 1); @@ -295,7 +295,7 @@ namespace ServerManagerTool.Common.Utils { results.Add((BigInteger)Math.Pow(2, index)); } - return results.ToArray(); + return results; } public static string[] GetProcessPriorityList() diff --git a/src/ServerManager.Common/Utils/SettingsUtils.cs b/src/ServerManager.Common/Utils/SettingsUtils.cs index e5f4f63d..6e727f9f 100644 --- a/src/ServerManager.Common/Utils/SettingsUtils.cs +++ b/src/ServerManager.Common/Utils/SettingsUtils.cs @@ -49,7 +49,7 @@ namespace ServerManagerTool.Common.Utils try { - var filesToDelete = new DirectoryInfo(backupPath).GetFiles($"{settingsFileName}_*{settingsFileExt}").Where(f => f.LastWriteTimeUtc.AddDays(7) < DateTime.UtcNow).ToArray(); + var filesToDelete = new DirectoryInfo(backupPath).GetFiles($"{settingsFileName}_*{settingsFileExt}").Where(f => f.LastWriteTimeUtc.AddDays(7) < DateTime.UtcNow); foreach (var fileToDelete in filesToDelete) { try diff --git a/src/ServerManager.Common/Utils/ZipUtils.cs b/src/ServerManager.Common/Utils/ZipUtils.cs index f246bae6..76468949 100644 --- a/src/ServerManager.Common/Utils/ZipUtils.cs +++ b/src/ServerManager.Common/Utils/ZipUtils.cs @@ -1,5 +1,6 @@ using Ionic.Zip; using System; +using System.Collections.Generic; using System.IO; using System.Linq; @@ -68,11 +69,11 @@ namespace ServerManagerTool.Common.Utils } } - public static void UpdateFiles(string zipFile, string[] filesToZip, string comment = "", bool preserveDirHierarchy = true, string directoryPathInArchive = "") + public static void UpdateFiles(string zipFile, IEnumerable filesToZip, string comment = "", bool preserveDirHierarchy = true, string directoryPathInArchive = "") { if (string.IsNullOrWhiteSpace(zipFile)) throw new ArgumentNullException(nameof(zipFile)); - if (filesToZip == null || filesToZip.Length == 0) + if (!filesToZip.Any()) return; if (!File.Exists(zipFile)) @@ -160,11 +161,11 @@ namespace ServerManagerTool.Common.Utils } } - public static void ZipFiles(string zipFile, string[] filesToZip, string comment = "", bool preserveDirHierarchy = true, string directoryPathInArchive = "") + public static void ZipFiles(string zipFile, IEnumerable filesToZip, string comment = "", bool preserveDirHierarchy = true, string directoryPathInArchive = "") { if (string.IsNullOrWhiteSpace(zipFile)) throw new ArgumentNullException(nameof(zipFile)); - if (filesToZip == null || filesToZip.Length == 0) + if (!filesToZip.Any()) throw new ArgumentNullException(nameof(filesToZip)); using (var zip = new ZipFile(zipFile)) diff --git a/src/ServerManager.Updater/Program.cs b/src/ServerManager.Updater/Program.cs index ec4ea0c9..2246a070 100644 --- a/src/ServerManager.Updater/Program.cs +++ b/src/ServerManager.Updater/Program.cs @@ -277,7 +277,7 @@ namespace ServerManagerTool.Updater var processes = ProcessUtils.GetProcesses(process.ProcessName, executablePath); // check if there is more than one instance of the application running - if (processes.Length != 1) + if (processes.Count() != 1) throw new Exception("The application to be updated has more than one instance running."); // get the command line of the process diff --git a/src/ServerManager.Updater/Utils/ProcessUtils.cs b/src/ServerManager.Updater/Utils/ProcessUtils.cs index ccf7248f..c60d54c5 100644 --- a/src/ServerManager.Updater/Utils/ProcessUtils.cs +++ b/src/ServerManager.Updater/Utils/ProcessUtils.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; @@ -83,7 +84,7 @@ namespace ServerManagerTool.Updater return Process.GetProcessById(processId); } - public static Process[] GetProcesses(string processName, string executablePath) + public static IEnumerable GetProcesses(string processName, string executablePath) { var runningProcesses = Process.GetProcessesByName(processName).ToList(); @@ -95,7 +96,7 @@ namespace ServerManagerTool.Updater runningProcesses.RemoveAt(i); } - return runningProcesses.ToArray(); + return runningProcesses; } public static bool IsAlreadyRunning() From 7af5f90e30c799325a423bc17af2df02d8c99cc9 Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Thu, 16 Dec 2021 00:57:01 +1000 Subject: [PATCH 6/7] Removal of ToList() --- src/ARKServerManager/Lib/GameData.cs | 20 ++++++------- src/ARKServerManager/Lib/Model/NPCSpawner.cs | 1 - src/ARKServerManager/Lib/ServerApp.cs | 4 +-- src/ARKServerManager/Lib/ServerProfile.cs | 4 +-- .../Lib/ServerProfileSnapshot.cs | 2 +- .../ServerSettingsControl.xaml.cs | 29 ++++++++++++------- src/ARKServerManager/Utils/ModUtils.cs | 22 +++++++------- src/ArkData/DataContainerBase.cs | 2 +- src/ConanServerManager/Lib/ServerApp.cs | 4 +-- .../Model/PlayerUserList.cs | 2 +- 10 files changed, 48 insertions(+), 42 deletions(-) diff --git a/src/ARKServerManager/Lib/GameData.cs b/src/ARKServerManager/Lib/GameData.cs index 2f0117fe..a904a434 100644 --- a/src/ARKServerManager/Lib/GameData.cs +++ b/src/ARKServerManager/Lib/GameData.cs @@ -52,7 +52,7 @@ namespace ServerManagerTool.Lib items = gameData.Items.ConvertAll(item => new PrimalItem { ClassName = item.ClassName, Mod = item.Mod, KnownItem = true, Category = item.Category }).ToArray(); // resources - resourceMultipliers = gameData.Items.Where(item => item.IsHarvestable).ToList().ConvertAll(item => new ResourceClassMultiplier { ClassName = item.ClassName, Mod = item.Mod, KnownResource = true }).ToArray(); + resourceMultipliers = gameData.Items.Where(item => item.IsHarvestable).Select(item => new ResourceClassMultiplier { ClassName = item.ClassName, Mod = item.Mod, KnownResource = true }).ToArray(); // map spawners gameData.MapSpawners.AddRange(userGameData.MapSpawners); @@ -77,9 +77,9 @@ namespace ServerManagerTool.Lib if (gameData.GameMaps.Count > 0) { var maps1 = gameMaps.ToList(); - maps1.AddRange(gameData.GameMaps.Where(item => !item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.ClassName, DisplayMember = item.Description })); + maps1.AddRange(gameData.GameMaps.Where(item => !item.IsSotF).Select(item => new ComboBoxItem { ValueMember = item.ClassName, DisplayMember = item.Description })); var maps2 = gameMapsSotF.ToList(); - maps2.AddRange(gameData.GameMaps.Where(item => item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.ClassName, DisplayMember = item.Description })); + maps2.AddRange(gameData.GameMaps.Where(item => item.IsSotF).Select(item => new ComboBoxItem { ValueMember = item.ClassName, DisplayMember = item.Description })); gameMaps = maps1.ToArray(); gameMapsSotF = maps2.ToArray(); @@ -91,9 +91,9 @@ namespace ServerManagerTool.Lib if (gameData.TotalConversions.Count > 0) { var mods1 = totalConversions.ToList(); - mods1.AddRange(gameData.TotalConversions.Where(item => !item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.ClassName, DisplayMember = item.Description })); + mods1.AddRange(gameData.TotalConversions.Where(item => !item.IsSotF).Select(item => new ComboBoxItem { ValueMember = item.ClassName, DisplayMember = item.Description })); var mods2 = totalConversionsSotF.ToList(); - mods2.AddRange(gameData.TotalConversions.Where(item => item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.ClassName, DisplayMember = item.Description })); + mods2.AddRange(gameData.TotalConversions.Where(item => item.IsSotF).Select(item => new ComboBoxItem { ValueMember = item.ClassName, DisplayMember = item.Description })); totalConversions = mods1.ToArray(); totalConversionsSotF = mods2.ToArray(); @@ -130,9 +130,9 @@ namespace ServerManagerTool.Lib if (gameData.Branches.Count > 0) { var branches1 = branches.ToList(); - branches1.AddRange(gameData.Branches.Where(item => !item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.BranchName, DisplayMember = item.Description })); + branches1.AddRange(gameData.Branches.Where(item => !item.IsSotF).Select(item => new ComboBoxItem { ValueMember = item.BranchName, DisplayMember = item.Description })); var branches2 = branchesSotF.ToList(); - branches2.AddRange(gameData.Branches.Where(item => item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.BranchName, DisplayMember = item.Description })); + branches2.AddRange(gameData.Branches.Where(item => item.IsSotF).Select(item => new ComboBoxItem { ValueMember = item.BranchName, DisplayMember = item.Description })); branches = branches1.ToArray(); branchesSotF = branches2.ToArray(); @@ -144,9 +144,9 @@ namespace ServerManagerTool.Lib if (gameData.Events.Count > 0) { var events1 = events.ToList(); - events1.AddRange(gameData.Events.Where(item => !item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.EventName, DisplayMember = item.Description })); + events1.AddRange(gameData.Events.Where(item => !item.IsSotF).Select(item => new ComboBoxItem { ValueMember = item.EventName, DisplayMember = item.Description })); var events2 = eventsSotF.ToList(); - events2.AddRange(gameData.Events.Where(item => item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.EventName, DisplayMember = item.Description })); + events2.AddRange(gameData.Events.Where(item => item.IsSotF).Select(item => new ComboBoxItem { ValueMember = item.EventName, DisplayMember = item.Description })); events = events1.ToArray(); eventsSotF = events2.ToArray(); @@ -157,7 +157,7 @@ namespace ServerManagerTool.Lib if (gameData.OfficialMods.Count > 0) { - ModUtils.AddOfficialMods(gameData.OfficialMods.Where(m => !string.IsNullOrWhiteSpace(m.ModId)).Select(m => m.ModId)); + ModUtils.AddOfficialMods(gameData.OfficialMods.Where(m => !string.IsNullOrWhiteSpace(m.ModId)).Select(m => m.ModId).ToList()); } } diff --git a/src/ARKServerManager/Lib/Model/NPCSpawner.cs b/src/ARKServerManager/Lib/Model/NPCSpawner.cs index 61922efc..5784f182 100644 --- a/src/ARKServerManager/Lib/Model/NPCSpawner.cs +++ b/src/ARKServerManager/Lib/Model/NPCSpawner.cs @@ -6,7 +6,6 @@ using ServerManagerTool.Enums; using ServerManagerTool.Interface; using System; using System.Collections.Generic; -using System.ComponentModel; using System.Linq; using System.Runtime.Serialization; using System.Text; diff --git a/src/ARKServerManager/Lib/ServerApp.cs b/src/ARKServerManager/Lib/ServerApp.cs index c4bfbaa6..a2715ef4 100644 --- a/src/ARKServerManager/Lib/ServerApp.cs +++ b/src/ARKServerManager/Lib/ServerApp.cs @@ -452,8 +452,8 @@ namespace ServerManagerTool.Lib { try { - var playerInfo = gameServer?.GetPlayers()?.Where(p => !string.IsNullOrWhiteSpace(p.Name?.Trim())).ToList(); - var playerCount = playerInfo?.Count ?? -1; + var playerInfo = gameServer?.GetPlayers()?.Where(p => !string.IsNullOrWhiteSpace(p.Name?.Trim())); + var playerCount = playerInfo?.Count() ?? -1; // check if anyone is logged into the server if (playerCount <= 0) diff --git a/src/ARKServerManager/Lib/ServerProfile.cs b/src/ARKServerManager/Lib/ServerProfile.cs index e931cb17..62a4f416 100644 --- a/src/ARKServerManager/Lib/ServerProfile.cs +++ b/src/ARKServerManager/Lib/ServerProfile.cs @@ -4978,7 +4978,7 @@ namespace ServerManagerTool.Lib var csvMapper = new CsvDinoLevelMapping(); var csvParser = new CsvParser(csvParserOptions, csvMapper); - var result = csvParser.ReadFromFile(fileName, Encoding.ASCII).ToList(); + var result = csvParser.ReadFromFile(fileName, Encoding.ASCII); if (result.Any(r => !r.IsValid)) { var error = result.First(r => r.Error != null); @@ -5005,7 +5005,7 @@ namespace ServerManagerTool.Lib var csvMapper = new CsvPlayerLevelMapping(); var csvParser = new CsvParser(csvParserOptions, csvMapper); - var result = csvParser.ReadFromFile(fileName, Encoding.ASCII).ToList(); + var result = csvParser.ReadFromFile(fileName, Encoding.ASCII); if (result.Any(r => !r.IsValid)) { var error = result.First(r => r.Error != null); diff --git a/src/ARKServerManager/Lib/ServerProfileSnapshot.cs b/src/ARKServerManager/Lib/ServerProfileSnapshot.cs index 0d2238ec..2a02fbe2 100644 --- a/src/ARKServerManager/Lib/ServerProfileSnapshot.cs +++ b/src/ARKServerManager/Lib/ServerProfileSnapshot.cs @@ -29,7 +29,7 @@ namespace ServerManagerTool.Lib public string ServerMap; public string ServerMapModId; public string TotalConversionModId; - public List ServerModIds; + public IEnumerable ServerModIds; public string MOTD; public int MotDDuration; public bool MOTDIntervalEnabled; diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs index 7b16ebcb..f5620ddb 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -1406,7 +1406,8 @@ namespace ServerManagerTool { Settings.DinoSettings.RenderToModel(); - var iniValues = Settings.DinoSpawnWeightMultipliers.ToIniValues().ToList(); + var iniValues = new List(); + iniValues.AddRange(Settings.DinoSpawnWeightMultipliers.ToIniValues()); iniValues.AddRange(Settings.PreventDinoTameClassNames.ToIniValues()); iniValues.AddRange(Settings.NPCReplacements.ToIniValues()); iniValues.AddRange(Settings.DinoClassDamageMultipliers.ToIniValues()); @@ -1487,7 +1488,7 @@ namespace ServerManagerTool private void SaveCustomResources_Click(object sender, RoutedEventArgs e) { - var iniValues = Settings.HarvestResourceItemAmountClassMultipliers.ToIniValues().ToList(); + var iniValues = Settings.HarvestResourceItemAmountClassMultipliers.ToIniValues(); var iniValue = string.Join("\r\n", iniValues); var window = new CommandLineWindow(iniValue); @@ -1716,7 +1717,8 @@ namespace ServerManagerTool Settings.EngramSettings.OnlyAllowSpecifiedEngrams = Settings.OnlyAllowSpecifiedEngrams; Settings.EngramSettings.RenderToModel(); - var iniValues = Settings.OverrideNamedEngramEntries.ToIniValues().ToList(); + var iniValues = new List(); + iniValues.AddRange(Settings.OverrideNamedEngramEntries.ToIniValues()); iniValues.AddRange(Settings.EngramEntryAutoUnlocks.ToIniValues()); var iniValue = string.Join("\r\n", iniValues); @@ -1822,7 +1824,8 @@ namespace ServerManagerTool private void SaveCraftingOverride_Click(object sender, RoutedEventArgs e) { - var iniValues = Settings.ConfigOverrideItemCraftingCosts.ToIniValues().ToList(); + var iniValues = new List(); + iniValues.AddRange(Settings.ConfigOverrideItemCraftingCosts.ToIniValues()); var iniValue = string.Join("\r\n", iniValues); var window = new CommandLineWindow(iniValue); @@ -2966,7 +2969,8 @@ namespace ServerManagerTool { Settings.NPCSpawnSettings.RenderToModel(); - var iniValues = Settings.ConfigAddNPCSpawnEntriesContainer.ToIniValues().ToList(); + var iniValues = new List(); + iniValues.AddRange(Settings.ConfigAddNPCSpawnEntriesContainer.ToIniValues()); iniValues.AddRange(Settings.ConfigSubtractNPCSpawnEntriesContainer.ToIniValues()); iniValues.AddRange(Settings.ConfigOverrideNPCSpawnEntriesContainer.ToIniValues()); var iniValue = string.Join("\r\n", iniValues); @@ -3199,7 +3203,8 @@ namespace ServerManagerTool { Settings.ConfigOverrideSupplyCrateItems.RenderToModel(); - var iniValues = Settings.ConfigOverrideSupplyCrateItems.ToIniValues().ToList(); + var iniValues = new List(); + iniValues.AddRange(Settings.ConfigOverrideSupplyCrateItems.ToIniValues()); var iniValue = string.Join("\r\n", iniValues); var window = new CommandLineWindow(iniValue); @@ -3301,7 +3306,8 @@ namespace ServerManagerTool { Settings.ConfigOverrideItemMaxQuantity.RenderToModel(); - var iniValues = Settings.ConfigOverrideItemMaxQuantity.ToIniValues().ToList(); + var iniValues = new List(); + iniValues.AddRange(Settings.ConfigOverrideItemMaxQuantity.ToIniValues()); var iniValue = string.Join("\r\n", iniValues); var window = new CommandLineWindow(iniValue); @@ -3401,7 +3407,8 @@ namespace ServerManagerTool { Settings.PreventTransferForClassNames.RenderToModel(); - var iniValues = Settings.PreventTransferForClassNames.ToIniValues().ToList(); + var iniValues = new List(); + iniValues.AddRange(Settings.PreventTransferForClassNames.ToIniValues()); var iniValue = string.Join("\r\n", iniValues); var window = new CommandLineWindow(iniValue); @@ -3442,7 +3449,7 @@ namespace ServerManagerTool var name = _globalizer.GetResourceString($"Mod_{value}"); newList.Add(new Common.Model.ComboBoxItem(value, name)); - var values = GameData.GetDinoSpawns().GroupBy(d => d.Mod).OrderBy(g => g.Key).Select(g => g.Key).ToList(); + var values = GameData.GetDinoSpawns().GroupBy(d => d.Mod).OrderBy(g => g.Key).Select(g => g.Key); foreach (var modValue in values) { if (string.IsNullOrWhiteSpace(modValue)) @@ -3472,7 +3479,7 @@ namespace ServerManagerTool var name = _globalizer.GetResourceString($"Mod_{value}"); newList.Add(new Common.Model.ComboBoxItem(value, name)); - var values = GameData.GetEngrams().GroupBy(d => d.Mod).OrderBy(g => g.Key).Select(g => g.Key).ToList(); + var values = GameData.GetEngrams().GroupBy(d => d.Mod).OrderBy(g => g.Key).Select(g => g.Key); foreach (var modValue in values) { if (string.IsNullOrWhiteSpace(modValue)) @@ -3502,7 +3509,7 @@ namespace ServerManagerTool var name = _globalizer.GetResourceString($"Mod_{value}"); newList.Add(new Common.Model.ComboBoxItem(value, name)); - var values = GameData.GetResourceMultipliers().GroupBy(d => d.Mod).OrderBy(g => g.Key).Select(g => g.Key).ToList(); + var values = GameData.GetResourceMultipliers().GroupBy(d => d.Mod).OrderBy(g => g.Key).Select(g => g.Key); foreach (var modValue in values) { if (string.IsNullOrWhiteSpace(modValue)) diff --git a/src/ARKServerManager/Utils/ModUtils.cs b/src/ARKServerManager/Utils/ModUtils.cs index 54e22ef3..9ab371fe 100644 --- a/src/ARKServerManager/Utils/ModUtils.cs +++ b/src/ARKServerManager/Utils/ModUtils.cs @@ -46,15 +46,15 @@ namespace ServerManagerTool.Utils } } - public static void AddOfficialMods(IEnumerable modIds) + public static void AddOfficialMods(List modIds) { if (OfficialMods == null) OfficialMods = new List(); if (modIds != null) { - var modIdsToAdd = modIds.Where(m => !string.IsNullOrWhiteSpace(m) && !OfficialMods.Contains(m)).Distinct().ToList(); - if (modIdsToAdd != null && modIdsToAdd.Count > 0) + var modIdsToAdd = modIds.Where(m => !string.IsNullOrWhiteSpace(m) && !OfficialMods.Contains(m)).Distinct(); + if (modIdsToAdd.Any()) { OfficialMods.AddRange(modIdsToAdd); } @@ -170,14 +170,14 @@ namespace ServerManagerTool.Utils return string.Empty; // split the map string into parts, using the '/' separator. - var parts = serverMap.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).ToList(); + var parts = serverMap.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); long mapModId; - if (parts.Count == 1 && long.TryParse(parts[0], out mapModId)) + if (parts.Length == 1 && long.TryParse(parts[0], out mapModId)) return mapModId.ToString(); // check if any parts were returned. - if (parts.Count != 4) + if (parts.Length != 4) return string.Empty; // check if the first two parts match what is expected. @@ -194,12 +194,12 @@ namespace ServerManagerTool.Utils return string.Empty; // split the map string into parts, using the '/' separator. - var parts = serverMap.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).ToList(); + var parts = serverMap.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); // check if any parts were returned. - if (parts.Count == 1) + if (parts.Length == 1) return serverMap; - if (parts.Count != 4) + if (parts.Length != 4) return string.Empty; // check if the first two parts match what is expected. @@ -496,9 +496,9 @@ namespace ServerManagerTool.Utils return new List(); // remove all null, empty, duplicate and Official mod ids. - var newModIdList = modIdList.Where(m => !string.IsNullOrWhiteSpace(m) && !IsOfficialMod(m)).Distinct().ToList(); + var newModIdList = modIdList.Where(m => !string.IsNullOrWhiteSpace(m) && !IsOfficialMod(m)).Distinct(); - return newModIdList; + return newModIdList.ToList(); } public static void WriteModFile(string fileName, string modId, Dictionary metaInformation, List mapNames) diff --git a/src/ArkData/DataContainerBase.cs b/src/ArkData/DataContainerBase.cs index 0588c13c..99525a09 100644 --- a/src/ArkData/DataContainerBase.cs +++ b/src/ArkData/DataContainerBase.cs @@ -45,7 +45,7 @@ namespace ArkData { try { - var online = Enumerable.OfType(new SSQL().Players(new IPEndPoint(IPAddress.Parse(ipString), port))).ToList(); + var online = Enumerable.OfType(new SSQL().Players(new IPEndPoint(IPAddress.Parse(ipString), port))); for (var i = 0; i < Players.Count; i++) { diff --git a/src/ConanServerManager/Lib/ServerApp.cs b/src/ConanServerManager/Lib/ServerApp.cs index 20ed7c28..acfdd0e3 100644 --- a/src/ConanServerManager/Lib/ServerApp.cs +++ b/src/ConanServerManager/Lib/ServerApp.cs @@ -456,8 +456,8 @@ namespace ServerManagerTool.Lib // BH - commented out until Funcom fix the Online player status column in the world save database //var gameFile = GetServerWorldFile(); //var playerCount = DataContainer.GetOnlinePlayerCount(gameFile); - var playerInfo = gameServer?.GetPlayers()?.Where(p => !string.IsNullOrWhiteSpace(p.Name?.Trim())).ToList(); - var playerCount = playerInfo?.Count ?? -1; + var playerInfo = gameServer?.GetPlayers()?.Where(p => !string.IsNullOrWhiteSpace(p.Name?.Trim())); + var playerCount = playerInfo?.Count() ?? -1; // check if anyone is logged into the server if (playerCount <= 0) diff --git a/src/ServerManager.Common/Model/PlayerUserList.cs b/src/ServerManager.Common/Model/PlayerUserList.cs index 19d9e9fa..fadb48b6 100644 --- a/src/ServerManager.Common/Model/PlayerUserList.cs +++ b/src/ServerManager.Common/Model/PlayerUserList.cs @@ -23,7 +23,7 @@ namespace ServerManagerTool.Common.Model } } - public static PlayerUserList GetList(SteamUserDetailResponse response, string[] ids) + public static PlayerUserList GetList(SteamUserDetailResponse response, IEnumerable ids) { var result = new PlayerUserList(); if (ids != null) From 8661bc8e29ea14d85cd102f58633918f6f8cc9f8 Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Thu, 16 Dec 2021 08:50:05 +1000 Subject: [PATCH 7/7] version feed updates --- src/ARKServerManager/VersionFeed.xml | 25 +++++- src/ARKServerManager/VersionFeedBeta.xml | 93 ++-------------------- src/ConanServerManager/VersionFeed.xml | 25 +++++- src/ConanServerManager/VersionFeedBeta.xml | 61 ++------------ 4 files changed, 61 insertions(+), 143 deletions(-) diff --git a/src/ARKServerManager/VersionFeed.xml b/src/ARKServerManager/VersionFeed.xml index f3ae23f4..ae217023 100644 --- a/src/ARKServerManager/VersionFeed.xml +++ b/src/ARKServerManager/VersionFeed.xml @@ -5,7 +5,30 @@ Ark Server Manager Version Feed This is the Ark Server Manager release version feed. - 2021-12-15T00:00:00Z + 2021-12-16T00:00:00Z + + + urn:uuid:3E33DCB2-ECFE-4489-B1A4-56F5D386F9DC + 1.1.413 (1.1.413.1) + 1.1.413.1 + + 2021-12-16T00:00:00Z + +
+

+ CHANGE +
+

    +
  • Made changes to the code to help improve performance.
  • +
+

+
+
+ + bletch + bletch1971@hotmail.com + +
urn:uuid:18276A38-2C71-4BB8-9A83-96D5EBFE9C87 diff --git a/src/ARKServerManager/VersionFeedBeta.xml b/src/ARKServerManager/VersionFeedBeta.xml index b26292e9..6aa7c218 100644 --- a/src/ARKServerManager/VersionFeedBeta.xml +++ b/src/ARKServerManager/VersionFeedBeta.xml @@ -5,102 +5,21 @@ Ark Server Manager Version Feed This is the Ark Server Manager beta version feed. - 2021-12-15T00:00:00Z + 2021-12-16T00:00:00Z - urn:uuid:202642C9-3B71-4B90-8A43-EFA1C5272C81 - 1.1.412 (1.1.412.4) - 1.1.412.4 + urn:uuid:3E33DCB2-ECFE-4489-B1A4-56F5D386F9DC + 1.1.413 (1.1.413.1) + 1.1.413.1 - 2021-12-15T00:00:00Z - -
-

- BUGFIX -
-

    -
  • Fixed a bug when starting the server manager and it tries to download steamcmd, but fails as steamcmd is unavailable for download.
  • -
-

-
-
- - bletch - bletch1971@hotmail.com - -
- - - urn:uuid:B7DE873D-4FC3-4A7B-A531-3146B4D8639A - 1.1.412 (1.1.412.3) - 1.1.412.3 - - 2021-12-15T00:00:00Z - -
-

- BUGFIX -
-

    -
  • Added additional validation when setting directories in the global setting, to ensure they are rooted correctly.
  • -
- CHANGE -
-
    -
  • zh-CN Translation file updated.
  • -
-

-
-
- - bletch - bletch1971@hotmail.com - -
- - - urn:uuid:B2056A54-0063-43A9-8E8E-8AD411FFC377 - 1.1.412 (1.1.412.2) - 1.1.412.2 - - 2021-12-15T00:00:00Z + 2021-12-16T00:00:00Z

CHANGE

    -
  • Added coloring to the setting grids for the Lost Island DLC engrams, creatures and resources.
  • -
-

-
-
- - bletch - bletch1971@hotmail.com - -
- - - urn:uuid:18276A38-2C71-4BB8-9A83-96D5EBFE9C87 - 1.1.412 (1.1.412.1) - 1.1.412.1 - - 2021-12-15T00:00:00Z - -
-

- BUGFIX -
-

    -
  • Fixed a bug with the Server Shutdown when the CheckForOnlinePlayers option not selected.
  • -
  • Fixed a bug when the backup path was a root directory that caused a 'Invalid URI: A Dos path must be rooted' crash.
  • -
- CHANGE -
-
    -
  • fr-FR Translation file updated.
  • -
  • Added LostIsland to official mods in the SurvivalEvolved gamedata file.
  • +
  • Made changes to the code to help improve performance.

diff --git a/src/ConanServerManager/VersionFeed.xml b/src/ConanServerManager/VersionFeed.xml index e2898f59..3ff402f6 100644 --- a/src/ConanServerManager/VersionFeed.xml +++ b/src/ConanServerManager/VersionFeed.xml @@ -5,7 +5,30 @@ Conan Server Manager Version Feed This is the Conan Server Manager release version feed. - 2021-12-15T00:00:00Z + 2021-12-16T00:00:00Z + + + urn:uuid:19B09A66-43F2-4D5F-AF33-5C77D7EA9A6B + 1.1.58 (1.1.58.1) + 1.1.58.1 + + 2021-12-16T00:00:00Z + +
+

+ CHANGE +
+

    +
  • Made changes to the code to help improve performance.
  • +
+

+
+
+ + bletch + bletch1971@hotmail.com + +
urn:uuid:6383E79A-C31F-462B-9730-B26B28DC5EFF diff --git a/src/ConanServerManager/VersionFeedBeta.xml b/src/ConanServerManager/VersionFeedBeta.xml index ddee13a2..37767523 100644 --- a/src/ConanServerManager/VersionFeedBeta.xml +++ b/src/ConanServerManager/VersionFeedBeta.xml @@ -5,68 +5,21 @@ Conan Server Manager Version Feed This is the Conan Server Manager beta version feed. - 2021-12-15T00:00:00Z + 2021-12-16T00:00:00Z - urn:uuid:28487F4A-4D0F-4344-A19E-EBD71D230180 - 1.1.57 (1.1.57.3) - 1.1.57.3 + urn:uuid:19B09A66-43F2-4D5F-AF33-5C77D7EA9A6B + 1.1.58 (1.1.58.1) + 1.1.58.1 - 2021-12-15T00:00:00Z + 2021-12-16T00:00:00Z

- BUGFIX + CHANGE

    -
  • Fixed a bug when starting the server manager and it tries to download steamcmd, but fails as steamcmd is unavailable for download.
  • -
-

-
-
- - bletch - bletch1971@hotmail.com - -
- - - urn:uuid:6383E79A-C31F-462B-9730-B26B28DC5EFF - 1.1.57 (1.1.57.2) - 1.1.57.2 - - 2021-12-15T00:00:00Z - -
-

- BUGFIX -
-

    -
  • Added additional validation when setting directories in the global setting, to ensure they are rooted correctly.
  • -
-

-
-
- - bletch - bletch1971@hotmail.com - -
- - - urn:uuid:6383E79A-C31F-462B-9730-B26B28DC5EFF - 1.1.57 (1.1.57.1) - 1.1.57.1 - - 2021-12-15T00:00:00Z - -
-

- BUGFIX -
-

    -
  • Fixed a bug with the Server Shutdown when the CheckForOnlinePlayers option not selected.
  • -
  • Fixed a bug when the backup path was a root directory that caused a 'Invalid URI: A Dos path must be rooted' crash.
  • +
  • Made changes to the code to help improve performance.