public void Test_1_6_Upload_NullCallback() { KiiAnalytics.Initialize("appID004", "appKey", KiiAnalytics.Site.JP, "dev004"); KiiEvent ev = KiiAnalytics.NewEvent("type1"); ev["page"] = 1; ev["label"] = "OK"; Assert.IsFalse(ev.Sent); // set mock MockHttpClientFactory factory = new MockHttpClientFactory(); KiiAnalytics.AsyncHttpClientFactory = factory; MockHttpClient client = factory.Client; client.AddResponse(204, ""); // async upload KiiEventCallback callback = null; KiiAnalytics.Upload(callback, ev); // verify event uploaded Assert.IsTrue(ev.Sent); }
private static void InvokeUploadCallback(KiiEventCallback callback, Exception e) { if (callback != null) { callback(e); } }
private static void ExecUpload(KiiHttpClientFactory httpClientFactory, KiiEventCallback callback, KiiEvent[] eventList) { JsonArray array = new JsonArray(); foreach (KiiEvent ev in eventList) { if (ev == null) { throw new ArgumentException(ErrorInfo.KIIANALYTICS_EVENT_NULL); } if (ev.Sent) { throw new ArgumentException(ErrorInfo.KIIANALYTICS_EVENT_ALREADY_SENT); } if (ev.GetType() == typeof(KiiEvent.NullKiiEvent)) { continue; } array.Put(ev.ConvertToJsonObject(INSTANCE.mDeviceID)); } string url = KiiAnalytics.BaseUrl + "/apps/" + KiiAnalytics.AppID + "/events"; string body = array.ToString(); KiiHttpClient client = httpClientFactory.Create(url, KiiAnalytics.AppID, KiiAnalytics.AppKey, KiiHttpMethod.POST); client.ContentType = "application/vnd.kii.EventRecordList+json"; client.Body = body; client.SendRequest((ApiResponse response, Exception e) => { if (e != null) { if (!(e is CloudException)) { InvokeUploadCallback(callback, e); } else { CloudException exp = (CloudException)e; InvokeUploadCallback(callback, new EventUploadException(exp.Status, exp.Body, eventList)); } return; } if (response.Status == 200) { try { List <KiiEvent> errorEventList = ParsePartialSuccessResponse(response.Body, eventList); InvokeUploadCallback(callback, new EventUploadException(response.Status, response.Body, errorEventList)); } catch (Exception ex) { InvokeUploadCallback(callback, ex); } return; } foreach (KiiEvent ev in eventList) { ev.Sent = true; } InvokeUploadCallback(callback, null); }); }
/// <summary> /// Asynchronously upload events to KiiCloud. /// </summary> /// <remarks> /// This API sends a request to KiiCloud. /// </remarks> /// <param name='callback'> /// KiiEventCallback. /// </param> /// <param name='eventList'> /// Event list to upload. /// </param> /// <exception cref="ArgumentException"> /// Is thrown when /// <list type="bullet"> /// <item><term>eventList is null.</term></item> /// <item><term>Any event in the list has alredy sent to KiiCloud.</term></item> /// <item><term>eventList has more than 50 KiiEvent</term></item> /// </list> /// </exception> public static void Upload(KiiEventCallback callback, params KiiEvent[] eventList) { if (eventList == null || eventList.Length == 0) { throw new ArgumentException(ErrorInfo.KIIANALYTICS_EVENT_NULL); } // length of eventlist must be within 50 if (eventList.Length > 50) { throw new ArgumentException(ErrorInfo.KIIANALYTICS_EVENT_TOO_LONG); } ExecUpload(KiiAnalytics.AsyncHttpClientFactory, callback, eventList); }