public void UpdateChats(UpdateChatsResult chats) { NeedUpdateChats?.Invoke(chats, EventArgs.Empty); }
private async void NeedUpdateChats(Guid employeeGuid) { var dbWorker = DIFactory.Resolve <IDbSystemWorker>(); var employees = await dbWorker.GetEmployees(); var usersResult = employees.Select(dbEmployee => new Common.Results.User { Guid = dbEmployee.Guid, Email = dbEmployee.Email, Login = dbEmployee.Login, Surname = dbEmployee.Surname, Patronymic = dbEmployee.Patronymic, Position = dbEmployee.Position, Name = dbEmployee.Name, EmployeePhoto = dbEmployee.Photo, }).ToList(); foreach (var user in _users) { var single = usersResult.Single(x => x.Guid == user.UserGuid); single.IsOnline = user.Callbacks.Any(); } var chats = await dbWorker.GetUserChats(employeeGuid); var needUpdateUsers = chats.Where(x => x.UserGuids.Count == 2).Select(x => x.UserGuids.First(y => y != employeeGuid)).Distinct().ToList(); try { var selfUser = _users.SingleOrDefault(x => x.UserGuid == employeeGuid); var chatsResult = new UpdateChatsResult(); chatsResult.Users = usersResult; chatsResult.Chats = chats; chatsResult.InfoBody = new ResultBody { ResultStatus = ResultStatus.Success }; if (selfUser != null) { foreach (var callback in selfUser.Callbacks) { try { callback.UpdateChats(chatsResult); } catch (Exception e) { _logger.Write(LogLevel.Error, "Error callback message", e); } } } } catch (Exception e) { _logger.Write(LogLevel.Error, "Error callback message", e); } foreach (var updateUser in needUpdateUsers) { var u = _users.SingleOrDefault(x => x.UserGuid == updateUser); if (u != null) { foreach (var callback in u.Callbacks) { try { var chatsResult = new UpdateChatsResult(); chatsResult.Users = usersResult; chatsResult.Chats = await dbWorker.GetUserChats(updateUser); chatsResult.InfoBody = new ResultBody { ResultStatus = ResultStatus.Success }; callback.UpdateChats(chatsResult); } catch (Exception e) { _logger.Write(LogLevel.Error, "Error callback message", e); } } } } }