public void DebugAdd(String user, String text, DataLoadedCallback callback) { if (String.IsNullOrEmpty(text)) return; var urlString = string.Format("{0}?user={1}&debugtext={2}&ranval={3}", ApiUrl, user, text, Environment.TickCount); var webRequest = new WebClient(); webRequest.DownloadStringCompleted += WebRequestDownloadStringCompleted; var guid = Guid.NewGuid(); _callback.Add(guid, callback); webRequest.DownloadStringAsync(new Uri(urlString), guid); }
/// <summary> /// Overriding classes call this method to initiate a request. /// </summary> /// <param name="url">Caller URL</param> /// <param name="parameters">Caller parameters</param> /// <param name="callback">Returns on response</param> /// <param name="userObject">UserState, if needed</param> protected void CallApi(String url, IDictionary<string, string> parameters, DataLoadedCallback callback, object userObject = null) { Guid guid; Utils.NotNullArgument(callback, "callback", @"Callback for an ApiOperation MUST EXIST!"); switch (ApiRequestType) { case RequestType.Get: guid = WebRequestDispatcher.InitiateGet(url, OnOperationCompleted, parameters, userObject); break; case RequestType.Post: guid = WebRequestDispatcher.InitiatePost(url, OnOperationCompleted, parameters, userObject); break; default: throw new ArgumentOutOfRangeException(); } lock (this) { _concurrentRequests.Add(guid, callback); } }
/// <summary> /// Cancel a request by callback /// </summary> /// <param name="callback">Target callbacks </param> public void CancelRequest(DataLoadedCallback callback) { var cancellable = _concurrentRequests.Where(kvp => kvp.Value == callback).ToList(); foreach (var keyValuePair in cancellable) { Utils.ConcurrentWebService.CancelRequest(keyValuePair.Key); _concurrentRequests.Remove(keyValuePair); } }