using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Diagnostics; using SimpleJson; namespace shadowsocks_csharp { [Serializable] public class Config { public string server; public int server_port; public int local_port; public string password; public string method; public bool isDefault; private static void assert(bool condition) { if(!condition) { throw new Exception("assertion failure"); } } public static Config Load() { try { using (StreamReader sr = new StreamReader(File.OpenRead(@"config.json"))) { Config config = SimpleJson.SimpleJson.DeserializeObject(sr.ReadToEnd()); assert(!string.IsNullOrEmpty(config.server)); assert(!string.IsNullOrEmpty(config.password)); assert(config.local_port > 0); assert(config.server_port > 0); config.isDefault = false; return config; } } catch (Exception e) { Console.WriteLine(e); return new Config { server = "127.0.0.1", server_port = 8388, local_port = 1081, password = "barfoo!", method = "table", isDefault = true }; } } public static void Save(Config config) { try { using (StreamWriter sw = new StreamWriter(File.Open(@"config.json", FileMode.Create))) { string jsonString = SimpleJson.SimpleJson.SerializeObject(new { server = config.server, server_port = config.server_port, local_port = config.local_port, password = config.password, method = config.method }); sw.Write(jsonString); sw.Flush(); } } catch (IOException e) { Console.Error.WriteLine(e); } } } }