Exemplo n.º 1
0
 /// <summary>
 /// The async implementation of <see cref="Authorize"/>
 /// </summary>
 public static void AuthorizeAsync(AsyncCallback<string> callback, string requestToken, string userName, string password)
 {
     ValidateArgument(requestToken, "requestToken");
     ValidateArgument(userName, "userName");
     ValidateArgument(password, "password");
     var logonAndAuthorizeTemplate = "action=submit&regCallback=http%253A%252F%252Fapi.t.sina.com.cn%252Foauth%252Fauthorize%253Foauth_token%253D{0}%2526oauth_callback%253Doob%2526from%253D%2526with_cookie%253D&oauth_token={0}&oauth_callback=oob&from=&forcelogin=&userId={1}&passwd={2}";
     var postData = string.Format(logonAndAuthorizeTemplate, requestToken, RFC3986Encoder.Encode(userName), RFC3986Encoder.Encode(password));
     var requester = new HttpPost(APIUri.Authorize, postData);
     requester.RequestAsync(delegate(AsyncCallResult<string> result)
     {
         var asyncResult = new AsyncCallResult<string>();
         asyncResult.Success = result.Success;
         asyncResult.Exception = result.Exception;
         if (result.Success)
         {
             var match = Regex.Match(result.Data, Constants.RetrieveAuthorizationCodePattern, RegexOptions.CultureInvariant);
             if (match.Success)
                 asyncResult.Data = match.Groups[1].Value;
             else
                 throw new AMicroblogException(LocalErrorCode.CredentialInvalid, "Invalid user name or password.");
         }
         else
             callback(asyncResult);
     });
 }
Exemplo n.º 2
0
        private Transaction HandleResult(AsyncCallResult <XDocument> result, bool wasTest)
        {
            if (result.Failed())
            {
                log.Error("Spreedly transaction failed.");
                if (null != result && null != result.Contents)
                {
                    log.Error(result.Contents.ToString());
                }

                return(null);
            }
            else
            {
                if (null != result && null != result.Contents)
                {
                    log.Debug(result.Contents.ToString());
                }
            }

            if (result.Contents == null)
            {
                return(new Transaction(wasTest, new TransactionErrors("", TransactionErrorType.CallFailed)));
            }

            return(Transaction.FromXml(result.Contents));
        }
Exemplo n.º 3
0
 public static T FirstOrNull <T>(this AsyncCallResult <GetListResponse <T> > result_)
     where T : ParseObject
 {
     if (result_.HasResults())
     {
         return(result_.Contents[0]);
     }
     return(null);
 }
Exemplo n.º 4
0
 /// <summary>
 /// 处理接收数据完成
 /// </summary>
 void CallEndResult()
 {
     byte[] result = CopyBuffer(true);
     if (result != null && result.Length > 0)
     {
         if (SerialPortResult != null)
         {
             //异步通知接收完成
             AsyncCallResult call = new AsyncCallResult(CalResult);
             call.BeginInvoke(result, null, null);
         }
     }
 }
Exemplo n.º 5
0
 /// <summary>
 /// 结束接收
 /// </summary>
 void EndReceive(byte[] bs)
 {
     //设置最后接收时间
     m_lastReceiveTime = DateTime.Now;
     m_isReceiving     = false;
     if (OnSerialPortReceived != null &&
         bs != null &&
         bs.Length != 0)
     {
         AsyncCallResult call = new AsyncCallResult(CalReceived);
         call.BeginInvoke(bs, null, null);
     }
 }
Exemplo n.º 6
0
 //处理接手数据完成
 void CallEndResult()
 {
     byte[] result = CopyBuffer(true);
     if (result != null && result.Length > 0)
     {
         if (SerialPortResult != null)
         {
             //异步通知接收完成
             AsyncCallResult call = new AsyncCallResult(CalResult);
             call.BeginInvoke(result, null, null);
         }
     }
     result = null;
     //GC.Collect();
     //GC.WaitForPendingFinalizers();
 }
Exemplo n.º 7
0
        /// <summary>
        /// Performs the async request.
        /// </summary>
        /// <param name="state"></param>
        private void DoRequest(object state)
        {
            var callback = state as AsyncCallback <string>;
            AsyncCallResult <string> reqResult = new AsyncCallResult <string>();

            try
            {
                reqResult.Data    = Request();
                reqResult.Success = true;
            }
            catch (Exception ex)
            {
                reqResult.Success   = false;
                reqResult.Exception = ex;
            }
            finally
            {
                callback(reqResult);
            }
        }
Exemplo n.º 8
0
 public static bool Failed <T>(this AsyncCallResult <T> result) where T : class
 {
     return(result == null || result.FailureReason != AsyncCallFailureReason.None);
 }
Exemplo n.º 9
0
        /// <summary>
        /// Performs the async request.
        /// </summary>
        /// <param name="state"></param>
        private void DoRequest(object state)
        {
            var callback = state as AsyncCallback<string>;
            AsyncCallResult<string> reqResult = new AsyncCallResult<string>();

            try
            {
                reqResult.Data = Request();
                reqResult.Success = true;
            }
            catch (Exception ex)
            {
                reqResult.Success = false;
                reqResult.Exception = ex;
            }
            finally
            {
                callback(reqResult);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// The async implementation of <see cref="Login"/>
        /// </summary>
        public static void LoginAsync(AsyncCallback<OAuthAccessToken> callback, string userName, string password)
        {
            Thread thread = new Thread(delegate()
                {
                    var result = new AsyncCallResult<OAuthAccessToken>();
                    try
                    {
                        var token = AMicroblog.Login(userName, password);
                        result.Success = true;
                        result.Data = token;
                    }
                    catch (Exception ex)
                    {
                        result.Success = false;
                        result.Exception = ex;
                    }
                    finally
                    {
                        callback(result);
                    }
                });

            thread.Name = "Login";
            thread.Start();
        }
Exemplo n.º 11
0
        /// <summary>
        /// The async implementation of <see cref="GetRequestToken"/>
        /// </summary>
        public static void GetRequestTokenAsync(AsyncCallback<OAuthRequestToken> callback)
        {
            var requester = new TokenObtainRequest(APIUri.RequestToken);

            requester.RequestAsync(delegate(AsyncCallResult<string> result)
            {
                var asyncResult = new AsyncCallResult<OAuthRequestToken>();
                asyncResult.Success = result.Success;
                asyncResult.Exception = result.Exception;
                if (result.Success)
                {
                    // Processes response.
                    var match = Regex.Match(result.Data, Constants.RetrieveRequestTokenPattern, RegexOptions.IgnoreCase);
                    if (!match.Success)
                        throw new AMicroblogException(LocalErrorCode.UnknowError, "Failed to retrieve request token from the web response.");

                    var requestToken = match.Groups[1].Value;
                    var requestTokenSecret = match.Groups[2].Value;

                    asyncResult.Data = new OAuthRequestToken() { Token = match.Groups[1].Value, Secret = match.Groups[2].Value };
                }
                else
                    callback(asyncResult);
            });
        }
Exemplo n.º 12
0
        /// <summary>
        /// The async implementation of <see cref="GetAccessToken"/>
        /// </summary>
        public static void GetAccessTokenAsync(AsyncCallback<OAuthAccessToken> callback, OAuthRequestToken requestToken, string verifier)
        {
            ValidateArgument(requestToken, "requestToken");
            ValidateArgument(requestToken.Token, "requestToken.Token");
            ValidateArgument(requestToken.Secret, "requestToken.Secret");
            ValidateArgument(verifier, "verifier");
            // If the required auth header item is not given (for example: an incorrect name is used.), server will not response.
            var requester = new TokenObtainRequest(APIUri.AccessToken);
            requester.Params.Add(new ParamPair(Constants.OAuthToken, requestToken.Token));
            requester.Params.Add(new ParamPair(Constants.OAuthVerifier, verifier));
            requester.Secret = requestToken.Secret;
            requester.RequestAsync(delegate(AsyncCallResult<string> result)
            {
                var asyncResult = new AsyncCallResult<OAuthAccessToken>();
                asyncResult.Success = result.Success;
                asyncResult.Exception = result.Exception;
                if (result.Success)
                {
                    var accessTokenMatch = Regex.Match(result.Data, Constants.RetrieveAccessTokenPattern, RegexOptions.IgnoreCase);
                    if (!accessTokenMatch.Success)
                        throw new AMicroblogException(LocalErrorCode.UnknowError, "Failed to retrieve access token.");

                    var accessToken = accessTokenMatch.Groups[1].Value;
                    var accessTokenSecret = accessTokenMatch.Groups[2].Value;
                    var userID = accessTokenMatch.Groups[4].Value;

                    asyncResult.Data = new OAuthAccessToken() { Token = accessToken, Secret = accessTokenSecret, UserID = userID };
                }
                else
                    callback(asyncResult);
            });
        }
Exemplo n.º 13
0
        private Transaction HandleResult(AsyncCallResult<XDocument> result, bool wasTest)
        {
            if (result.Failed())
            {
                log.Error("Spreedly transaction failed.");
                if (null != result && null != result.Contents)
                    log.Error(result.Contents.ToString());

                return null;
            }
            else
            {
                if (null != result && null != result.Contents)
                    log.Debug(result.Contents.ToString());
            }

            if (result.Contents == null)
            {
                return new Transaction(wasTest, new TransactionErrors("", TransactionErrorType.CallFailed));
            }

            return Transaction.FromXml(result.Contents);
        }
Exemplo n.º 14
0
 public static bool HasResults <T>(this AsyncCallResult <GetListResponse <T> > result_)
     where T : ParseObject
 {
     return(result_.Failed() == false && result_.Contents.Count > 0);
 }
Exemplo n.º 15
0
 public static bool IsEmpty <T>(this AsyncCallResult <GetListResponse <T> > result_)
     where T : ParseObject
 {
     return(result_.Failed() || result_.Contents.Count == 0);
 }