コード例 #1
0
        /// <summary>
        /// Logs out user asynchronously from the TD Ameritrade web service.
        /// </summary>
        /// <returns>The <see cref="T:Response"/>.</returns>
        public Task<Response> LogOutAsync()
        {
            var url = this.Config.ServiceUrl + "LogOut?source=" + Uri.EscapeDataString(this.App.Key);

            return GetXmlAsync(url)
                .ContinueWith(task =>
                {
                    var xml = task.Result.Root;

                    if (xml.Element("result").Value == "LoggedOut")
                    {
                        this.User = new User();
                        return new Response();
                    }

                    return new Response(new ResponseError(xml.Element("error").Value));
                });
        }
コード例 #2
0
        /// <summary>
        /// Logs in user asynchronously to the TD Ameritrade web service.
        /// </summary>
        /// <param name="userid">The user's ID.</param>
        /// <param name="password">The user's password.</param>
        /// <returns>true if user logged in successfully; false if not</returns>
        public Task<Response<bool>> LogInAsync(string userid, string password)
        {
            var url = this.Config.ServiceUrl + "LogIn?source=" + Uri.EscapeDataString(this.App.Key) + "&version=" + Uri.EscapeDataString(this.App.Version);
            var data = new { userid = userid, password = password, source = this.App.Key, version = this.App.Version };

            return GetXmlAsync(url, data)
                .ContinueWith(task =>
            {
                var xml = task.Result.Root;

                if (xml.Element("result").Value == "OK")
                {
                    var user = xml.Element("xml-log-in");
                    this.sessionID = user.Element("session-id").Value;
                    this.timeout = user.Element("timeout").ToTimeSpan();
                    this.User = new User
                    {
                        IsAuthenticated = true,
                        UserName = user.Element("user-id").Value,
                        LastLoginDate = user.Element("login-time").ToDate(),
                        Status = user.Element("exchange-status").ToExchangeStatus(),
                    };

                    this.User.Realtime.NYSE = user.Element("nyse-quotes").IsRealtime();
                    this.User.Realtime.NASDAQ = user.Element("nasdaq-quotes").IsRealtime();
                    this.User.Realtime.OPRA = user.Element("opra-quotes").IsRealtime();
                    this.User.Realtime.AMEX = user.Element("amex-quotes").IsRealtime();
                    this.User.Authorizations.Options360 = user.Element("authorizations").Element("options360").ToBoolean();

                    this.User.Accounts = new ReadOnlyCollection<Account>(
                        user.Element("accounts").Elements("account").Select(x =>
                            {
                                var pref = x.Element("preferences");
                                var auth = x.Element("authorizations");

                                var account = new Account
                                {
                                    ID = x.Element("account-id").Value,
                                    DisplayName = x.Element("display-name").Value,
                                    Description = x.Element("description").Value,
                                    IsAssociatedAccount = x.Element("associated-account").ToBoolean(),
                                    Company = x.Element("company").Value,
                                    Segment = x.Element("segment").Value,
                                    IsUnified = x.Element("unified").ToBoolean(),
                                    Preferences = new AccountPreferences
                                    {
                                        IsExpressTrading = pref.Element("express-trading").ToBoolean(),
                                        IsOptionDirectRouting = pref.Element("option-direct-routing").ToBoolean(),
                                        IsStockDirectRouting = pref.Element("stock-direct-routing").ToBoolean(),
                                    },
                                    Authorizations = new AccountAuthorizations
                                    {
                                        Apex = auth.Element("apex").ToBoolean(),
                                        Level2 = auth.Element("level2").ToBoolean(),
                                        StockTrading = auth.Element("stock-trading").ToBoolean(),
                                        MarginTrading = auth.Element("margin-trading").ToBoolean(),
                                        StreamingNews = auth.Element("streaming-news").ToBoolean(),
                                        OptionTrading = auth.Element("option-trading").ToOptionTradingType(),
                                        Streamer = auth.Element("streamer").ToBoolean(),
                                        AdvancedMargin = auth.Element("advanced-margin").ToBoolean(),
                                    }
                                };

                                return account;
                            }
                        ).ToList()
                    );

                    this.User.Account = this.User.Accounts.FirstOrDefault(x => x.ID == user.Element("associated-account-id").Value);

                    return new Response<bool>(true);
                }

                this.User = new User();
                return new Response<bool>(false, new ResponseError(xml.Element("error").Value));
            });
        }