private void ProcessNewChats(IEnumerable <Chat> chats)
        {
            if (chats == null)
            {
                return;
            }

            var chatsArray = chats as Chat[] ?? chats.ToArray();

            if (!chatsArray.Any())
            {
                return;
            }

            lock (ChatsStorage)
                foreach (var chat in chatsArray)
                {
                    if (!ChatsStorage.ContainsKey(chat.Id))
                    {
                        ChatsStorage.Add(chat.Id, chat);
                    }
                }
            NewChatsEvent?.Invoke(this, chatsArray);
            AreChatsPolled = true;
        }
 public void SetChat(Chat chat)
 {
     lock (ChatsStorage)
     {
         if (ChatsStorage.ContainsKey(chat.Id))
         {
             ChatsStorage[chat.Id] = chat;
             lock (_newChatInfoHandlers)
                 if (_newChatInfoHandlers.ContainsKey(chat.Id))
                 {
                     _newChatInfoHandlers[chat.Id]?.Invoke(this, chat);
                 }
         }
         else
         {
             ChatsStorage.Add(chat.Id, chat);
             NewChatsEvent?.Invoke(this, new[] { chat });
         }
     }
 }
 private void PollerOnNewChatsEvent(object sender, IEnumerable <Chat> enumerable)
 {
     NewChatsEvent?.Invoke(this, enumerable);
 }