2017-09-28 190 views
0

我不太清楚如何修改this approach以生成動態計時器觀察值。無效:使用observables刷新AccessToken

較具體來說,我有兩種方法:

  1. GetAccessToken()
  2. RefreshAccessToken()

兩個返回OAuth2AccessTokenResponse

public class OAuth2AccessTokenResponse 
{ 
    private string tokenType; 
    private string accessToken; 
    private int expiresIn; 
    private string refreshToken; 
    private int refreshtokenExpiresIn; 
} 

所以,我需要刷新當前的accessToken之前expiresIn以秒爲單位的屬性值。

我試圖讓我的做法,但我已經無法用意識得到任何東西:

this.accessTokenObservable = Observable 
    .Generate(
     this.GetAccessToken(), 
     resp => true, //????? 
     resp => resp, //????? 
     resp => resp, //????? 
     resp => TimeSpan.FromSeconds(this.RefreshAccessToken().ExpiresIn) //????? 
    ); 

Sequencially:

  1. response = this.GetAccessToken()
  2. response.ExpiresIn到期之前 - >response = this.RefreshAccessToken()
  3. 轉至2.

GetAccessTokenRefreshAccessToken代碼:

internal OAuth2AccessTokenResponse GetAccessToken() 
{ 
    return new OAuth2AccessTokenResponse() {ExpiresIn = new Math.Random().Next(3,11)}; 
} 

internal OAuth2AccessTokenResponse RefreshAccessToken() 
{ 
    return new OAuth2AccessTokenResponse() {ExpiresIn = new Math.Random().Next(3,11)}; 
} 
+0

你能提供[mcve]嗎?我需要能夠編寫適用於'GetAccessToken'和'RefreshAccessToken'的代碼,所以我需要所有類型。 – Enigmativity

+0

你的意思是說你有'GetAccessToken'和'RefreshAccessToken'代碼對嗎? – Jordi

+0

我的意思是我需要能夠複製,粘貼,然後編譯您的代碼,以便我可以使用它。現在,當我複製你發佈的內容時,我會遇到一些錯誤。 IRestClient,RestSharp,this.settings,IRestRequest,AccessTokenRequest,IRestResponse,RefreshTokenRequest和this.CheckResponse都是未定義的。您應該讓我們輕鬆回答您的問題。 [mcve]意味着我會編譯代碼。 – Enigmativity

回答

1

固定幾個編譯錯誤之後,這似乎爲我工作:

void Main() 
{ 
    var accessTokenObservable = Observable 
     .Generate(
      this.GetAccessToken(), 
      atr => true, 
      atr => this.RefreshAccessToken(), 
      atr => atr, 
      atr => TimeSpan.FromSeconds(atr.ExpiresIn) 
     ); 

    accessTokenObservable.Subscribe(x => Console.WriteLine(x.ExpiresIn)); 
} 

internal OAuth2AccessTokenResponse GetAccessToken() 
{ 
    Console.WriteLine("!"); 
    return new OAuth2AccessTokenResponse() { ExpiresIn = rnd.Next(3, 11) }; 
} 

internal OAuth2AccessTokenResponse RefreshAccessToken() 
{ 
    Console.WriteLine("+"); 
    return new OAuth2AccessTokenResponse() { ExpiresIn = rnd.Next(3, 11) }; 
} 

private Random rnd = new Random(); 

public class OAuth2AccessTokenResponse 
{ 
    private string tokenType; 
    private string accessToken; 
    private int expiresIn; 
    private string refreshToken; 
    private int refreshtokenExpiresIn; 

    public int ExpiresIn; 
} 

我得到這樣一個結果:

 
! 
10 
+ 
10 
+ 
3 
+ 
9 
+ 
相關問題