示例#1
0
        public IObservable <Unit> Login(string username, string password)
        {
            var credentials = Observable.Return(new Credentials(username, password));
            var dbCheck     = credentials.SelectMany(cred =>
            {
                if (String.IsNullOrEmpty(cred.Username) || String.IsNullOrEmpty(cred.Password))
                {
                    return(Observable.Throw <User>(new ArgumentException(FileLanguage.Error_EmptyUsernameOrPassword)));
                }

                foreach (var user in from u in UserDatabase.Users where u.Username == cred.Username select u)
                {
                    if (user.Password == cred.Password)
                    {
                        return(Observable.Return <User>(user));
                    }
                    else
                    {
                        return(Observable.Throw <User>(new ArgumentException(FileLanguage.BAD_LOGIN)));
                    }
                }

                return(Transport.CheckUser(cred.Username, cred.Password)
                       .ObserveOnDispatcher()
                       .Select(_ => CreateUser(username, password)));
            });

            return(dbCheck.ObserveOnDispatcher()
                   .Do(user =>
            {
                LoggedUser = user;
                App.Engine.StatisticsManager.LogUserLogin(_loggedUser);
            })
                   .Select(_ => new Unit()));
        }