/SDK Sample Projects/Win8/PushSDK/TagsService.cs
https://github.com/doluyen/push-notifications-sdk · C# · 175 lines · 129 code · 33 blank · 13 comment · 17 complexity · 7c11423eb6630735badbb9aa50620192 MD5 · raw file
- using Newtonsoft.Json.Linq;
- using PushSDK.Classes;
- using System;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using System.Net.Http;
- using Newtonsoft.Json;
- using System.Linq;
- using System.Net;
- using System.IO;
- using System.Diagnostics;
-
- namespace PushSDK
- {
- public class TagsService
- {
- private readonly string _appId;
-
- private readonly HttpClient _httpClient = new HttpClient();
-
- public event EventHandler<CustomEventArgs<List<KeyValuePair<string, string>>>> OnSendingComplete;
- public event EventHandler<CustomEventArgs<string>> OnError;
-
- public TagsService(string appId)
- {
- _appId = appId;
- //_webClient.UploadStringCompleted += UploadStringCompleted;
- }
-
- /// <summary>
- /// Sending tag to server
- /// </summary>
- /// <param name="tagList">Tags list</param>
- public async void SendRequest(List<KeyValuePair<string, object>> tagList)
- {
- var webRequest = (HttpWebRequest)HttpWebRequest.Create(Constants.TagsUrl);
-
- webRequest.Method = "POST";
- webRequest.ContentType = "application/x-www-form-urlencoded";
- string request = String.Format("{{ \"request\":{0}}}", JsonConvert.SerializeObject(BuildRequest(tagList)));
-
- byte[] requestBytes = System.Text.Encoding.UTF8.GetBytes(request);
-
- // Write the channel URI to the request stream.
- Stream requestStream = await webRequest.GetRequestStreamAsync();
- requestStream.Write(requestBytes, 0, requestBytes.Length);
-
- try
- {
- // Get the response from the server.
- WebResponse response = await webRequest.GetResponseAsync();
- StreamReader requestReader = new StreamReader(response.GetResponseStream());
- String webResponse = requestReader.ReadToEnd();
-
- string errorMessage = String.Empty;
-
- Debug.WriteLine("Response: " + webResponse);
-
- JObject jRoot = JObject.Parse(webResponse);
- int code = JsonHelpers.GetStatusCode(jRoot);
- if (code == 200 || code == 103)
- {
- UploadStringCompleted(webResponse);
- }
- else
- errorMessage = JsonHelpers.GetStatusMessage(jRoot);
-
- if (!String.IsNullOrEmpty(errorMessage) && OnError != null)
- {
- Debug.WriteLine("Error: " + errorMessage);
- OnError(this, new CustomEventArgs<string> { Result = errorMessage });
- }
- }
-
- catch (Exception ex)
- {
- OnError(this, new CustomEventArgs<string> { Result = ex.Message });
- }
- }
-
- /// <summary>
- /// Sending tag to server
- /// </summary>
- /// <param name="jTagList">tag format: [tagKey:tagValue]</param>
- public async void SendRequest(string jTagList)
- {
- var webRequest = (HttpWebRequest)HttpWebRequest.Create(Constants.TagsUrl);
-
- webRequest.Method = "POST";
- webRequest.ContentType = "application/x-www-form-urlencoded";
- string request = String.Format("{{ \"request\":{0}}}", JsonConvert.SerializeObject(BuildRequest(jTagList)));
-
- byte[] requestBytes = System.Text.Encoding.UTF8.GetBytes(request);
-
- // Write the channel URI to the request stream.
- Stream requestStream = await webRequest.GetRequestStreamAsync();
- requestStream.Write(requestBytes, 0, requestBytes.Length);
-
- try
- {
- // Get the response from the server.
- WebResponse response = await webRequest.GetResponseAsync();
- StreamReader requestReader = new StreamReader(response.GetResponseStream());
- String webResponse = requestReader.ReadToEnd();
-
- string errorMessage = String.Empty;
-
- Debug.WriteLine("Response: " + webResponse);
-
- JObject jRoot = JObject.Parse(webResponse);
- int code = JsonHelpers.GetStatusCode(jRoot);
- if (code == 200 || code == 103)
- {
- UploadStringCompleted(webResponse);
- }
- else
- errorMessage = JsonHelpers.GetStatusMessage(jRoot);
-
- if (!String.IsNullOrEmpty(errorMessage) && OnError != null)
- {
- Debug.WriteLine("Error: " + errorMessage);
- OnError(this, new CustomEventArgs<string> { Result = errorMessage });
- }
- }
-
- catch (Exception ex)
- {
- OnError(this, new CustomEventArgs<string> { Result = ex.Message });
- }
-
- }
-
- private string BuildRequest(IEnumerable<KeyValuePair<string, object>> tagList)
- {
- JObject tags = new JObject();
- foreach (var tag in tagList)
- {
- tags.Add(new JProperty(tag.Key, tag.Value));
- }
- return BuildRequest(tags.ToString());
- }
-
- private string BuildRequest(string tags)
- {
- return (new JObject(
- new JProperty("request",
- new JObject(
- new JProperty("application", _appId),
- new JProperty("hwid", SDKHelpers.GetDeviceUniqueId()),
- new JProperty("tags", JObject.Parse(tags)))))).ToString();
- }
-
- private void UploadStringCompleted(string responseBodyAsText)
- {
-
- JObject jRoot = JObject.Parse(responseBodyAsText);
- if (JsonHelpers.GetStatusCode(jRoot) == 200)
- {
- var skippedTags = new List<KeyValuePair<string, string>>();
-
- if (jRoot["response"].HasValues)
- {
- JArray jItems = jRoot["response"]["skipped"] as JArray;
-
- skippedTags = jItems.Select(jItem => new KeyValuePair<string, string>(jItem.Value<string>("tag"), jItem.Value<string>("reason"))).ToList();
- }
-
- OnSendingComplete(this, new CustomEventArgs<List<KeyValuePair<string, string>>> { Result = skippedTags });
- }
- else
- OnError(this, new CustomEventArgs<string> { Result = JsonHelpers.GetStatusMessage(jRoot) });
- }
- }
-
- }