Exemple #1
0
        private async Task ReceiveSynchronizationMessage(IWebSocketConnection webSocketConnection, ClientSynchronizationMessage message)
        {
            string publicKey;

            if (!_mapConnectionsToPublicKey.TryGetValue(webSocketConnection.ConnectionId, out publicKey))
            {
                return;
            }

            var messages = _messageStore.Get(
                e =>
                e.Timestamp <= message.TimestampTo &&
                e.Timestamp > message.TimestampFrom &&
                (e.To == publicKey || e.From == publicKey)
                );
            //var tasks = messages.Select(e => SendAsync(e));//TODO Synchro also SENT msges not only INBOX
            var tasks = messages.Select(async(encryptedMessage) =>
            {
                var publicKeyIsReciever = encryptedMessage.To == publicKey;
                var decryptedMessage    = _messageDecryptor.Decrypt(
                    encryptedMessage,
                    GetPrivateKeyFromPublicKey(publicKeyIsReciever ? encryptedMessage.To : encryptedMessage.From)
                    , publicKeyIsReciever);

                var internalMessage      = _mapper.Map <InternalMessage>(decryptedMessage);
                internalMessage.DateTime = DateTimeOffset.FromUnixTimeSeconds(internalMessage.Timestamp).ToString();
                internalMessage.Title    = internalMessage.Title;
                internalMessage.Content  = internalMessage.Content;
                internalMessage.Id       = internalMessage.Id.GetHashCode().ToString();

                await _internalMessageSender.SendAsync(webSocketConnection, new WebSocketMessageContract()
                {
                    Type = WebSocketMessageResponseTypes.INTERNAL_MESSAGE,
                    Data = internalMessage
                });
            });
            await Task.WhenAll(tasks);

            await _internalMessageSender.SendAsync(webSocketConnection, new WebSocketMessageContract()
            {
                Type = WebSocketMessageResponseTypes.END_OF_SYNCHRONIZATION,
                Data = message
            });
        }