Ejemplo n.º 1
0
        private async Task InsertNewMessage(int conversationId, Message message, string previousMessageId)
        {
            var conversation = _contacts.SingleOrDefault(t => t.ConversationId == conversationId);

            if (conversation == null)
            {
                _botLogger.LogDanger($"Comming new message from unknown conversation: '{conversationId}' but we can't find it in memory.");
                return;
            }
            if (Guid.Parse(previousMessageId) != Guid.Empty)                               // On server, has previous message.)
            {
                if (conversation.LatestMessage.Id != Guid.Parse(previousMessageId) ||      // Local latest message is not latest.
                    conversation.Messages.All(t => t.Id != Guid.Parse(previousMessageId))) // Server side previous message do not exists locally.
                {
                    // Some message was lost.
                    _botLogger.LogWarning("Some message was lost. Trying to sync...");
                    var missedMessages = await _conversationService.GetMessagesAsync(conversationId, 15, message.Id.ToString());

                    foreach (var missedMessage in missedMessages.Items)
                    {
                        if (!conversation.Messages.Any(t => t.Id == missedMessage.Id))
                        {
                            conversation.Messages.Add(missedMessage);
                        }
                    }
                }
            }
            conversation.LatestMessage = message;
            conversation.Messages.Add(message);
        }