Exemple #1
0
 public bool WriteFile(string name, byte[] data)
 {
     using (var context = DatabaseContext.Instance.Make())
     {
         try
         {
             var file = context.FILE.Find(name);
             if (file == null)
             {
                 context.FILE.Add(new FILE {
                     Name = name, Data = data, HashCode = UserInfoEx.ComputeHash(data)
                 });
             }
             else
             {
                 file.Data     = data;
                 file.HashCode = UserInfoEx.ComputeHash(data);
             }
             context.SaveChanges();
         }
         catch (Exception ex)
         {
             Logger.Error("AccountEfficiencyCache.WriteFile", ex);
             return(false);
         }
     }
     return(true);
 }
Exemple #2
0
        private static bool UpdateText(FILE file, string text)
        {
            var data = UserInfoEx.GetTextData(text);
            var hash = UserInfoEx.ComputeHash(data);

            if (file.HashCode == hash)
            {
                return(false);
            }
            file.Data     = data;
            file.HashCode = hash;
            return(true);
        }
Exemple #3
0
        private static FILE CreateText(string text, string fileName = "")
        {
            var result = new FILE();

            if (string.IsNullOrEmpty(fileName))
            {
                fileName = string.Format("{0}", Guid.NewGuid()) + ".rtf";
            }
            result.Name     = fileName;
            result.Data     = UserInfoEx.GetTextData(text);
            result.HashCode = UserInfoEx.ComputeHash(result.Data);
            return(result);
        }
Exemple #4
0
        private static bool UpdateBitmap(FILE file, Bitmap bitmap)
        {
            var data = UserInfoEx.GetBitmapData(bitmap);
            var hash = UserInfoEx.ComputeHash(data);

            if (file.HashCode == hash)
            {
                return(false);
            }
            file.Data     = data;
            file.HashCode = hash;
            return(true);
        }
Exemple #5
0
        private static FILE CreateBitmap(Bitmap bitmap, string fileName = "")
        {
            var result = new FILE();

            if (string.IsNullOrEmpty(fileName))
            {
                fileName = string.Format("{0}", Guid.NewGuid()) + ".png";
            }
            result.Name     = fileName;
            result.Data     = UserInfoEx.GetBitmapData(bitmap);
            result.HashCode = UserInfoEx.ComputeHash(result.Data);
            return(result);
        }
Exemple #6
0
        private UserInfoEx CreateUserInfoEx(USER_INFO info, bool full)
        {
            var result = new UserInfoEx();

            result.Id = info.Id;
            result.AvatarBigFileName = info.AvatarBig;
            // if full reading is enabled, then hash codes will be set automatically with setting data
            if (info.FILE_BIG != null)
            {
                if (full)
                {
                    result.AvatarBigData = info.FILE_BIG.Data;
                }
                else
                {
                    result.AvatarBigHashCode = info.FILE_BIG.HashCode ?? UserInfoEx.ComputeHash(result.AvatarBigData);
                }
            }
            result.AvatarSmallFileName = info.AvatarSmall;
            if (info.FILE_SMALL != null)
            {
                if (full)
                {
                    result.AvatarSmallData = info.FILE_SMALL.Data;
                }
                else
                {
                    result.AvatarSmallHashCode = info.FILE_SMALL.HashCode ?? UserInfoEx.ComputeHash(result.AvatarSmallData);
                }
            }
            result.AboutFileName = info.About;
            if (info.FILE_ABOUT != null)
            {
                if (full)
                {
                    result.AboutData = info.FILE_ABOUT.Data;
                }
                else
                {
                    result.AboutHashCode = info.FILE_ABOUT.HashCode ?? UserInfoEx.ComputeHash(result.AboutData);
                }
            }
            result.Contacts = info.Contacts;
            return(result);
        }
Exemple #7
0
 // запись файла в БД с обновлением кэша в случае необходимости
 private bool SetFile(string name, byte[] data)
 {
     if (string.IsNullOrEmpty(name))
     {
         return(false);
     }
     try
     {
         var cacheFileName = path + "\\" + name;
         if (File.Exists(cacheFileName) && UserInfoEx.ComputeHash(File.ReadAllBytes(cacheFileName)) == UserInfoEx.ComputeHash(data))
         {
             return(false);
         }
         dataSource.WriteFile(name, data);
         File.WriteAllBytes(cacheFileName, data);
         return(true);
     }
     catch (Exception ex)
     {
         Logger.Info(string.Format("UserInfoExCache.SetFile: error caching file {0}", name), ex);
         return(false);
     }
 }
Exemple #8
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());
        }