private void PerformApiRequest(AsyncResult result, IChinaAlibabaApi api, object args, Action <Exception, string> callback)
        {
            if (api.NeedAuthroized && (string.IsNullOrWhiteSpace(this.m_refreshToken) || !this.m_refreshTokenExpiredTime.HasValue))
            {
                result.MarkCompleted(new AlibabaException("Unauthorized", 401), true);
                return;
            }

            if (api.NeedAuthroized)
            {
                if (this.CheckTokens((error) => {
                    if (error != null)
                    {
                        result.MarkCompleted(error, false);
                    }
                    else
                    {
                        this.SendApiRequest(api, args, callback);
                    }
                }))
                {
                    this.SendApiRequest(api, args, callback);
                }
            }
            else
            {
                this.SendApiRequest(api, args, callback);
            }
        }
        public IAsyncResult BeginInvokeApi <TReturn>(IChinaAlibabaApi api, IChinaAlibabaApiArguments arguments, AsyncCallback callback, object userState)
        {
            AsyncResult <TReturn> result = new AsyncResult <TReturn>(callback, userState);

            this.PerformApiRequest <TReturn>(result, api, arguments, (error, value) => {
                result.MarkCompleted(error, value);
            });

            return(result);
        }
        public IAsyncResult BeginInvokeApi(IChinaAlibabaApi api, object arguments, AsyncCallback callback, object userState)
        {
            AsyncResult <string> result = new AsyncResult <string>(callback, userState);

            this.PerformApiRequest(result, api, arguments, (error, content) => {
                result.MarkCompleted(error, content);
            });

            return(result);
        }
        private void SendApiRequest(IChinaAlibabaApi api, object args, Action <Exception, string> callback)
        {
            string apiUri = api.GetRequestUri(this.m_appKey);
            IDictionary <string, string> arguments = AlibabaHelper.GetArgumentsDictionary(args);

            if (api.NeedAuthroized)
            {
                arguments[ACCESS_TOKEN_ARGUMENT_NAME] = this.m_accessToken;
            }
            if (api.NeedTimestamp)
            {
                arguments[TIMESTAMP_ARGUMENT_NAME] = (DateTime.Now - this.m_timestampBase).TotalMilliseconds + this.m_timeError.ToString();
            }
            if (api.NeedSignature)
            {
                arguments[SIGNATURE_ARGUMENT_NAME] = AlibabaHelper.GetApiSignature(apiUri, arguments, this.m_appSecret);
            }

            this.SendPostRequest(apiUri, arguments, api.Encoding, callback);
        }
 private void PerformApiRequest <TReturn>(AsyncResult result, IChinaAlibabaApi api, IChinaAlibabaApiArguments args, Action <Exception, TReturn> callback)
 {
     this.PerformApiRequest(result, api, args, (error, content) => {
         this.ProcessReturnValue <TReturn>(error, content, callback);
     });
 }
 private void SendApiRequest <TReturn>(IChinaAlibabaApi api, object args, Action <Exception, TReturn> callback)
 {
     this.SendApiRequest(api, args, (error, content) => {
         this.ProcessReturnValue <TReturn>(error, content, callback);
     });
 }