/// <summary> /// serialize to json /// </summary> /// <param name="o"></param> /// <returns></returns> private static string ToString(PushMessage o) { JavaScriptSerializer jser = new JavaScriptSerializer(); string contents = jser.Serialize(o); return contents; }
/// <summary> /// Enque either a common or WP7 message to be sent to MPNS. Get message components and send it to the device /// </summary> /// <param name="device">Device to send the message to</param> /// <param name="msg">Message to send</param> public override void EnqueMessage(DeviceDataModel device, PushMessage msg) { if (msg.MessageType == (short)PushMessageType.Toast) { this.EnqueAndroidToastNotification(device, msg.Message["toast"]); } else if (msg.MessageType == (short)PushMessageType.Raw) { this.EnqueAndroidRawNotification(device, msg.Message["raw"]); } else if (msg.MessageType == (short)PushMessageType.Common) { this.EnqueAndroidCommonNotification(device, msg.Message["title"], int.Parse(msg.Message["count"], CultureInfo.InvariantCulture), msg.Message["sound"]); } else if (msg.MessageType == (short)PushMessageType.Iphone) { this.EnqueAndroidCommonNotification(device, msg.Message["title"], int.Parse(msg.Message["count"], CultureInfo.InvariantCulture), msg.Message["sound"]); } else { return; } }
/// <summary> /// Enques and sends the message to a collection of devices /// </summary> /// <param name="devices">List of devices to send the message to</param> /// <param name="msg">The push message to send the message to the devices</param> public virtual void EnqueMessage(IEnumerable<DeviceDataModel> devices, PushMessage msg) { // Check if the message is supported is by the connection class. if (!this.HandlesMessageType((PushMessageType)msg.MessageType)) { return; } if (devices == null) { return; } foreach (DeviceDataModel ddm in devices) { this.EnqueMessage(ddm, msg); } }
/// <summary> /// Enque either a common or iPhone message type to be sent to APNS. Get message components and enque it for the device /// </summary> /// <param name="device">Device to send the message to</param> /// <param name="msg">Message to send</param> public override void EnqueMessage(DeviceDataModel device, PushMessage msg) { if (msg.MessageType == (short)PushMessageType.Iphone) { string msgStr = ToString(msg); iPhoneMessage iPhoneMsg = FromString(msgStr, typeof(iPhoneMessage)) as iPhoneMessage; this.EnqueiOSMessage(device, iPhoneMsg); } else if (msg.MessageType == (short)PushMessageType.Common) { string msgStr = ToString(msg); iPhoneMessage iPhoneMsg = FromString(msgStr, typeof(iPhoneMessage)) as iPhoneMessage; this.EnqueiOSMessage(device, iPhoneMsg); } }
/// <summary> /// Enque and send the message to the appropriate notification service /// </summary> /// <param name="device">Device to send the message to</param> /// <param name="msg">The push message to send to the device</param> public virtual void EnqueMessage(DeviceDataModel device, PushMessage msg) { return; }
/// <summary> /// Enque either a common or WP7 message to be sent to MPNS. Get message components and send it to the device /// </summary> /// <param name="devices">Devices to send the message to</param> /// <param name="msg">Message to send</param> public override void EnqueMessage(IEnumerable<DeviceDataModel> devices, PushMessage msg) { try { if (msg.MessageType == (short)PushMessageType.Toast) { this.EnqueWP7ToastNotification(devices, msg.Message["toast"]); } else if (msg.MessageType == (short)PushMessageType.Raw) { this.EnqueWP7RawNotification(devices, msg.Message["raw"]); } else if (msg.MessageType == (short)PushMessageType.Tile || msg.MessageType == (short)PushMessageType.Common) { this.EnqueWP7TileNotification(devices, msg.Message["title"], int.Parse(msg.Message["count"], CultureInfo.InvariantCulture), msg.Message["url"]); } else { return; } } catch (Exception) { if (this.NotificationFormatError != null) { this.NotificationFormatError(this, new NotificationEventArgs(new NotificationFormatException(msg))); } } }
/// <summary> /// Enque either a common or WP7 message to be sent to MPNS. Get message components and send it to the device /// </summary> /// <param name="device">Device to send the message to</param> /// <param name="msg">Message to send</param> public override void EnqueMessage(DeviceDataModel device, PushMessage msg) { if (msg.MessageType == (short)PushMessageType.Toast) { this.EnqueWP7ToastNotification(device, msg.Message["toast"]); } else if (msg.MessageType == (short)PushMessageType.Raw) { this.EnqueWP7RawNotification(device, msg.Message["message"]); } else if (msg.MessageType == (short)PushMessageType.Tile || msg.MessageType == (short)PushMessageType.Common) { this.EnqueWP7TileNotification(device, msg.Message["title"], int.Parse(msg.Message["count"], CultureInfo.InvariantCulture), msg.Message["url"]); } else { return; } }
/// <summary> /// Initializes a new instance of the NotificationFormatException class. /// </summary> /// <param name="message">Notification that caused the Exception.</param> public NotificationFormatException(PushMessage message) : base(string.Format(CultureInfo.InvariantCulture, "Notification payload larger than maximum allowed")) { this.NotificationMessage = message; }
// Based on the type of message, it is sent to appropriate connection private void ProcessMessage(PushMessage pushMsg) { // Check if APNS and MPNS support a given type bool ifAPNSSupportsType = this.apnsSupportedMessages[(PushMessageType)pushMsg.MessageType]; bool ifMPNSSupportsType = this.mpnsSupportedMessages[(PushMessageType)pushMsg.MessageType]; bool ifC2DMSupportsType = this.c2dmSupportedMessages[(PushMessageType)pushMsg.MessageType]; if (ifAPNSSupportsType) { // If APNS supports it, get the list of devices of the type APNS supports. IEnumerable<DeviceDataModel> ddmList = this.sds.SelectByDeviceTypeAndSubscription(pushMsg.SubscriptionName, this.apnsDevType); this.apnsConnection.EnqueMessage(ddmList, pushMsg); } if (ifMPNSSupportsType) { // If MPNS supports the message type, get the list of devices of MPNS type and subscribed to a given subscription IEnumerable<DeviceDataModel> ddmList = this.sds.SelectByDeviceTypeAndSubscription(pushMsg.SubscriptionName, this.mpnsDevType); this.mpnsConnection.EnqueMessage(ddmList, pushMsg); } if (ifC2DMSupportsType) { // If APNS supports it, get the list of devices of the type APNS supports. IEnumerable<DeviceDataModel> ddmList = this.sds.SelectByDeviceTypeAndSubscription(pushMsg.SubscriptionName, this.c2dmDevType); this.c2dmConnection.EnqueMessage(ddmList, pushMsg); } }