protected override void WireRequest(int attempt, string id, string method, ApiParamsWriterDelegate parameters, ApiCallSucceededDelegate resultHandler)
        {
            string widgetType = null;

            // 1. write the request
            using (Stream requestStream = new MemoryStream())
            {
                StreamWriter sw = new StreamWriter(requestStream);
                try
                {
                    WriteRequest(id, method, parameters, sw);
                    sw.Flush();
                    requestStream.Seek(0, SeekOrigin.Begin);

                    // 2. validate the json in the request: compare it with json defined in a file
                    JsonData dataFromFile = null, dataFromRequest = null;

                    using (StreamReader sr = new StreamReader(requestStream))
                        dataFromRequest = JsonMapper.ToObject(new JsonReader(sr));

                    if ("messaging.send_form".Equals(method))
                        widgetType = (string)dataFromRequest["params"]["form"]["type"];

                    using (StreamReader sr = new StreamReader(GetRequestInputStream(method, widgetType)))
                        dataFromFile = JsonMapper.ToObject(new JsonReader(sr));

                    Assert.IsNotNull(dataFromFile);
                    Assert.IsNotNull(dataFromRequest);
                    // TODO: find a way to compare the 2 JsonObjects without having to update the thrid-party src code
                    bool areEqual = dataFromFile.Equals(dataFromRequest);
                    if (!areEqual)
                    {
                        string jsonFromFile = dataFromFile.ToJson();
                        string jsonFromRequest = dataFromRequest.ToJson();
                        // set a breakpoint here
                        Assert.IsTrue(dataFromFile.Equals(dataFromRequest),
                            "\n" + jsonFromFile + "\n!=\n" + jsonFromRequest);
                    }
                }
                finally
                {
                    sw.Dispose();
                }
            }

            // 3. read and process the response from a json file
            using (StreamReader sr = new StreamReader(GetResponseInputStream(method)))
                ReadAndProcessResponse(resultHandler, sr);
        }
Ejemplo n.º 2
0
        protected virtual void WireRequest(int attempt, string id, string method, ApiParamsWriterDelegate parameters, ApiCallSucceededDelegate resultHandler)
        {
            var webRequest = WebRequest.Create (ApiLocation) as HttpWebRequest;
            webRequest.ContentType = "application/json-rpc";
            webRequest.Headers.Add ("X-Nuntiuz-API-Key", ApiKey);
            webRequest.Method = "POST";
            Stream requestStream = webRequest.GetRequestStream();

            using (StreamWriter sw = new StreamWriter(requestStream))
                WriteRequest(id, method, parameters, sw);

            HttpWebResponse response = null;
            string errorMessage = null;
            try {
                response = webRequest.GetResponse () as HttpWebResponse;
            } catch (WebException we) {
                errorMessage = we.ToString ();
                System.Diagnostics.Trace.Write ("Exception occurred while sending request.\n" + errorMessage);
            }
            if (response == null || response.StatusCode != HttpStatusCode.OK) {
                if (attempt < 4)
                    WireRequest (attempt + 1, id, method, parameters, resultHandler);
                else {
                    throw new ApiException (-1, errorMessage, null);
                }
                return;
            }

            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                ReadAndProcessResponse(resultHandler, sr);
        }
Ejemplo n.º 3
0
 protected static void WriteRequest(string id, string method, ApiParamsWriterDelegate parameters, StreamWriter sw)
 {
     JsonWriter writer = new JsonWriter(sw);
     writer.WriteObjectStart();
     writer.WritePropertyName("id");
     writer.Write(id);
     writer.WritePropertyName("method");
     writer.Write(method);
     writer.WritePropertyName("params");
     if (parameters == null)
         writer.Write(null);
     else
         parameters(writer);
     writer.WriteObjectEnd();
 }