private static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Title += Program_Title; Status += Program_Status; Output += Program_Output; _clientEx.Output += OnOutput; _clientEx.Title += OnTitle; _clientEx.Status += OnStatus; var p = new OptionSet { { "localonly", v => { _settings.LocalOnly = v != null; } }, { "settings=", v => { _settings = XmlSerialize.Deserialize<CupCakeServerSettings>(v); } }, { "debug", v => { _settings.Debug = v != null; } }, { "standalone", v => { _settings.Standalone = v != null; } }, { "autoconnect", v => { _settings.Autoconnect = v != null; } }, { "envpath=", v => { Environment.CurrentDirectory = v; } }, { "port=", (int v) => { _settings.Port = v; } }, { "pin=", v => { _settings.Pin = v; } }, { "e|email=", v => { _settings.Email = v; } }, { "p|pass|password="******"w|world=", v => { _settings.World = v; } }, { "d|dir=", _settings.Dirs.Add }, { "db|dbtype=", v => { _settings.DatabaseType = (DatabaseType)Enum.Parse(typeof(DatabaseType), v); } }, { "cs|connectionstring|connectionstr|connstr=", v => { _settings.ConnectionString = v; } } }; try { p.Parse(args); } catch (OptionException e) { Console.Write("CupCake.Server: "); Console.WriteLine(e.Message); return; } StartServer(); while (true) { var input = Console.ReadLine(); if (_clientEx != null) _clientEx.Input(input); } }
private static void OnConnection(ClientHandle h) { bool authenticated = false; if (String.IsNullOrEmpty(_settings.Pin)) { authenticated = true; SendBuffer(h); } Output += s => { if (!authenticated) return; h.DoSendOutput(s); }; Title += s => { if (!authenticated) return; h.DoSendTitle(s); }; Status += s => { if (!authenticated) return; h.DoSendStatus(s); }; h.ReceiveAuthentication += authentication => { if (_settings.Pin == authentication.Pin || authenticated) { authenticated = true; SendBuffer(h); } else { h.DoSendWrongAuth(); h.DoSendClose(); } }; h.ReceiveInput += input => { if (!authenticated) return; _clientEx.Input(input.Text); }; h.ReceiveSetData += data => { if (!authenticated) return; if (data.Settings != null) _settings = XmlSerialize.Deserialize<CupCakeServerSettings>(data.Settings); if (_settings.Email == null) _settings.Email = data.Email; if (_settings.Password == null) _settings.Password = data.Password; if (_settings.World == null) _settings.World = data.World; if (_settings.ConnectionString == null) _settings.DatabaseType = data.DatabaseType; if (_settings.ConnectionString == null) _settings.ConnectionString = data.ConnectionString; if (data.Directories != null) _settings.Dirs.InsertRange(0, data.Directories); Start(); }; }