private void ProcessNewChatUserInfos(int chatId, Dictionary <int, ChatUserInfo> chatUserInfos) { if (chatUserInfos == null || !chatUserInfos.Any()) { return; } lock (ChatUserInfosCache) { lock (_newChatUserInfosHandlers) { foreach (var userInfo in chatUserInfos) { var id = new ChatUserId(userInfo.Key, chatId); if (ChatUserInfosCache.ContainsKey(id)) { ChatUserInfosCache[id] = userInfo.Value; } if (_newChatUserInfosHandlers.ContainsKey(id)) { _newChatUserInfosHandlers[id]?.Invoke(this, userInfo.Value); } } } } }
private void ProcessNewChatMembers(int chatId, IEnumerable <int> members) { if (members == null) { return; } var membersArray = members as int[] ?? members.ToArray(); if (!membersArray.Any()) { return; } lock (ChatsStorage) { lock (ChatUserInfosCache) { var prevMembers = ChatsStorage[chatId].Users; foreach (var excludedMember in prevMembers.Where(x => !membersArray.Contains(x))) { var key = new ChatUserId(excludedMember, chatId); if (ChatUserInfosCache.ContainsKey(key)) { ChatUserInfosCache.Remove(key); } } } ChatsStorage[chatId].Users = membersArray; } lock (_newChatMembersHandlers) { if (_newChatMembersHandlers.ContainsKey(chatId)) { _newChatMembersHandlers[chatId]?.Invoke(this, membersArray); } } }