public ServiceCallTask(ECollegeClient client, ECollegeResponseCache cache, T service) { this._cache = cache; this._client = client; this._service = service; }
public void ExecuteService <T>(T service, Action <T> successCallback, Action <ServiceException> failureCallback, Action <T> finallyCallback, ECollegeResponseCache cache, TimeSpan?expiration, bool rerunAfterCacheHit, bool readFromCache, bool writeToCache) where T : BaseService { DoBackgroundWork(() => { try { Action <string> cacheCallback = null; if (cache != null && service.IsCacheable) { var cacheKey = service.GetCacheKey(); if (readFromCache) { var cacheEntry = cache.Get(service.CacheScope, cacheKey, expiration); if (cacheEntry != null) { HandleResponseContent(cacheEntry.Data, service, failureCallback, finallyCallback, successCallback, null); if (!rerunAfterCacheHit) { return; } } } if (writeToCache) { cacheCallback = (responseContent) => cache.Put(service.CacheScope, cacheKey, responseContent); } } var client = new RestClient(RootUri); client.FollowRedirects = true; client.MaxRedirects = 10; client.EnsureCallbacksOnUI = false; if (AuthenticateIfRequired(service, failureCallback, finallyCallback, successCallback)) { return; } if (_authenticator != null) { client.Authenticator = _authenticator; } var request = new RestRequest(service.Resource, service.RequestMethod); service.PrepareRequest(request); #if DEBUG Debug.WriteLine("Request: " + request.Method + " - " + RootUri + request.Resource + " - " + PrettyPrint(request.Parameters)); #endif client.ExecuteAsync(request, (response) => { HandleResponse(response, service, failureCallback, finallyCallback, successCallback, cacheCallback); }); } catch (Exception e) { HandleFailure(service, new ClientErrorException(service, e), failureCallback, finallyCallback); } }); }