예제 #1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            userRepository = DependencyResolver.Current.GetService<IUserRepository>();
            Response.ContentType = "text/plain";
            int accountId;
            if (Request["accountId"] == null || !int.TryParse(Request["accountId"], out accountId))
            {
                Logger.Error("Не корректно задан парамер accountId");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            if (!avatarSize.Contains(Request["size"].ToLower()))
            {
                Logger.Error("Не корректно задан парамер size");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            var user = userRepository.GetAccountOwner(accountId);
            if (user == null)
            {
                Logger.Error("Не найден пользователь-владелец счёта " + accountId);
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            dataSource = TradeSharpAccountStatistics.Instance.proxy;

            var userInfo = dataSource.GetUsersBriefInfo(new List<int> { user.ID }).FirstOrDefault();
            if (userInfo == null)
            {
                Logger.Error("Не удалось получить подробную информацию о пользователе " + user.Login);
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            byte[] avatar;
            switch (Request["size"].ToLower())
            {
                case  "big":
                    avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarBigFileName }).FirstOrDefault();
                    break;
                case "small":
                    avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarSmallFileName }).FirstOrDefault();
                    break;
                default:
                    avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarBigFileName }).FirstOrDefault();
                    break;
            }
            if (avatar == null)
            {
                Logger.Error("Не удалось получить файл");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            Response.BinaryWrite(avatar);
        }
예제 #2
0
        // чтение файла из БД с обновлением кэша в случае необходимости
        private List <byte[]> GetFiles(List <string> names, List <string> hashCodes)
        {
            var fileDict = new Dictionary <string, byte[]>();

            // forming request
            var requestNames = new List <string>();

            for (var i = 0; i < names.Count; i++)
            {
                var name     = names[i];
                var hashCode = hashCodes[i];
                if (name == null || hashCode == null) // при вызове из GetUsersInfo: на сервере файла не существует
                {
                    try
                    {
                        if (!string.IsNullOrEmpty(name))
                        {
                            File.Delete(path + "\\" + name);
                            fileDict.Add(name, null);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Info("UserInfoExCache.GetFiles: error deleting file " + path + "\\" + name, ex);
                    }
                    continue;
                }
                if (File.Exists(path + "\\" + name))
                {
                    var data = File.ReadAllBytes(path + "\\" + name);
                    if (UserInfoEx.ComputeHash(data) == hashCode)
                    {
                        fileDict.Add(name, data);
                        continue;
                    }
                }
                requestNames.Add(name);
            }

            // requesting server
            var files = dataSource.ReadFiles(requestNames);

            if (files == null || files.Count != requestNames.Count)
            {
                Logger.Info("UserInfoExCache.GetFiles: server error");
                return(null);
            }

            // saving to cache
            for (var i = 0; i < requestNames.Count; i++)
            {
                var name = requestNames[i];
                var data = files[i];
                try
                {
                    File.WriteAllBytes(path + "\\" + name, data);
                }
                catch (Exception ex)
                {
                    Logger.Info("UserInfoExCache.GetFiles: error writing cache " + path + "\\" + name, ex);
                }
                fileDict.Add(name, data);
            }

            return(names.Select(name => name == null ? null : fileDict[name]).ToList());
        }
예제 #3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            userRepository       = DependencyResolver.Current.GetService <IUserRepository>();
            Response.ContentType = "text/plain";
            int accountId;

            if (Request["accountId"] == null || !int.TryParse(Request["accountId"], out accountId))
            {
                Logger.Error("Не корректно задан парамер accountId");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            if (!avatarSize.Contains(Request["size"].ToLower()))
            {
                Logger.Error("Не корректно задан парамер size");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            var user = userRepository.GetAccountOwner(accountId);

            if (user == null)
            {
                Logger.Error("Не найден пользователь-владелец счёта " + accountId);
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            dataSource = TradeSharpAccountStatistics.Instance.proxy;

            var userInfo = dataSource.GetUsersBriefInfo(new List <int> {
                user.ID
            }).FirstOrDefault();

            if (userInfo == null)
            {
                Logger.Error("Не удалось получить подробную информацию о пользователе " + user.Login);
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            byte[] avatar;
            switch (Request["size"].ToLower())
            {
            case  "big":
                avatar = dataSource.ReadFiles(new List <string> {
                    userInfo.AvatarBigFileName
                }).FirstOrDefault();
                break;

            case "small":
                avatar = dataSource.ReadFiles(new List <string> {
                    userInfo.AvatarSmallFileName
                }).FirstOrDefault();
                break;

            default:
                avatar = dataSource.ReadFiles(new List <string> {
                    userInfo.AvatarBigFileName
                }).FirstOrDefault();
                break;
            }
            if (avatar == null)
            {
                Logger.Error("Не удалось получить файл");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            Response.BinaryWrite(avatar);
        }