Exemple #1
0
        private async Task SendConfirmationToSender(IWebSocketConnection webSocketConnection, ClientInternalMessage clientInternalMessage, InternalMessage internalMessage)
        {
            if (!clientInternalMessage.CorrelationId.HasValue)
            {
                return;
            }

            var confirmationMessage = _mapper.Map <InternalMessageConfirmation>(clientInternalMessage);

            confirmationMessage.Id        = internalMessage.Id;
            confirmationMessage.Timestamp = internalMessage.Timestamp;
            confirmationMessage.DateTime  = internalMessage.DateTime;
            await _internalMessageSender.SendAsync(webSocketConnection, new WebSocketMessageContract()
            {
                Type = WebSocketMessageResponseTypes.INTERNAL_MESSAGE_CONFIRMATION,
                Data = confirmationMessage
            });
        }
Exemple #2
0
        private async Task ReceiveInternalMessageAsync(IWebSocketConnection webSocketConnection, ClientInternalMessage clientInternalMessage)
        {
            _logger.LogInformation("Received internal message to {0}", clientInternalMessage.To);
            GetConnections(clientInternalMessage.To).ToList().ForEach(id =>
            {
                _logger.LogInformation("-Active connection for reciever: {0}", id);
            });
            _logger.LogInformation("-No more active connections for reciever");


            var connectionId = webSocketConnection.ConnectionId;
            var from         = _mapConnectionsToPublicKey.Where(m => m.Key == connectionId).Select(m => m.Value).SingleOrDefault();

            var message = _messageBuilder.AddContent(clientInternalMessage.Content)
                          .AddReciever(clientInternalMessage.To)
                          .AddSender(from)
                          .AddTitle(clientInternalMessage.Title)
                          .AddContent(clientInternalMessage.Content)
                          .EncryptAndBuild(GetPrivateKeyFromConnectionId(connectionId));

            var added = _messageStore.TryAddAsync(message);

            if (!added.Result)
            {
                throw new InvalidOperationException();
            }

            var internalMessage = _mapper.Map <InternalMessage>(clientInternalMessage);

            internalMessage.From      = from;
            internalMessage.DateTime  = DateTimeOffset.FromUnixTimeSeconds(message.Timestamp).ToString();
            internalMessage.Timestamp = message.Timestamp;
            internalMessage.Id        = message.Id.GetHashCode().ToString();

            await SendAsync(internalMessage, connectionId);
            await SendConfirmationToSender(webSocketConnection, clientInternalMessage, internalMessage);

            await _peerCommunicationService.SendAsync(Endpoints.Messages, message);
        }