/// <summary> /// Obtengo datos del servidor. /// </summary> /// <param name="session">Session.</param> /// <param name="dataTask">Data task.</param> /// <param name="data">Data.</param> public override void DidReceiveData(NSUrlSession session, NSUrlSessionDataTask dataTask, NSData data) { if (data != null) { responseBuilder.Append(data.ToString()); } }
public async void SetupCell(MovieViewModel Movie) { Data?.Cancel(); Data = null; if (!Created) { CreateComponents(); } ImageView.Image = null; TitleLabel.Text = Movie.Title; Genres.Text = Movie.Genres; ReleaseDate.Text = Movie.ReleaseDate; var Request = NSUrlSession.SharedSession.CreateDataTaskAsync(new NSUrl(Movie.Poster), out Data); Data.Resume(); try { var Response = await Request; if (Response != null && Response.Data != null) { var Image = new UIImage(Response.Data); DispatchQueue.MainQueue.DispatchAsync(() => { ImageView.Image = Image; CurrentImage = Image; }); } } catch (Exception) { } }
private void DemoNativeFlowWithProduct(Product product) { if (checkoutCreationTask != null && checkoutCreationTask.State == NSUrlSessionTaskState.Running) { checkoutCreationTask.Cancel(); } var cart = new Cart(); cart.AddVariant(product.Variants [0]); var checkout = new Checkout(cart); // Apply billing and shipping address, as well as email to the checkout checkout.ShippingAddress = Address; checkout.BillingAddress = Address; checkout.Email = "*****@*****.**"; client.UrlScheme = "xamarinsample://"; UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true; checkoutCreationTask = client.CreateCheckout(checkout, (chkout, error) => { UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; if (error == null && chkout != null) { var shippingController = new ShippingRatesTableViewController(client, chkout); NavigationController.PushViewController(shippingController, true); } else { Console.WriteLine("Error creating checkout: {0}", error); } }); }
public override void DidReceiveData(NSUrlSession session, NSUrlSessionDataTask dataTask, NSData data) { var inflight = GetInflightData(dataTask); inflight.Stream.Add(data); SetResponse(inflight); }
public override void Start() { Debug.WriteLine("Ping operation started"); WillChangeValue("IsExecuting"); isExecuting = true; DidChangeValue("IsExecuting"); if (IsCancelled) { Finish(false); return; } Debug.WriteLine("UrlSession request created"); var request = CreatePingRequest(); dataTask = session.CreateDataTask(request, new NSUrlSessionResponse((data, response, error) => { if (error != null) { Debug.WriteLine($"Error: {error.DebugDescription}"); Finish(false); } Debug.WriteLine("UrlSession request completed"); Finish(true); })); }
public void NSUrlSessionDataTaskTest() { TestRuntime.AssertXcodeVersion(6, 0); using (var ur = new NSUrlRequest()) { NSUrlSessionDataTask task = null; Assert.DoesNotThrow(() => task = NSUrlSession.SharedSession.CreateDataTask(ur), "Should not throw InvalidCastException"); Assert.IsNotNull(task, "task should not be null"); Assert.IsInstanceOfType(typeof(NSUrlSessionDataTask), task, "task should be an instance of NSUrlSessionDataTask"); } using (var ur = new NSUrlRequest()) { NSUrlSessionDataTask task = null; Assert.DoesNotThrow(() => task = NSUrlSession.SharedSession.CreateDataTask(ur, null), "Should not throw InvalidCastException 2"); Assert.IsNotNull(task, "task should not be null 2"); Assert.IsInstanceOfType(typeof(NSUrlSessionDataTask), task, "task should be an instance of NSUrlSessionDataTask 2"); } using (var ur = new NSUrl(NetworkResources.MicrosoftUrl)) { NSUrlSessionDataTask task = null; Assert.DoesNotThrow(() => task = NSUrlSession.SharedSession.CreateDataTask(ur), "Should not throw InvalidCastException 3"); Assert.IsNotNull(task, "task should not be null 3"); Assert.IsInstanceOfType(typeof(NSUrlSessionDataTask), task, "task should be an instance of NSUrlSessionDataTask 3"); } using (var ur = new NSUrl(NetworkResources.MicrosoftUrl)) { NSUrlSessionDataTask task = null; Assert.DoesNotThrow(() => task = NSUrlSession.SharedSession.CreateDataTask(ur, null), "Should not throw InvalidCastException 4"); Assert.IsNotNull(task, "task should not be null 4"); Assert.IsInstanceOfType(typeof(NSUrlSessionDataTask), task, "task should be an instance of NSUrlSessionDataTask 4"); } }
private void PollForShippingRatesAsync() { BUYStatus shippingStatus = BUYStatus.Unknown; task = client.GetShippingRatesForCheckout(Checkout, async(shippingRates, status, error) => { shippingStatus = status; if (error != null) { WillChangeValue("isFinished"); done = true; DidChangeValue("isFinished"); FailedToReceiveShippingRates?.Invoke(this, error); } else if (shippingStatus == BUYStatus.Complete) { ShippingRates = shippingRates; WillChangeValue("isFinished"); done = true; DidChangeValue("isFinished"); DidReceiveShippingRates(this, ShippingRates); } else if (shippingStatus == BUYStatus.Processing) { await Task.Delay(500); PollForShippingRatesAsync(); } }); }
private void PollForCompletionStatusAsync() { if (IsCancelled) { return; } task = client.GetCompletionStatusOfCheckout(Checkout, async(status, error) => { if (status == BUYStatus.Processing) { await Task.Delay(500); PollForCompletionStatusAsync(); } else { CompletionStatus = status; WillChangeValue("isFinished"); done = true; DidChangeValue("isFinished"); if (error != null) { FailedToReceiveCompletionStatus?.Invoke(this, error); } else { DidReceiveCompletionStatus?.Invoke(this, status); } } }); }
public void Search(string searchText, EventHandler handler) { NSUrl url = GetUrl(searchText); NSUrlSessionDataTask dataTask = session.CreateDataTask(url, (data, response, error) => { NSError er; NSDictionary dict = (NSDictionary)NSJsonSerialization.Deserialize(data, NSJsonReadingOptions.AllowFragments, out er); string status = dict["stat"].ToString(); Console.WriteLine("stat = " + dict["stat"]); NSArray arr = (NSArray)((NSDictionary)dict["photos"])["photo"]; List <FlickrPhoto> photosList = new List <FlickrPhoto>(); for (nuint i = 0; i < arr.Count; i++) { //Console.WriteLine(arr.GetItem<NSDictionary>(i)); NSDictionary elemt = arr.GetItem <NSDictionary>(i); FlickrPhoto photo = new FlickrPhoto(elemt["id"].ToString(), elemt["farm"].ToString(), elemt["server"].ToString(), elemt["secret"].ToString(), elemt["title"].ToString()); photosList.Add(photo); } //Console.WriteLine("photos = " + ((NSDictionary)dict["photos"])["photo"]); var arg = new PhotosDounloadEventArg(); arg.PhotosList = photosList; //FinishHandler(this, arg); handler(this, arg); Console.WriteLine("dict = " + dict); Console.WriteLine("data = " + data); Console.WriteLine("error = " + error); }); dataTask.Resume(); }
public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action <NSUrlSessionResponseDisposition> completionHandler) { var data = getResponseForTask(dataTask); try { if (data.CancellationToken.IsCancellationRequested) { dataTask.Cancel(); } var resp = (NSHttpUrlResponse)response; var req = data.Request; var content = new CancellableStreamContent(data.ResponseBody, () => { if (!data.IsCompleted) { dataTask.Cancel(); } data.IsCompleted = true; data.ResponseBody.SetException(new OperationCanceledException()); }); content.Progress = data.Progress; // NB: The double cast is because of a Xamarin compiler bug int status = (int)resp.StatusCode; var ret = new HttpResponseMessage((HttpStatusCode)status) { Content = content, RequestMessage = data.Request, }; ret.RequestMessage.RequestUri = new Uri(resp.Url.AbsoluteString); foreach (var v in resp.AllHeaderFields) { // NB: Cocoa trolling us so hard by giving us back dummy // dictionary entries if (v.Key == null || v.Value == null) { continue; } ret.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); ret.Content.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); } data.FutureResponse.TrySetResult(ret); } catch (Exception ex) { data.FutureResponse.TrySetException(ex); } completionHandler(NSUrlSessionResponseDisposition.Allow); }
public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action <NSUrlSessionResponseDisposition> completionHandler) { var data = getResponseForTask(dataTask); try { if (data.CancellationToken.IsCancellationRequested) { dataTask.Cancel(); } var resp = (NSHttpUrlResponse)response; var req = data.Request; if (This.throwOnCaptiveNetwork && req.RequestUri.Host != resp.Url.Host) { throw new CaptiveNetworkException(req.RequestUri, new Uri(resp.Url.ToString())); } var content = new CancellableStreamContent(data.ResponseBody, () => { if (!data.IsCompleted) { dataTask.Cancel(); } data.IsCompleted = true; data.ResponseBody.SetException(new OperationCanceledException()); }); content.Progress = data.Progress; // NB: The double cast is because of a Xamarin compiler bug int status = (int)resp.StatusCode; var ret = new HttpResponseMessage((HttpStatusCode)status) { Content = content, RequestMessage = data.Request, }; foreach (var v in resp.AllHeaderFields) { // NB: Cocoa trolling us so hard by giving us back dummy // dictionary entries if (v.Key == null || v.Value == null) { continue; } ret.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); ret.Content.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); } // NB: The awaiting code can synchronously call read, which will block, and we'll // never get a didReceiveData, because we have not returned from DidReceiveResponse. Task.Run(() => { data.FutureResponse.TrySetResult(ret); }); } catch (Exception ex) { data.FutureResponse.TrySetException(ex); } completionHandler(NSUrlSessionResponseDisposition.Allow); }
partial void SendNetworkReqClickedAsync(NSObject sender) { NSUrl url = new NSUrl("https://developer.huawei.com"); NSUrlSession session = NSUrlSession.SharedSession; NSUrlSessionDataTask task = session.CreateDataTask(url, completionHandler); task.Resume(); }
/// <summary> /// Establece conexion con el servidor para obtener los datos. /// </summary> /// <param name="uri">URI.</param> /// <param name="complete">Action conexion finalizada.</param> private void Connection(URIData uri, Action <bool, string> complete) { using (NSUrlSession session = NSUrlSession.FromConfiguration(NSUrlSessionConfiguration.DefaultSessionConfiguration, (INSUrlSessionDelegate) new DataDelegate(complete), null)) { NSUrlSessionDataTask task = session.CreateDataTask(CreateRequest(uri)); task.Resume(); } }
public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action <NSUrlSessionResponseDisposition> completionHandler) { var inflight = GetInflightData(dataTask); try { var urlResponse = (NSHttpUrlResponse)response; var status = (int)urlResponse.StatusCode; var content = new NSUrlSessionDataTaskStreamContent(inflight.Stream, () => { inflight.Disposed = true; inflight.Stream.TrySetException(new ObjectDisposedException("The content stream was disposed.")); sessionHandler.RemoveInflightData(dataTask); }); // NB: The double cast is because of a Xamarin compiler bug var httpResponse = new HttpResponseMessage((HttpStatusCode)status) { Content = content, RequestMessage = inflight.Request }; httpResponse.RequestMessage.RequestUri = new Uri(urlResponse.Url.AbsoluteString); foreach (var v in urlResponse.AllHeaderFields) { // NB: Cocoa trolling us so hard by giving us back dummy dictionary entries if (v.Key == null || v.Value == null) { continue; } httpResponse.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); httpResponse.Content.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); } inflight.Response = httpResponse; // We don't want to send the response back to the task just yet. Because we want to mimic .NET behavior // as much as possible. When the response is sent back in .NET, the content stream is ready to read or the // request has completed, because of this we want to send back the response in DidReceiveData or DidCompleteWithError if (dataTask.State == NSUrlSessionTaskState.Suspended) { dataTask.Resume(); } } catch (Exception ex) { inflight.CompletionSource.TrySetException(ex); inflight.Stream.TrySetException(ex); sessionHandler.RemoveInflightData(dataTask); } completionHandler(NSUrlSessionResponseDisposition.Allow); }
public override void DidReceiveData (NSUrlSession session, NSUrlSessionDataTask dataTask, NSData byteData) { var data = getResponseForTask(dataTask); var bytes = byteData.ToArray(); // NB: If we're cancelled, we still might have one more chunk // of data that attempts to be delivered if (data.IsCompleted) return; data.ResponseBody.AddByteArray(bytes); }
public override void DidReceiveData(NSUrlSession session, NSUrlSessionDataTask dataTask, NSData data) { System.Diagnostics.Debug.WriteLine("DidReceiveData..."); if (uploadData.ContainsKey(dataTask.TaskIdentifier)) { uploadData[dataTask.TaskIdentifier].AppendData(data); } else { var uData = new NSMutableData(); uData.AppendData(data); uploadData.Add(dataTask.TaskIdentifier, uData); } // _data.AppendData(data); }
public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action <NSUrlSessionResponseDisposition> completionHandler) { try { if (_cancelToken.IsCancellationRequested) { dataTask.Cancel(); } } catch (Exception ex) { _result.TrySetException(ex); } completionHandler(NSUrlSessionResponseDisposition.Allow); }
/// <summary> /// Obtengo codigo response. /// </summary> /// <param name="session">Session.</param> /// <param name="dataTask">Data task.</param> /// <param name="response">Response.</param> /// <param name="completionHandler">Completion handler.</param> public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action <NSUrlSessionResponseDisposition> completionHandler) { // Compruebo si es null if (!(response is NSHttpUrlResponse http_response)) { status_code = -1; return; } // Obtengo codigo status_code = http_response.StatusCode; // Conexion completionHandler(status_code == 200 || status_code == 201 ? NSUrlSessionResponseDisposition.Allow : NSUrlSessionResponseDisposition.Cancel); }
public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action <NSUrlSessionResponseDisposition> completionHandler) { var data = getResponseForTask(dataTask); try { if (data.CancellationToken.IsCancellationRequested) { dataTask.Cancel(); } var resp = (NSHttpUrlResponse)response; var ret = new HttpResponseMessage((HttpStatusCode)resp.StatusCode) { Content = new CancellableStreamContent(data.ResponseBody, () => { //Console.WriteLine("Cancelling!"); if (!data.IsCompleted) { dataTask.Cancel(); } data.IsCompleted = true; data.ResponseBody.SetException(new OperationCanceledException()); }), RequestMessage = data.Request, }; foreach (var v in resp.AllHeaderFields) { // NB: Cocoa trolling us so hard by giving us back dummy // dictionary entries if (v.Key == null || v.Value == null) { continue; } ret.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); ret.Content.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); } data.FutureResponse.TrySetResult(ret); } catch (Exception ex) { data.FutureResponse.TrySetException(ex); } completionHandler(NSUrlSessionResponseDisposition.Allow); }
public void Finish(bool result) { if (IsExecuting) { return; } WillChangeValue("IsExecuting"); WillChangeValue("IsFinished"); isExecuting = false; this.result = result; dataTask.Dispose(); dataTask = null; DidChangeValue("IsExecuting"); DidChangeValue("IsFinished"); }
public override void DidReceiveData(NSUrlSession session, NSUrlSessionDataTask dataTask, NSData data) { //Update(session.Configuration.Identifier, data.ToArray(), null); string key = session.Configuration.Identifier; var r = FileUploaderService.Instance.Requests.FirstOrDefault(x => x.Identifier == session.Configuration.Identifier); if (r == null) { return; } var bytes = data.ToArray(); using (var s = System.IO.File.OpenWrite(r.ResponseFilePath)) { s.Seek(0, SeekOrigin.End); s.Write(bytes, 0, bytes.Length); } }
private void PubliceRequestMethod(NSMutableUrlRequest request) { NSError err; // 设置header NSMutableDictionary header = new NSMutableDictionary(); header.SetValueForKey((NSString)"application/json; charset=utf-8", (NSString)"Content-Type"); request.Headers = header; NSUrlSession session = NSUrlSession.FromConfiguration(NSUrlSessionConfiguration.DefaultSessionConfiguration, (INSUrlSessionDelegate)this, NSOperationQueue.CurrentQueue); NSUrlSessionDataTask task = session.CreateDataTask(request, (data, response, error) => { if (error != null) { Console.WriteLine(error.Description); } else { NSHttpUrlResponse resp = (NSHttpUrlResponse)response; NSDictionary dicData = (NSDictionary)NSJsonSerialization.Deserialize(data, NSJsonReadingOptions.MutableLeaves, out err); if (dicData == null) { return; } NSObject code = dicData.ValueForKey((NSString)"code"); if (resp.StatusCode == 200 && code.ToString().Equals("0")) { NetworkHelperRDelegate(dicData, resp, null); Console.WriteLine(resp.Description); } else { NetworkHelperRDelegate(dicData, resp, err); string message = dicData.ValueForKey((NSString)"message").ToString(); Console.WriteLine(dicData.Description); } } }); task.Resume(); }
void NSUrlSessionButton_TouchUpInside(object sender, EventArgs args) { NSUrlSessionConfiguration sessionConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration; sessionConfig.AllowsCellularAccess = true; sessionConfig.TimeoutIntervalForRequest = 30.0; sessionConfig.TimeoutIntervalForResource = 60.0; sessionConfig.HttpMaximumConnectionsPerHost = 1; NSUrl url = NSUrl.FromString(URLRequestBin); NSMutableUrlRequest urlRequest = new NSMutableUrlRequest(url, NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData, 60.0); urlRequest.HttpMethod = "POST"; urlRequest.Body = NSData.FromString("data=This is some NSURLSession data"); NSUrlSession session = NSUrlSession.FromConfiguration(sessionConfig); NSUrlSessionDataTask dataTask = session.CreateDataTask(urlRequest); dataTask.Resume(); }
private MPMediaItemArtwork GetImageFromUrl(string url) { UIImage image = null; NSUrlSession session = NSUrlSession.SharedSession; NSUrlSessionDataTask dataTask = session.CreateDataTask(new NSUrlRequest(new NSUrl(url)), (data, response, error) => { if (response != null) { image = GetImageFromUrl(data); } }); dataTask.Resume(); if (image != null) { return(new MPMediaItemArtwork(image)); } return(null); }
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) { PhotosSearchCell cell = (PhotosSearchCell)tableView.DequeueReusableCell(cellIdentifier, indexPath); var photo = PhotosList[indexPath.Row]; cell.TitleLabel.Text = photo.Title; cell.ImgView.Image = null; if (photo.LargeImage != null) { cell.ImgView.Image = photo.LargeImage; } else { NSUrlSessionDataTask task = NSUrlSession.SharedSession.CreateDataTask(photo.FlickrImageUrl(), (data, response, error) => { if (data != null) { UIImage image = UIImage.LoadFromData(data); if (image != null) { photo.LargeImage = image; InvokeOnMainThread(() => { PhotosSearchCell updateCell = (PhotosSearchCell)tableView.DequeueReusableCell(cellIdentifier, indexPath); if (updateCell != null) { updateCell.ImgView.Image = image; List <NSIndexPath> ips = new List <NSIndexPath>(); ips.Add(indexPath); tableView.ReloadRows(ips.ToArray(), UITableViewRowAnimation.None); } }); } } }); task.Resume(); } return(cell); }
private void PollForCompletionStatusAsync() { if (IsCancelled) { return; } task = client.GetShop((shop, error) => { WillChangeValue("isFinished"); done = true; DidChangeValue("isFinished"); if (error != null) { FailedToReceiveShop?.Invoke(this, error); } else { DidReceiveShop?.Invoke(this, shop); } }); }
private void GetCollection(CollectionSort collectionSort) { if (collectionTask != null) { collectionTask.Cancel(); } UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true; collectionTask = client.GetProductsPage(1, collection.CollectionId, collectionSort, (products, page, reachedEnd, error) => { UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; if (error == null && products != null) { this.products = products; TableView.ReloadData(); } else { Console.WriteLine("Error fetching products: {0}", error); } }); }
private void DemoNativeFlowWithProduct(BUYProduct product) { if (checkoutCreationTask != null && checkoutCreationTask.State == NSUrlSessionTaskState.Running) { checkoutCreationTask.Cancel (); } var cart = new BUYCart (); cart.AddVariant (product.Variants [0]); var checkout = new BUYCheckout (cart); // Apply billing and shipping address, as well as email to the checkout checkout.ShippingAddress = Address; checkout.BillingAddress = Address; checkout.Email = "*****@*****.**"; client.UrlScheme = "xamarinsample://"; UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true; checkoutCreationTask = client.CreateCheckout (checkout, (chkout, error) => { UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; if (error == null && chkout != null) { var shippingController = new ShippingRatesTableViewController (client, chkout); NavigationController.PushViewController (shippingController, true); } else { Console.WriteLine ("Error creating checkout: {0}", error); } }); }
public override void WillCacheResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSCachedUrlResponse proposedResponse, Action <NSCachedUrlResponse> completionHandler) { completionHandler(sessionHandler.DisableCaching ? null : proposedResponse); }
void HandleNSUrlSessionPendingTasks(NSUrlSessionDataTask[] dataTasks, NSUrlSessionUploadTask[] uploadTasks, NSUrlSessionDownloadTask[] downloadTasks) { // SAMCTODO foreach (var t in uploadTasks) { } foreach (var t in downloadTasks){ } foreach (var t in dataTasks) { } }
private void GetCollection(BUYCollectionSort collectionSort) { if (collectionTask != null) { collectionTask.Cancel (); } UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true; collectionTask = client.GetProductsPage (1, collection.CollectionId, collectionSort, (products, page, reachedEnd, error) => { UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; if (error == null && products != null) { this.products = products; TableView.ReloadData (); } else { Console.WriteLine ("Error fetching products: {0}", error); } }); }
public override void DidReceiveData(NSUrlSession session, NSUrlSessionDataTask dataTask, NSData data) { audioFileStream.ParseBytes ((int)data.Length, data.Bytes, false); }
private void PollForShippingRatesAsync() { BUYStatus shippingStatus = BUYStatus.Unknown; task = client.GetShippingRatesForCheckout (Checkout, async (shippingRates, status, error) => { shippingStatus = status; if (error != null) { WillChangeValue ("isFinished"); done = true; DidChangeValue ("isFinished"); FailedToReceiveShippingRates?.Invoke (this, error); } else if (shippingStatus == BUYStatus.Complete) { ShippingRates = shippingRates; WillChangeValue ("isFinished"); done = true; DidChangeValue ("isFinished"); DidReceiveShippingRates (this, ShippingRates); } else if (shippingStatus == BUYStatus.Processing) { await Task.Delay (500); PollForShippingRatesAsync (); } }); }
public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action<NSUrlSessionResponseDisposition> completionHandler) { var data = getResponseForTask(dataTask); try { if (data.CancellationToken.IsCancellationRequested) { dataTask.Cancel(); } var resp = (NSHttpUrlResponse)response; var ret = new HttpResponseMessage((HttpStatusCode)resp.StatusCode) { Content = new CancellableStreamContent(data.ResponseBody, () => { //Console.WriteLine("Cancelling!"); if (!data.IsCompleted) dataTask.Cancel(); data.IsCompleted = true; data.ResponseBody.SetException(new OperationCanceledException()); }), RequestMessage = data.Request, }; foreach(var v in resp.AllHeaderFields) { // NB: Cocoa trolling us so hard by giving us back dummy // dictionary entries if (v.Key == null || v.Value == null) continue; ret.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); ret.Content.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); } data.FutureResponse.TrySetResult(ret); } catch (Exception ex) { data.FutureResponse.TrySetException(ex); } completionHandler(NSUrlSessionResponseDisposition.Allow); }
public override void DidBecomeDownloadTask(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlSessionDownloadTask downloadTask) { System.Diagnostics.Debug.WriteLine("DidBecomeDownloadTask"); }
public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action <NSUrlSessionResponseDisposition> completionHandler) { System.Diagnostics.Debug.WriteLine("DidReceiveResponse: " + response.ToString()); completionHandler.Invoke(NSUrlSessionResponseDisposition.Allow); }
public override void WillCacheResponse (NSUrlSession session, NSUrlSessionDataTask dataTask, NSCachedUrlResponse proposedResponse, Action<NSCachedUrlResponse> completionHandler) { completionHandler (This.DisableCaching ? null : proposedResponse); }
private void PollForCompletionStatusAsync() { if (IsCancelled) { return; } task = client.GetShop ((shop, error) => { WillChangeValue ("isFinished"); done = true; DidChangeValue ("isFinished"); if (error != null) { FailedToReceiveShop?.Invoke (this, error); } else { DidReceiveShop?.Invoke (this, shop); } }); }
public override void DidReceiveResponse(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlResponse response, Action<NSUrlSessionResponseDisposition> completionHandler) { var data = getResponseForTask(dataTask); try { if (data.CancellationToken.IsCancellationRequested) { dataTask.Cancel(); } var resp = (NSHttpUrlResponse)response; var req = data.Request; if (This.throwOnCaptiveNetwork && req.RequestUri.Host != resp.Url.Host) { throw new CaptiveNetworkException(req.RequestUri, new Uri(resp.Url.ToString())); } var content = new CancellableStreamContent(data.ResponseBody, () => { if (!data.IsCompleted) { dataTask.Cancel(); } data.IsCompleted = true; data.ResponseBody.SetException(new OperationCanceledException()); }); content.Progress = data.Progress; // NB: The double cast is because of a Xamarin compiler bug int status = (int)resp.StatusCode; var ret = new HttpResponseMessage((HttpStatusCode)status) { Content = content, RequestMessage = data.Request, }; ret.RequestMessage.RequestUri = new Uri(resp.Url.AbsoluteString); foreach(var v in resp.AllHeaderFields) { // NB: Cocoa trolling us so hard by giving us back dummy // dictionary entries if (v.Key == null || v.Value == null) continue; ret.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); ret.Content.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); } data.FutureResponse.TrySetResult(ret); } catch (Exception ex) { data.FutureResponse.TrySetException(ex); } completionHandler(NSUrlSessionResponseDisposition.Allow); }
async static void restoreTasks(NSUrlSession ses, NSUrlSessionDataTask[] sessions, NSUrlSessionUploadTask[] uploads, NSUrlSessionDownloadTask[] downloads) { List<BackgroundDownload> restoredDownloads = new List<BackgroundDownload>(); foreach(var d in downloads) { var url = d.OriginalRequest.Url.AbsoluteString; if(d.Error != null) { BackgroundDownloadManager.Errored(d); } BackgroundDownload download; BackgroundDownloadManager.BackgroundDownloadFile downloadFile; download = new BackgroundDownload (d) { SessionId = ses.Configuration.Identifier, }; foreach(var key in BackgroundDownloadManager.Files) { Console.WriteLine(key.Key); } if(BackgroundDownloadManager.Files.TryGetValue(url, out downloadFile)) download.Destination = downloadFile.Destination; BackgroundDownloadManager.AddController (url, download); restoredDownloads.Add(download); } if(RestoredDownloads != null) { RestoredDownloads(restoredDownloads); } }
private void PollForCompletionStatusAsync() { if (IsCancelled) { return; } task = client.GetCompletionStatusOfCheckout (Checkout, async (status, error) => { if (status == BUYStatus.Processing) { await Task.Delay (500); PollForCompletionStatusAsync (); } else { CompletionStatus = status; WillChangeValue ("isFinished"); done = true; DidChangeValue ("isFinished"); if (error != null) { FailedToReceiveCompletionStatus?.Invoke (this, error); } else { DidReceiveCompletionStatus?.Invoke (this, status); } } }); }