Skip to content

Commit

Permalink
Merge pull request #234 from valheimPlus/revert-211-bug/config-sync
Browse files Browse the repository at this point in the history
Revert "Bug Fix + refactor config sync"
  • Loading branch information
nxPublic authored Mar 5, 2021
2 parents 99841d2 + 309be3e commit 07e8b2b
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 77 deletions.
5 changes: 0 additions & 5 deletions ValheimPlus/Configurations/BaseConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,6 @@ public interface IConfig
public abstract class BaseConfig<T> : IConfig where T : IConfig, new()
{

public bool HasNeedsServerSync()
{
return NeedsServerSync;
}

public string ServerSerializeSection()
{
if (!IsEnabled || !NeedsServerSync) return "";
Expand Down
5 changes: 1 addition & 4 deletions ValheimPlus/Configurations/Configuration.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using IniParser.Model;
using ValheimPlus.Configurations.Sections;
using ValheimPlus.Configurations.Sections;

namespace ValheimPlus.Configurations
{
public class Configuration
{
public static Configuration Current { get; set; }

public IniData ConfigData { get; set; }

public AdvancedBuildingModeConfiguration AdvancedBuildingMode { get; set; }
public AdvancedEditingModeConfiguration AdvancedEditingMode { get; set; }
public BeehiveConfiguration Beehive { get; set; }
Expand Down
54 changes: 24 additions & 30 deletions ValheimPlus/Configurations/ConfigurationExtra.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,44 +54,49 @@ public static bool LoadSettings()
return true;
}

public static Configuration LoadFromIni(IniData configdata, bool onlyLoadEnabled = false)
public static Configuration LoadFromIni(string filename)
{
FileIniDataParser parser = new FileIniDataParser();
IniData configdata = parser.ReadFile(filename);

Configuration conf = new Configuration();
conf.ConfigData = configdata;
conf.ConfigData.ClearAllComments();
foreach (var prop in typeof(Configuration).GetProperties())
{
string keyName = prop.Name;
MethodInfo method = prop.PropertyType.GetMethod("LoadIni", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
if (method != null && (!onlyLoadEnabled || (configdata[keyName] != null && configdata[keyName]["enabled"] != null)))

if (method != null)
{
var result = method.Invoke(null, new object[] { configdata, keyName });
prop.SetValue(conf, result, null);
}
}
return conf;
}

public static Configuration LoadFromIni(string filename)
{
FileIniDataParser parser = new FileIniDataParser();
return LoadFromIni(parser.ReadFile(filename));
return conf;
}

public static Configuration LoadFromIni(Stream iniStream)
{
using (StreamReader iniReader = new StreamReader(iniStream))
{
FileIniDataParser parser = new FileIniDataParser();
return LoadFromIni(parser.ReadData(iniReader));
}
}
public static void LoadConfigurationFromStream(Stream iniStream)
{
using (StreamReader iniReader = new StreamReader(iniStream))
{
FileIniDataParser parser = new FileIniDataParser();
LoadFromIni(parser.ReadData(iniReader), true);
IniData configdata = parser.ReadData(iniReader);

Configuration conf = new Configuration();
foreach (var prop in typeof(Configuration).GetProperties())
{
string keyName = prop.Name;
MethodInfo method = prop.PropertyType.GetMethod("LoadIni",
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);

if (method != null)
{
object result = method.Invoke(null, new object[] {configdata, keyName});
prop.SetValue(conf, result, null);
}
}

return conf;
}
}
}
Expand Down Expand Up @@ -123,17 +128,6 @@ public static int GetInt(this KeyDataCollection data, string key, int defaultVal
return defaultVal;
}

public static string GetString(this KeyDataCollection data, string key, string defaultVal)
{
string value = $"{data[key]}";
if (value.Length > 1)
{
return value;
}
Debug.LogWarning($" [String] Could not read {key}, using default value of {defaultVal}");
return defaultVal;
}

public static KeyCode GetKeyCode(this KeyDataCollection data, string key, KeyCode defaultVal)
{
if (Enum.TryParse<KeyCode>(data[key], out var result)) {
Expand Down
48 changes: 10 additions & 38 deletions ValheimPlus/RPC/VPlusConfigSync.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using BepInEx;
using IniParser;
using IniParser.Model;
using ValheimPlus.Configurations;

namespace ValheimPlus.RPC
Expand All @@ -17,44 +14,19 @@ public static void RPC_VPlusConfigSync(long sender, ZPackage configPkg)
if (!Configuration.Current.Server.serverSyncsConfig) return;

ZPackage pkg = new ZPackage();
List<string> cleanConfigData = new List<string>();

IniData configdata = Configuration.Current.ConfigData;

string[] rawConfigData = File.ReadAllLines(ConfigurationExtra.ConfigIniPath);
List<string> cleanConfigData = new List<string>();

foreach (var prop in typeof(Configuration).GetProperties())
for (int i = 0; i < rawConfigData.Length; i++)
{
var keyName = prop.Name;
var method = prop.PropertyType.GetMethod("HasNeedsServerSync", BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance);
if (rawConfigData[i].Trim().StartsWith(";") ||
rawConfigData[i].Trim().StartsWith("#")) continue; //Skip comments

if (method != null)
{
var instance = prop.GetValue(Configuration.Current, null);
bool HasNeedsServerSync = (bool)method.Invoke(instance, new object[] { });
if (HasNeedsServerSync)
{
cleanConfigData.Add($"[{keyName}]");
bool hasEnableProperty = false;
if (configdata[keyName] != null)
{
configdata[keyName].ClearComments();
IEnumerator<KeyData> iterator = configdata[keyName].GetEnumerator();
while (iterator.MoveNext())
{
KeyData keyData = iterator.Current;
if (keyData.KeyName.Equals("enabled"))
{
hasEnableProperty = true;
}
cleanConfigData.Add($"{keyData.KeyName}={keyData.Value}");
}
}
if (!hasEnableProperty)
{
cleanConfigData.Add("enabled = false");
}
}
}
if (rawConfigData[i].Trim().IsNullOrWhiteSpace()) continue; //Skip blank lines

//Add to clean data
cleanConfigData.Add(rawConfigData[i]);
}

//Add number of clean lines to package
Expand Down Expand Up @@ -105,7 +77,7 @@ public static void RPC_VPlusConfigSync(long sender, ZPackage configPkg)
tmpWriter.Flush(); //Flush to memStream
memStream.Position = 0; //Rewind stream

ConfigurationExtra.LoadConfigurationFromStream(memStream);
Configuration.Current = ConfigurationExtra.LoadFromIni(memStream);

// Needed to make sure client is using server configuration as dayLength is setup before
// TimeManipulation.SetupDayLength(); DEACTIVATED
Expand Down

0 comments on commit 07e8b2b

Please sign in to comment.