Exemple #1
0
 protected override void SendNotification(Common.Notification notification)
 {
     try { sendNotification(notification); }
     catch (Exception ex)
     {
         this.Events.RaiseChannelException(ex, PlatformType.Windows, notification);
     }
 }
        protected override void SendNotification(Common.Notification notification)
        {
            var bbn = notification as BlackberryNotification;

            if (bbn != null)
            {
                push(bbn);
            }
        }
        protected override void SendNotification(Common.Notification notification)
        {
            lock (sentLock)
            {
                var appleNotification = notification as AppleNotification;

                bool   isOkToSend       = true;
                byte[] notificationData = new byte[] {};

                try
                {
                    notificationData = appleNotification.ToBytes();
                }
                catch (NotificationFailureException nfex)
                {
                    //Bad notification format already
                    isOkToSend = false;

                    Interlocked.Decrement(ref trackedNotificationCount);

                    this.Events.RaiseNotificationSendFailure(notification, nfex);
                }

                if (isOkToSend)
                {
                    lock (connectLock)
                        Connect();

                    try
                    {
                        lock (streamWriteLock)
                        {
                            lock (sentLock)
                            {
                                networkStream.Write(notificationData, 0, notificationData.Length);

                                sentNotifications.Add(new SentNotification(appleNotification));
                            }
                        }
                    }
                    catch (Exception)
                    {
                        //If this failed, we probably had a networking error, so let's requeue the notification
                        this.QueueNotification(notification, true, true);
                    }
                }
            }
        }
Exemple #4
0
        void sendNotification(Common.Notification notification)
        {
            //See if we need an access token
            if (string.IsNullOrEmpty(AccessToken))
            {
                RenewAccessToken();
            }

            var winNotification = notification as WindowsNotification;

            //https://cloud.notify.windows.com/?token=.....
            //Authorization: Bearer {AccessToken}
            //

            var wnsType = string.Empty;

            switch (winNotification.Type)
            {
            case WindowsNotificationType.Tile:
                wnsType = "wns/tile";
                break;

            case WindowsNotificationType.Badge:
                wnsType = "wns/badge";
                break;

            case WindowsNotificationType.Toast:
                wnsType = "wns/toast";
                break;

            default:
                wnsType = "wns/raw";
                break;
            }

            var request = (HttpWebRequest)HttpWebRequest.Create(winNotification.ChannelUri);             // "https://notify.windows.com");

            request.Method = "POST";
            request.Headers.Add("X-WNS-Type", wnsType);
            request.Headers.Add("Authorization", string.Format("Bearer {0}", this.AccessToken));
            request.ContentType = "text/xml";

            if (winNotification.Type == WindowsNotificationType.Raw)
            {
                request.ContentType = "application/octet-stream";
            }

            if (winNotification.Type == WindowsNotificationType.Tile)
            {
                var winTileNot = winNotification as WindowsTileNotification;

                if (winTileNot != null && winTileNot.CachePolicy.HasValue)
                {
                    request.Headers.Add("X-WNS-Cache-Policy", winTileNot.CachePolicy == WindowsNotificationCachePolicyType.Cache ? "cache" : "no-cache");
                }
            }
            else if (winNotification.Type == WindowsNotificationType.Badge)
            {
                if (winNotification is WindowsBadgeNumericNotification)
                {
                    var winTileBadge = winNotification as WindowsBadgeNumericNotification;

                    if (winTileBadge != null && winTileBadge.CachePolicy.HasValue)
                    {
                        request.Headers.Add("X-WNS-Cache-Policy", winTileBadge.CachePolicy == WindowsNotificationCachePolicyType.Cache ? "cache" : "no-cache");
                    }
                }
                else if (winNotification is WindowsBadgeGlyphNotification)
                {
                    var winTileBadge = winNotification as WindowsBadgeGlyphNotification;

                    if (winTileBadge != null && winTileBadge.CachePolicy.HasValue)
                    {
                        request.Headers.Add("X-WNS-Cache-Policy", winTileBadge.CachePolicy == WindowsNotificationCachePolicyType.Cache ? "cache" : "no-cache");
                    }
                }
            }

            if (winNotification.RequestForStatus.HasValue)
            {
                request.Headers.Add("X-WNS-RequestForStatus", winNotification.RequestForStatus.Value.ToString().ToLower());
            }

            if (winNotification.Type == WindowsNotificationType.Tile)
            {
                var winTileNot = winNotification as WindowsTileNotification;

                if (winTileNot != null && !string.IsNullOrEmpty(winTileNot.NotificationTag))
                {
                    request.Headers.Add("X-WNS-Tag", winTileNot.NotificationTag);                     // TILE only
                }
            }

            if (winNotification.TimeToLive.HasValue)
            {
                request.Headers.Add("X-WNS-TTL", winNotification.TimeToLive.Value.ToString());                 //Time to live in seconds
            }
            //Microsoft recommends we disable expect-100 to improve latency
            request.ServicePoint.Expect100Continue = false;

            var payload = winNotification.PayloadToString();
            var data    = Encoding.Default.GetBytes(payload);

            request.ContentLength = data.Length;

            using (var rs = request.GetRequestStream())
                rs.Write(data, 0, data.Length);

            try
            {
                request.BeginGetResponse(new AsyncCallback(getResponseCallback), new object[] { request, winNotification });
            }
            catch (WebException wex)
            {
                //Handle different httpstatuses
                var status = ParseStatus(wex.Response as HttpWebResponse, winNotification);

                HandleStatus(status);
            }
        }
Exemple #5
0
 static void Events_OnDeviceSubscriptionExpired(Common.PlatformType platform, string deviceInfo, Common.Notification notification)
 {
     Console.WriteLine("Device Subscription Expired: " + platform.ToString() + " -> " + deviceInfo);
 }
Exemple #6
0
 static void Events_OnChannelException(Exception exception, Common.PlatformType platformType, Common.Notification notification)
 {
     Console.WriteLine("Channel Exception: " + platformType.ToString() + " -> " + exception.ToString());
 }
Exemple #7
0
 static void Events_OnNotificationSendFailure(Common.Notification notification, Exception notificationFailureException)
 {
     Console.WriteLine("Failure: " + notification.Platform.ToString() + " -> " + notificationFailureException.Message + " -> " + notification.ToString());
 }
Exemple #8
0
 static void Events_OnNotificationSent(Common.Notification notification)
 {
     Console.WriteLine("Sent: " + notification.Platform.ToString() + " -> " + notification.ToString());
 }
Exemple #9
0
 static void Events_OnDeviceSubscriptionIdChanged(Common.PlatformType platform, string oldDeviceInfo, string newDeviceInfo, Common.Notification notification)
 {
     //Currently this event will only ever happen for Android GCM
     Console.WriteLine("Device Registration Changed:  Old-> " + oldDeviceInfo + "  New-> " + newDeviceInfo);
 }
Exemple #10
0
 static void Events_OnChannelException(Exception exception, Common.Notification notification)
 {
     Console.WriteLine("Channel Exception: " + exception.ToString());
 }