Beispiel #1
0
 public void UpdateChats(UpdateChatsResult chats)
 {
     NeedUpdateChats?.Invoke(chats, EventArgs.Empty);
 }
Beispiel #2
0
        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);
                        }
                    }
                }
            }
        }