public ConnectionStatus ConnectToSignalingServer(ConnectionOwner connectionOwner) { try { SignaledPeerData.Reset(); SignalingStatus.Reset(); SignaledRelayMessages.Reset(); var socket = new StreamSocket(); socket.EnableTransferOwnership(Guid.Parse(connectionOwner.OwnerId), SocketActivityConnectedStandbyAction.Wake); socket.ConnectAsync(new HostName(SignalingSettings.SignalingServerHost), SignalingSettings.SignalingServerPort, SocketProtectionLevel.PlainSocket) .AsTask() .Wait(); socket.TransferOwnership(SignalingSocketOperation.SignalingSocketId); return(new ConnectionStatus { IsConnected = true }); } catch (Exception exception) { Debug.Write("Failed to connect to signalling server: ex: " + exception.Message); return(new ConnectionStatus { IsConnected = false }); } }
public void DisconnectSignalingServer() { SocketOperation.Disconnect(); SignaledPeerData.Reset(); SignalingStatus.Reset(); SignaledRelayMessages.Reset(); }
public void DisconnectSignalingServer() { SignaledPeerData.Reset(); SignalingStatus.Reset(); SignaledRelayMessages.Reset(); if (_streamSocket != null) { _streamSocket.Dispose(); } _streamSocket = null; _isConnected = false; }
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); } }
public ConnectionStatus ConnectToSignalingServer(ConnectionOwner connectionOwner) { SignaledPeerData.Reset(); SignalingStatus.Reset(); SignaledRelayMessages.Reset(); _streamSocket = new StreamSocket(); _streamSocket.ConnectAsync(new HostName(SignalingSettings.SignalingServerHost), SignalingSettings.SignalingServerPort, SocketProtectionLevel.PlainSocket) .AsTask() .Wait(); _isConnected = true; _signalingClient = _unityContainer.Resolve <SignalingClient>(); StartReading(); return(new ConnectionStatus { IsConnected = _isConnected }); }
private void OnRelayMessagesUpdated() { var newMessages = SignaledRelayMessages.Messages .Where(s => s.Tag == RelayMessageTags.InstantMessage && s.FromUserId == _userId) .OrderBy(s => s.SentDateTimeUtc).ToList(); foreach (var message in newMessages) { ((ObservableCollection <InstantMessageViewModel>)InstantMessages).Add(new InstantMessageViewModel { Body = message.Payload, DeliveredAt = message.SentDateTimeUtc.LocalDateTime, IsSender = false, SenderName = Name, SenderProfileSource = ProfileSource, IsHighlighted = !_isSelected }); SignaledRelayMessages.Delete(message.Id); } if (!_isSelected && newMessages.Count > 0) { IsHighlighted = true; } }