public static PushoverRequest CreateRequest(string message, string title, string url, string urlTitle, int?retry, int?expire, PushoverPriorityNotificationType?priority, PushoverSoundType?sound, params string[] devices) { if (string.IsNullOrEmpty(message)) { throw new PushoverException("Message cannot be empty"); } if (expire != null && retry == null || expire == null && retry != null) { throw new PushoverException("Expire and Retry needs to be filled every 2"); } if (expire != null && retry != null && priority != PushoverPriorityNotificationType.EmergencyPriority) { throw new PushoverException("When Expire and Retry is informed then priority should be set to Emergency priority"); } if ((expire == null || retry == null) && priority == PushoverPriorityNotificationType.EmergencyPriority) { throw new PushoverException("When Priority is set to Emergency Expire and Retry should be informed too"); } if (retry != null && retry < 30) { throw new PushoverException("Retry must have a value of at least 30 seconds"); } if (expire != null && expire > 86400) { throw new PushoverException("Expire must have a maximum value of at most 86400 seconds (24 hours)"); } if (urlTitle != null && url == null) { throw new PushoverException("When UrlTitle is informed then Url should be informed too"); } PushoverRequest request = new PushoverRequest() { Devices = devices, Expire = expire, Message = message, Priority = priority, Retry = retry, Sound = sound, Title = title, Url = url, UrlTitle = urlTitle }; return(request); }
public PushoverResponse SendNotification(PushoverRequest pushoverRequest) { HttpWebResponse response = null; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(Url, "messages")); request.Timeout = Timeout; request.Proxy = Proxy; request.Method = "POST"; string postData = "token=" + Token; postData += "&user="******"&message=" + WebUtility.UrlEncode(pushoverRequest.Message); if (!string.IsNullOrEmpty(pushoverRequest.Title)) { postData += "&title=" + WebUtility.UrlEncode(pushoverRequest.Title); } if (pushoverRequest.Priority.HasValue) { postData += "&priority=" + (int)pushoverRequest.Priority.Value; } if (pushoverRequest.UseHtml.HasValue) { postData += "&html=" + (pushoverRequest.UseHtml.Value ? "1" : "0"); } if (pushoverRequest.Sound.HasValue) { postData += "&sound=" + pushoverRequest.Sound.Value.ToString(); } if (pushoverRequest.Devices != null) { postData += "&device=" + WebUtility.UrlEncode(string.Join(",", pushoverRequest.Devices)); } if (pushoverRequest.Url != null) { postData += "&url=" + WebUtility.UrlEncode(pushoverRequest.Url); } if (pushoverRequest.UrlTitle != null) { postData += "&url_title=" + WebUtility.UrlEncode(pushoverRequest.UrlTitle); } if (pushoverRequest.Expire.HasValue) { postData += "&expire=" + pushoverRequest.Expire.Value; } if (pushoverRequest.Retry.HasValue) { postData += "&retry=" + pushoverRequest.Retry.Value; } if (pushoverRequest.TimeStamp.HasValue) { postData += "×tamp=" + DateTimeHelper.DateTimeToUnixTimestamp(pushoverRequest.TimeStamp.Value); } if (pushoverRequest.CallbackUrl != null) { postData += "&callback=" + WebUtility.UrlEncode(pushoverRequest.CallbackUrl); } byte[] data = Encoding.UTF8.GetBytes(postData); request.ContentLength = (long)data.Length; using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } response = (HttpWebResponse)request.GetResponse(); string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); return(JsonConvert.DeserializeObject <PushoverResponse>(responseString)); } catch (WebException ex) { response = (HttpWebResponse)ex.Response; string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); _log.ErrorFormat("Error {0} ({1}) received : {2}", (int)response.StatusCode, response.StatusCode, responseString); return(JsonConvert.DeserializeObject <PushoverResponse>(responseString)); } catch (Exception ex) { _log.Error(ex); } finally { if (response != null) { response.Close(); } } return(null); }
public PushoverResponse SendNotification(string message) { return(SendNotification(PushoverRequest.CreateRequest(message))); }