Exemplo n.º 1
0
        public void GetDataFromGoogleBooks()
        {
            ClearAll();

            // not a real test yet....
            var url = BooksService.GetSearchUrl("MonoTouch");

            var json = new Cirrious.MvvmCross.Plugins.Json.MvxJsonConverter();
            var client = new Cirrious.MvvmCross.Plugins.Network.Rest.MvxJsonRestClient
                {
                    JsonConverterProvider = () => json
                };
            var request = new MvxRestRequest(url);
            MvxDecodedRestResponse<BookSearchResult> theResponse = null;
            Exception exception = null;
            client.MakeRequestFor<BookSearchResult>(request,
                                                    (result) => { theResponse = result; },
                                                    (error) => { exception = error; });

            System.Threading.Thread.Sleep(3000);
            Assert.IsNotNull(theResponse);
            Assert.IsNull(exception);
            Assert.IsNotNull(theResponse.Result);
            Assert.AreEqual(HttpStatusCode.OK, theResponse.StatusCode);
            Assert.IsTrue(theResponse.Result.items.Count == 10);
            Assert.IsTrue(theResponse.Result.items[0].ToString().Contains("MonoTouch"));
        }
        private void ExecuteWebRequest(string url, Action<string> callback, Action<Exception> error)
        {
            //WebClient webClient = new WebClient();
              MvxRestRequest request = new MvxRestRequest(url);

              // create a timeout timer
              Timer timer = null;
              TimerCallback timerCallback = state =>
              {
              timer.Dispose();

              //Doesnt appear to be a way to cancel the request...   webClient.CancelAsync();
              error(new TimeoutException());
              };
              timer = new Timer(timerCallback, null, 5000, 5000);

              _restClient.MakeRequest(request, (MvxStreamRestResponse response) =>
              {
              timer.Dispose();
              StreamReader reader = new StreamReader(response.Stream);
              string result = reader.ReadToEnd();
              _marshal.Invoke(() => callback(result));
              }

              ,
              exception =>
              {
                  timer.Dispose();
                  _marshal.Invoke(() => error(exception));
              }
              );
        }
Exemplo n.º 3
0
 public IMvxAbortable MakeRequestFor <T>(MvxRestRequest restRequest, Action <MvxDecodedRestResponse <T> > successAction, Action <Exception> errorAction)
 {
     return(MakeRequest(restRequest, (MvxStreamRestResponse streamResponse) =>
     {
         using (var textReader = new StreamReader(streamResponse.Stream))
         {
             var text = textReader.ReadToEnd();
             var result = JsonConverterProvider().DeserializeObject <T>(text);
             var decodedResponse = new MvxDecodedRestResponse <T>
             {
                 CookieCollection = streamResponse.CookieCollection,
                 Result = result,
                 StatusCode = streamResponse.StatusCode,
                 Tag = streamResponse.Tag
             };
             successAction(decodedResponse);
         }
     }, errorAction));
 }
Exemplo n.º 4
0
        protected virtual void ProcessRequestThen(
            MvxRestRequest restRequest,
            HttpWebRequest httpRequest,
            Action continueAction,
            Action <Exception> errorAction)
        {
            httpRequest.BeginGetRequestStream(result =>
                                              TryCatch(() =>
            {
                using (var stream = httpRequest.EndGetRequestStream(result))
                {
                    restRequest.ProcessRequestStream(stream);
                    stream.Flush();
                }

                continueAction();
            }, errorAction)
                                              , null);
        }
Exemplo n.º 5
0
        public IMvxAbortable MakeRequest(MvxRestRequest restRequest, Action<MvxRestResponse> successAction, Action<Exception> errorAction)
        {
            HttpWebRequest httpRequest = null;

            TryCatch(() =>
                {
                    httpRequest = BuildHttpRequest(restRequest);

                    Action processResponse = () => ProcessResponse(restRequest, httpRequest, successAction, errorAction);
                    if (restRequest.NeedsRequestStream)
                    {
                        ProcessRequestThen(restRequest, httpRequest, processResponse, errorAction);
                    }
                    else
                    {
                        processResponse();
                    }
                }, errorAction);

            return httpRequest != null ? new MvxRestRequestAsyncHandle(httpRequest) : null;
        }
Exemplo n.º 6
0
        public IMvxAbortable MakeRequest(MvxRestRequest restRequest, Action <MvxRestResponse> successAction, Action <Exception> errorAction)
        {
            HttpWebRequest httpRequest = null;

            TryCatch(() =>
            {
                httpRequest = BuildHttpRequest(restRequest);

                Action processResponse = () => ProcessResponse(restRequest, httpRequest, successAction, errorAction);
                if (restRequest.NeedsRequestStream)
                {
                    ProcessRequestThen(restRequest, httpRequest, processResponse, errorAction);
                }
                else
                {
                    processResponse();
                }
            }, errorAction);

            return(httpRequest != null ? new MvxRestRequestAsyncHandle(httpRequest) : null);
        }
Exemplo n.º 7
0
        protected virtual void ProcessResponse(
            MvxRestRequest restRequest,
            HttpWebRequest httpRequest,
            Action <MvxRestResponse> successAction,
            Action <Exception> errorAction)
        {
            httpRequest.BeginGetResponse(result =>
                                         TryCatch(() =>
            {
                var response = (HttpWebResponse)httpRequest.EndGetResponse(result);

                var code = response.StatusCode;

                var restResponse = new MvxRestResponse
                {
                    CookieCollection = response.Cookies,
                    Tag        = restRequest.Tag,
                    StatusCode = code
                };
                successAction(restResponse);
            }, errorAction)
                                         , null);
        }
Exemplo n.º 8
0
 protected virtual void SetPlatformSpecificProperties(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     // do nothing by default
 }
Exemplo n.º 9
0
        protected virtual void ProcessResponse(
            MvxRestRequest restRequest,
            HttpWebRequest httpRequest,
            Action<MvxStreamRestResponse> successAction,
            Action<Exception> errorAction)
        {
            httpRequest.BeginGetResponse(result =>
                                         TryCatch(() =>
                                             {
                                                 var response = (HttpWebResponse) httpRequest.EndGetResponse(result);

                                                 var code = response.StatusCode;

                                                 using (var responseStream = response.GetResponseStream())
                                                 {
                                                     var restResponse = new MvxStreamRestResponse
                                                         {
                                                             CookieCollection = response.Cookies,
                                                             Stream = responseStream,
                                                             Tag = restRequest.Tag,
                                                             StatusCode = code
                                                         };
                                                     successAction(restResponse);
                                                 }
                                             }, errorAction)
                                         , null);
        }
Exemplo n.º 10
0
 protected virtual void SetMethod(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     httpRequest.Method = restRequest.Verb;
 }
Exemplo n.º 11
0
 protected virtual HttpWebRequest CreateHttpWebRequest(MvxRestRequest restRequest)
 {
     return((HttpWebRequest)WebRequest.Create(restRequest.Uri));
 }
Exemplo n.º 12
0
 protected virtual void SetCookieContainer(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     // note that we don't call
     //   httpRequest.SupportsCookieContainer
     // here - this is because Android complained about this...
     try
     {
         if (restRequest.CookieContainer != null)
         {
             httpRequest.CookieContainer = restRequest.CookieContainer;
         }
     }
     catch (Exception exception)
     {
         Mvx.Warning("Error masked during Rest call - cookie creation - {0}", exception.ToLongString());
     }
 }
Exemplo n.º 13
0
 protected virtual void SetCredentials(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     if (restRequest.Credentials != null)
     {
         httpRequest.Credentials = restRequest.Credentials;
     }
 }
Exemplo n.º 14
0
 protected virtual void SetUserAgent(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     if (!string.IsNullOrEmpty(restRequest.UserAgent))
     {
         httpRequest.Headers["user-agent"] = restRequest.UserAgent;
     }
 }
Exemplo n.º 15
0
 protected virtual void SetAccept(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     if (!string.IsNullOrEmpty(restRequest.Accept))
     {
         httpRequest.Accept = restRequest.Accept;
     }
 }
Exemplo n.º 16
0
 private static void SetCustomHeaders(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     if (restRequest.Headers != null)
     {
         foreach (var kvp in restRequest.Headers)
         {
             httpRequest.Headers[kvp.Key] = kvp.Value;
         }
     }
 }
Exemplo n.º 17
0
 protected virtual void SetContentType(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     if (!string.IsNullOrEmpty(restRequest.ContentType))
     {
         httpRequest.ContentType = restRequest.ContentType;
     }
 }
Exemplo n.º 18
0
 protected virtual void SetPlatformSpecificProperties(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     // do nothing by default
 }
Exemplo n.º 19
0
 protected virtual HttpWebRequest CreateHttpWebRequest(MvxRestRequest restRequest)
 {
     return (HttpWebRequest) WebRequest.Create(restRequest.Uri);
 }
Exemplo n.º 20
0
 protected virtual void SetMethod(MvxRestRequest restRequest, HttpWebRequest httpRequest)
 {
     httpRequest.Method = restRequest.Verb;
 }
Exemplo n.º 21
0
        protected virtual void ProcessRequestThen(
            MvxRestRequest restRequest,
            HttpWebRequest httpRequest,
            Action continueAction,
            Action<Exception> errorAction)
        {
            httpRequest.BeginGetRequestStream(result =>
                                              TryCatch(() =>
                                                  {
                                                      using (var stream = httpRequest.EndGetRequestStream(result))
                                                      {
                                                          restRequest.ProcessRequestStream(stream);
                                                          stream.Flush();
                                                      }

                                                      continueAction();
                                                  }, errorAction)
                                              , null);
        }
Exemplo n.º 22
0
 protected virtual HttpWebRequest BuildHttpRequest(MvxRestRequest restRequest)
 {
     var httpRequest = CreateHttpWebRequest(restRequest);
     SetMethod(restRequest, httpRequest);
     SetContentType(restRequest, httpRequest);
     SetUserAgent(restRequest, httpRequest);
     SetAccept(restRequest, httpRequest);
     SetCookieContainer(restRequest, httpRequest);
     SetCredentials(restRequest, httpRequest);
     SetCustomHeaders(restRequest, httpRequest);
     SetPlatformSpecificProperties(restRequest, httpRequest);
     return httpRequest;
 }