diff --git a/BizHawk.MultiClient/BizHawk.MultiClient.csproj b/BizHawk.MultiClient/BizHawk.MultiClient.csproj index 4c2933dc12..5ea18b556b 100644 --- a/BizHawk.MultiClient/BizHawk.MultiClient.csproj +++ b/BizHawk.MultiClient/BizHawk.MultiClient.csproj @@ -35,6 +35,10 @@ x86 + + False + ..\Newtonsoft.Json.dll + 3.5 diff --git a/BizHawk.MultiClient/Config.cs b/BizHawk.MultiClient/Config.cs index e4c6b1a03d..6a52324aba 100644 --- a/BizHawk.MultiClient/Config.cs +++ b/BizHawk.MultiClient/Config.cs @@ -4,13 +4,13 @@ { public Config() { - SMSController[0] = new SMSControllerTemplate(1, true); - SMSController[1] = new SMSControllerTemplate(2, false); - PCEController[0] = new PCEControllerTemplate(1,true); - PCEController[1] = new PCEControllerTemplate(2,false); - PCEController[2] = new PCEControllerTemplate(3,false); - PCEController[3] = new PCEControllerTemplate(4,false); - PCEController[4] = new PCEControllerTemplate(5,false); + SMSController[0] = new SMSControllerTemplate(true); + SMSController[1] = new SMSControllerTemplate(false); + PCEController[0] = new PCEControllerTemplate(true); + PCEController[1] = new PCEControllerTemplate(false); + PCEController[2] = new PCEControllerTemplate(false); + PCEController[3] = new PCEControllerTemplate(false); + PCEController[4] = new PCEControllerTemplate(false); } // General Client Settings @@ -95,16 +95,12 @@ public string LoadSlot9 = "F9"; - - - - // SMS / GameGear Settings public bool SmsEnableFM = true; public bool SmsAllowOverlock = false; public bool SmsForceStereoSeparation = false; - public string SmsReset = "Reset, Tab"; + public string SmsReset = "Tab"; public string SmsPause = "J1 B10, Space"; public SMSControllerTemplate[] SMSController = new SMSControllerTemplate[2]; @@ -122,7 +118,7 @@ public string GenP1Start = "J1 B10, Return"; //GameBoy Settings - public NESControllerTemplate GameBoyController = new NESControllerTemplate(1); + public NESControllerTemplate GameBoyController = new NESControllerTemplate(); } public class SMSControllerTemplate @@ -133,28 +129,21 @@ public string Right; public string B1; public string B2; - public SMSControllerTemplate(int i, bool defaults) + public SMSControllerTemplate() { } + public SMSControllerTemplate(bool defaults) { - if (!defaults) + if (defaults) { - Up = string.Format("J{0} Up", i); - Down = string.Format("J{0} Down", i); - Left = string.Format("J{0} Left", i); - Right = string.Format("J{0} Right", i); - B1 = string.Format("J{0} B1", i); - B2 = string.Format("J{0} B2", i); - } - else - { - Up = string.Format("J{0} Up, UpArrow", i); - Down = string.Format("J{0} Down, DownArrow", i); - Left = string.Format("J{0} Left, LeftArrow", i); - Right = string.Format("J{0} Right, RightArrow", i); - B1 = string.Format("J{0} B1, Z", i); - B2 = string.Format("J{0} B2, X", i); + Up = "J1 Up, UpArrow"; + Down = "J1 Down, DownArrow"; + Left = "J1 Left, LeftArrow"; + Right = "J1 Right, RightArrow"; + B1 = "J1 B1, Z"; + B2 = "J1 B2, X"; } } } + public class PCEControllerTemplate { public string Up; @@ -165,32 +154,23 @@ public string II; public string Run; public string Select; - public PCEControllerTemplate(int i, bool defaults) + public PCEControllerTemplate() { } + public PCEControllerTemplate(bool defaults) { - if (!defaults) + if (defaults) { - Up = string.Format("J{0} Up", i); - Down = string.Format("J{0} Down", i); - Left = string.Format("J{0} Left", i); - Right = string.Format("J{0} Right", i); - I = string.Format("J{0} I", i); - II = string.Format("J{0} II", i); - Run = string.Format("J{0} Run", i); - Select = string.Format("J{0} Select", i); - } - else - { - Up = string.Format("J{0} Up, UpArrow", i); - Down = string.Format("J{0} Down, DownArrow", i); - Left = string.Format("J{0} Left, LeftArrow", i); - Right = string.Format("J{0} Right, RightArrow", i); - I = string.Format("J{0} I, Z", i); - II = string.Format("J{0} II, X", i); - Run = string.Format("J{0} Run, C", i); - Select = string.Format("J{0} Select, V", i); + Up = "J1 Up, UpArrow"; + Down = "J1 Down, DownArrow"; + Left = "J1 Left, LeftArrow"; + Right = "J1 Right, RightArrow"; + I = "J1 I, Z"; + II = "J1 II, X"; + Run = "J1 Run, C"; + Select = "J1 Select, V"; } } } + public class NESControllerTemplate { public string Up; @@ -201,17 +181,16 @@ public string B; public string Start; public string Select; - public NESControllerTemplate(int i) + public NESControllerTemplate() { - Up = string.Format("J{0} Up", i); - Down = string.Format("J{0} Down", i); - Left = string.Format("J{0} Left", i); - Right = string.Format("J{0} Right", i); - A = string.Format("J{0} A", i); - B = string.Format("J{0} B", i); - Start = string.Format("J{0} Start", i); - Select = string.Format("J{0} Select", i); + Up = "J1 Up"; + Down = "J1 Down"; + Left = "J1 Left"; + Right = "J1 Right"; + A = "J1 B1, Z"; + B = "J1 B2, X"; + Start = "J1 B10, Return"; + Select = "J1 B9, Space"; } } - } \ No newline at end of file diff --git a/BizHawk.MultiClient/ConfigService.cs b/BizHawk.MultiClient/ConfigService.cs index 9743a18b91..75da242672 100644 --- a/BizHawk.MultiClient/ConfigService.cs +++ b/BizHawk.MultiClient/ConfigService.cs @@ -1,13 +1,8 @@ -using System; -using System.IO; +using System.IO; +using Newtonsoft.Json; namespace BizHawk.MultiClient { - public interface IConfigSerializable - { - void Deserialize(string str); - } - public static class ConfigService { public static T Load(string filepath) where T : new() @@ -17,58 +12,12 @@ namespace BizHawk.MultiClient try { var file = new FileInfo(filepath); - var reader = file.OpenText(); - var type = config.GetType(); - - while (reader.EndOfStream == false) + using (var reader = file.OpenText()) { - try - { - string line = reader.ReadLine(); - if (string.IsNullOrEmpty(line)) - continue; - - int seperatorIndex = line.IndexOf(' '); - string name = line.Substring(0, seperatorIndex); - string value = line.Substring(seperatorIndex).Trim(); - - var field = type.GetField(name); - if (field == null) // look at properties instead of fields? or just abort. - continue; - - Type fieldType = field.FieldType; - if (fieldType == typeof(string)) - field.SetValue(config, value); - else if (fieldType == typeof(int)) - field.SetValue(config, int.Parse(value)); - else if (fieldType == typeof(long)) - field.SetValue(config, long.Parse(value)); - else if (fieldType == typeof(byte)) - field.SetValue(config, byte.Parse(value)); - else if (fieldType == typeof(short)) - field.SetValue(config, short.Parse(value)); - else if (fieldType == typeof(float)) - field.SetValue(config, Single.Parse(value)); - else if (fieldType == typeof(double)) - field.SetValue(config, Double.Parse(value)); - else if (fieldType == typeof(bool)) - field.SetValue(config, bool.Parse(value)); - else if (fieldType == typeof(char)) - field.SetValue(config, char.Parse(value)); - else - { - var iface = fieldType.GetInterface("IConfigSerializable"); - if (iface != null) - { - IConfigSerializable i = (IConfigSerializable) Activator.CreateInstance(fieldType); - i.Deserialize(value); - field.SetValue(config, i); - } - } - } - catch { } // If anything fails to parse, just move on / use defaults, don't crash. + var s = new JsonSerializer(); + var r = new JsonReader(reader); + config = (T) s.Deserialize(r, typeof (T)); } - reader.Close(); } catch { } return config; @@ -77,16 +26,12 @@ namespace BizHawk.MultiClient public static void Save(string filepath, object config) { var file = new FileInfo(filepath); - var writer = file.CreateText(); - - var type = config.GetType(); - var fields = type.GetFields(); - - foreach (var field in fields) + using (var writer = file.CreateText()) { - writer.WriteLine("{0} {1}", field.Name, field.GetValue(config)); + var s = new JsonSerializer(); + var w = new JsonWriter(writer) { Formatting = Formatting.Indented }; + s.Serialize(w, config); } - writer.Close(); } } } \ No newline at end of file diff --git a/BizHawk.MultiClient/Input/ControllerBinding.cs b/BizHawk.MultiClient/Input/ControllerBinding.cs index 72f48ff28f..07993dbb0f 100644 --- a/BizHawk.MultiClient/Input/ControllerBinding.cs +++ b/BizHawk.MultiClient/Input/ControllerBinding.cs @@ -33,6 +33,8 @@ namespace BizHawk.MultiClient public void BindMulti(string button, string controlString) { + if (string.IsNullOrEmpty(controlString)) + return; string[] controlbindings = controlString.Split(','); foreach (string control in controlbindings) bindings[button].Add(control.Trim()); diff --git a/BizHawk.MultiClient/RecentFiles.cs b/BizHawk.MultiClient/RecentFiles.cs index d06a3fda86..76f1eee2d7 100644 --- a/BizHawk.MultiClient/RecentFiles.cs +++ b/BizHawk.MultiClient/RecentFiles.cs @@ -3,7 +3,7 @@ using System.Text; namespace BizHawk.MultiClient { - public class RecentFiles : IConfigSerializable + public class RecentFiles { private int MAX_RECENT_FILES; //Maximum number of files private List recentlist; //List of recent files @@ -82,26 +82,5 @@ namespace BizHawk.MultiClient { return recentlist[position]; } - - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append(MAX_RECENT_FILES); - sb.Append("@"); - foreach (string file in recentlist) - sb.AppendFormat("\"{0}\"|", file); - return sb.ToString(); - } - - public void Deserialize(string str) - { - var sections = str.Split('@'); - MAX_RECENT_FILES = int.Parse(sections[0]); - var files = sections[1].Split('|'); - recentlist.Clear(); - foreach (string file in files) - if (string.IsNullOrEmpty(file) == false) - recentlist.Add(file.Replace("\"", "")); - } } } diff --git a/Newtonsoft.Json.dll b/Newtonsoft.Json.dll new file mode 100644 index 0000000000..30bd9d6c9e Binary files /dev/null and b/Newtonsoft.Json.dll differ