コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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();
            };
        }