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); }
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); }
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(); }