public void Run(IBackgroundTaskInstance taskInstance) { using (new BackgroundTaskDeferralWrapper(taskInstance.GetDeferral())) { try { var rawNotification = (RawNotification)taskInstance.TriggerDetails; var rawContent = rawNotification.Content; var serializedParameter = rawContent.Substring(rawContent.IndexOf(" ", StringComparison.CurrentCultureIgnoreCase) + 1); var type = typeof(RelayMessage); var message = (RelayMessage)JsonConvert.Deserialize(serializedParameter, type); if (message == null) { return; } var isTimeout = (DateTimeOffset.UtcNow - message.SentDateTimeUtc).TotalSeconds > 60; if (message.Tag == RelayMessageTags.VoipCall) { if (isTimeout) { return; } ToastNotificationService.ShowInstantMessageNotification(message.FromName, message.FromUserId, AvatarLink.EmbeddedLinkFor(message.FromAvatar), $"Missed call at {message.SentDateTimeUtc.ToLocalTime()}."); } else if (message.Tag == RelayMessageTags.InstantMessage) { if (isTimeout || SignaledRelayMessages.IsMessageReceived(message.Id)) { return; } ToastNotificationService.ShowInstantMessageNotification(message.FromName, message.FromUserId, AvatarLink.EmbeddedLinkFor(message.FromAvatar), message.Payload); SignaledRelayMessages.AddPushNotificationMessageID(message.Id); SignaledRelayMessages.Add(message); } } catch (Exception) { } } }
public void ServerRelay(RelayMessage message) { ClientConfirmation(Confirmation.For(message)); SignaledRelayMessages.Add(message); var shownUserId = _foregroundChannel.GetShownUserId(); if (message.Tag == RelayMessageTags.InstantMessage && !SignaledRelayMessages.IsPushNotificationReceived(message.Id) && !(shownUserId != null && shownUserId.Equals(message.FromUserId)) && (DateTimeOffset.UtcNow.Subtract(message.SentDateTimeUtc).TotalMinutes < 10)) { ToastNotificationService.ShowInstantMessageNotification(message.FromName, message.FromUserId, AvatarLink.EmbeddedLinkFor(message.FromAvatar), message.Payload); } _foregroundChannel?.OnSignaledRelayMessagesUpdated(); // Handle Voip tags if (message.Tag == RelayMessageTags.VoipCall) { _voipChannel.OnIncomingCall(message); } else if (message.Tag == RelayMessageTags.VoipAnswer) { _voipChannel.OnOutgoingCallAccepted(message); } else if (message.Tag == RelayMessageTags.VoipReject) { _voipChannel.OnOutgoingCallRejected(message); } else if (message.Tag == RelayMessageTags.SdpOffer) { _voipChannel.OnSdpOffer(message); } else if (message.Tag == RelayMessageTags.SdpAnswer) { _voipChannel.OnSdpAnswer(message); } else if (message.Tag == RelayMessageTags.IceCandidate) { _voipChannel.OnIceCandidate(message); } else if (message.Tag == RelayMessageTags.VoipHangup) { _voipChannel.OnRemoteHangup(message); } }