/// <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());
     }
 }
Exemple #2
0
        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) { }
        }
Exemple #3
0
        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);
            }
Exemple #5
0
        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);
            }));
        }
Exemple #6
0
        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();
                }
            });
        }
Exemple #8
0
        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);
                    }
                }
            });
        }
Exemple #9
0
        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);
            }
Exemple #16
0
 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);
 }
Exemple #17
0
 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);
            }
Exemple #20
0
        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);
        }
Exemple #25
0
        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);
                }
            });
        }
Exemple #27
0
        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);
            }
Exemple #35
0
 public override void DidBecomeDownloadTask(NSUrlSession session, NSUrlSessionDataTask dataTask, NSUrlSessionDownloadTask downloadTask)
 {
     System.Diagnostics.Debug.WriteLine("DidBecomeDownloadTask");
 }
Exemple #36
0
        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);
			}
		}
            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);
            }
        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);
                    }
                }
            });
        }