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