public Fetch ( |
||
ct | ||
return | Task |
public async Task<ServerDataWrap> Fetch(CancellationToken ct) {
var t = RulesRefreshComplete
.Take(1)
.TakeUntil(Observable.Timer(TimeSpan.FromSeconds(3)).Void()
.Merge(RulesFailedToRespond.Void()).Take(1))
.Select(x => x.ServerData)
.SingleAsync()
.ToTask(ct);
await
_srs.Do(
srs =>
srs.RequestServerRules(
BitConverter.ToInt32(_ep.Address.GetAddressBytes().Reverse().ToArray(), 0), _ep.Port))
.ConfigureAwait(false);
try {
return await t;
} catch (Exception) {
await _srs.Do(src => src.CancelRequest()).ConfigureAwait(false);
throw;
}
}
}
public async Task UpdateRules(CancellationToken ct) { var d = await _fetcher.Fetch(ct).ConfigureAwait(false); Info.ApplyServerDataToServerInfo(d); }