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);
}
}