Exemplo n.º 1
0
        /// <summary>
        /// Синхронизация с сервером
        /// </summary>
        /// <param name="exec">Обязательная синхронизация</param>
        public static async Task <int> Synchronization(bool exec = false)
        {
            if (!User.IsConnectToServer)
            {
                return(1);
            }
            if (!IsServer)
            {
                return(2);
            }
            //Проверка существования на сервере связки логина и пароля
            using (var client = new HttpClient())
            {
                HttpResponseMessage message = client.PostAsJsonAsync(ProgramSettings.AdressServer + "Server/RegistrationUser",
                                                                     new RegistrationData {
                    Login = _login, Md5 = _md5
                }).Result;
                string resultString = message.Content.ReadAsStringAsync().Result;
                bool   result       = Convert.ToBoolean(resultString);
                if (!result)
                {
                    return(3);
                }
            }

            //Формирование локального списка файлов для синхронизации
            List <FileInfoData> fileInfos = new List <FileInfoData>();

            if (User.IsSynchronizeSettingsWithServer)
            {
                //Файл настроек
                FileInfoData fileSettings = new FileInfoData("Settings.bin", "", true, User.DateLastEditSettings, FileToUpload.Settings, false, false);
                fileInfos.Add(fileSettings);
            }

            if (User.IsSynchronizeDatabaseWithServer)
            {
                //Файлы БД
                if (User.DBMSName == "SQLite")
                {
                    FileInfoData fileDatabase = new FileInfoData("database.db", "", true, User.DateLastEditDatabase, FileToUpload.Database, false, false);
                    if (File.Exists(Environment.CurrentDirectory + "\\data\\" + _login + "\\database.db"))
                    {
                        fileInfos.Add(fileDatabase);
                    }
                }
                //Отсутствует поддержка синхронизации файлов SQL Server

                /*else
                 * {
                 *  FileInfoData fileDatabase = new FileInfoData("database.mdf", "", true, User.DateLastEditDatabase, FileToUpload.Database, false, false);
                 *  fileInfos.Add(fileDatabase);
                 *  FileInfoData fileDatabaseLog = new FileInfoData("database_log.ldf", "", true, User.DateLastEditDatabase, FileToUpload.Database,
                 *      false, false);
                 *  fileInfos.Add(fileDatabaseLog);
                 * }*/
            }

            //Файлы резервных копий
            string[] backupFileNames = Directory.GetFiles(Environment.CurrentDirectory + "\\data\\" + _login + "\\Backups");
            foreach (string elem in backupFileNames)
            {
                FileInfo     infFile = new FileInfo(elem);
                FileInfoData file    = new FileInfoData(infFile.Name, "", false, DateTime.Now, FileToUpload.Backup, false, false);
                fileInfos.Add(file);
            }

            //Файлы фото
            string[] photoFileNames = Directory.GetFiles(Environment.CurrentDirectory + "\\data\\" + _login + "\\Photos");
            foreach (string elem in photoFileNames)
            {
                FileInfo     infFile = new FileInfo(elem);
                FileInfoData file    = new FileInfoData(infFile.Name, "", false, DateTime.Now, FileToUpload.Photo, false, false);
                fileInfos.Add(file);
            }

            //Файлы документов
            string[] documentFileNames = Directory.GetFiles(Environment.CurrentDirectory + "\\data\\" + _login + "\\Documents");
            foreach (string elem in documentFileNames)
            {
                FileInfo     infFile = new FileInfo(elem);
                FileInfoData file    = new FileInfoData(infFile.Name, "", false, DateTime.Now, FileToUpload.Document, false, false);
                fileInfos.Add(file);
            }

            //Отправка списка файлов и получение списка сервера
            ListFileInfoData list = new ListFileInfoData(fileInfos.ToArray());

            list.Login = _login;
            using (var client = new HttpClient())
            {
                HttpResponseMessage message = client.PostAsJsonAsync(ProgramSettings.AdressServer + "Server/GetListFilesInfo", list).Result;
                string resp = message.Content.ReadAsStringAsync().Result;
                list = JsonConvert.DeserializeObject <ListFileInfoData>(resp);
            }

            //Начало отправки/загрузки файлов
            foreach (var elem in list.FilesInfo)
            {
                if (elem.IsUpload && exec)
                {
                    string prevPath = "";
                    switch (elem.FileType)
                    {
                    case FileToUpload.Backup:
                        prevPath = "Backups\\";
                        break;

                    case FileToUpload.Document:
                        prevPath = "Documents\\";
                        break;

                    case FileToUpload.Photo:
                        prevPath = "Photos\\";
                        break;
                    }
                    PostFileFromServerAsync(prevPath + elem.NameFile);
                }
                if (elem.IsDownload && !exec)
                {
                    await GetFileFromServerAsync(elem.FileType, elem.NameFile);
                }
            }

            //Проверка дополнительных условий и удаление лишних файлов
            if (User.IsSynchronizeBackupWithServer)
            {
                foreach (var elem in backupFileNames)
                {
                    File.Delete(elem);
                }
            }
            if (User.IsSynchronizeDocumentsWithServer)
            {
                foreach (var elem in documentFileNames)
                {
                    File.Delete(elem);
                }
            }

            return(0);
        }
Exemplo n.º 2
0
        public JsonResult GetListFilesInfo([FromBody] ListFileInfoData list)
        {
            //Формирование полного пути
            string mainPath = Request.MapPath("..//data//" + list.Login);

            //Получение массивов путей к файлам
            string[] masb = Directory.GetFiles(mainPath + "\\Backups");
            string[] masp = Directory.GetFiles(mainPath + "\\Photos");
            string[] masd = Directory.GetFiles(mainPath + "\\Documents");
            string[] masm = Directory.GetFiles(mainPath);

            //Получение списков имен файлов
            List <string> backupFileNames   = new List <string>();
            List <string> photoFileNames    = new List <string>();
            List <string> documentFileNames = new List <string>();
            List <string> mainFileNames     = new List <string>();

            foreach (var elem in masb)
            {
                FileInfo infFile = new FileInfo(elem);
                backupFileNames.Add(infFile.Name);
            }
            foreach (var elem in masp)
            {
                FileInfo infFile = new FileInfo(elem);
                photoFileNames.Add(infFile.Name);
            }
            foreach (var elem in masd)
            {
                FileInfo infFile = new FileInfo(elem);
                documentFileNames.Add(infFile.Name);
            }
            foreach (var elem in masm)
            {
                FileInfo infFile = new FileInfo(elem);
                mainFileNames.Add(infFile.Name);
            }

            if (list.FilesInfo != null)
            {
                foreach (var elem in list.FilesInfo)
                {
                    switch (elem.FileType)
                    {
                    case FileToUpload.Settings:
                    {
                        using (ServerDatabaseContext databaseContext = new ServerDatabaseContext())
                        {
                            UserTable user = databaseContext.UserTables.FirstOrDefault(u => u.Login == list.Login);
                            if (user.DateEditSetting == null || elem.DateChange - user.DateEditSetting.Value > TimeSpan.FromMinutes(1))
                            {
                                user.DateEditSetting = DateTime.Now;
                                databaseContext.SaveChanges();
                                elem.IsUpload = true;
                            }
                            else if (user.DateEditSetting.Value - elem.DateChange > TimeSpan.FromMinutes(1))
                            {
                                if (System.IO.File.Exists(mainPath + "\\" + elem.NameFile))
                                {
                                    elem.IsDownload = true;
                                }
                            }
                            if (mainFileNames.Contains(elem.NameFile))
                            {
                                mainFileNames.Remove(elem.NameFile);
                            }
                        }
                        break;
                    }

                    case FileToUpload.Database:
                    {
                        using (ServerDatabaseContext databaseContext = new ServerDatabaseContext())
                        {
                            UserTable user = databaseContext.UserTables.FirstOrDefault(u => u.Login == list.Login);
                            if (user.DateEditDatabase == null || elem.DateChange - user.DateEditDatabase.Value > TimeSpan.FromMinutes(1))
                            {
                                user.DateEditDatabase = DateTime.Now;
                                databaseContext.SaveChanges();
                                elem.IsUpload = true;
                            }
                            else if (user.DateEditDatabase.Value - elem.DateChange > TimeSpan.FromMinutes(1))
                            {
                                if (System.IO.File.Exists(mainPath + "\\" + elem.NameFile))
                                {
                                    elem.IsDownload = true;
                                }
                            }
                            if (mainFileNames.Contains(elem.NameFile))
                            {
                                mainFileNames.Remove(elem.NameFile);
                            }
                        }
                        break;
                    }

                    case FileToUpload.Backup:
                    {
                        if (!backupFileNames.Contains(elem.NameFile))
                        {
                            using (ServerDatabaseContext databaseContext = new ServerDatabaseContext())
                            {
                                UserTable user = databaseContext.UserTables.FirstOrDefault(u => u.Login == list.Login);
                                databaseContext.BackupTables.Add(new BackupTable {
                                        BackupName = elem.NameFile, DateOfCreate = DateTime.Now,
                                        UserId     = user.UserId
                                    });
                                databaseContext.SaveChanges();
                                elem.IsUpload = true;
                            }
                        }
                        else
                        {
                            backupFileNames.Remove(elem.NameFile);
                        }
                        break;
                    }

                    case FileToUpload.Document:
                    {
                        if (!documentFileNames.Contains(elem.NameFile))
                        {
                            elem.IsUpload = true;
                        }
                        else
                        {
                            documentFileNames.Remove(elem.NameFile);
                        }
                        break;
                    }

                    case FileToUpload.Photo:
                    {
                        if (!photoFileNames.Contains(elem.NameFile))
                        {
                            elem.IsUpload = true;
                        }
                        else
                        {
                            photoFileNames.Remove(elem.NameFile);
                        }
                        break;
                    }
                    }
                }
            }

            List <FileInfoData> newList = list.FilesInfo.ToList();

            if (documentFileNames.Count > 0)
            {
                foreach (var elem in documentFileNames)
                {
                    newList.Add(new FileInfoData
                    {
                        DateChange = DateTime.Now,
                        FileType   = FileToUpload.Document,
                        IsChanged  = false,
                        IsDownload = true,
                        IsUpload   = false,
                        NameFile   = elem,
                        PathFile   = ""
                    });
                }
            }
            if (photoFileNames.Count > 0)
            {
                foreach (var elem in photoFileNames)
                {
                    newList.Add(new FileInfoData
                    {
                        DateChange = DateTime.Now,
                        FileType   = FileToUpload.Photo,
                        IsChanged  = false,
                        IsDownload = true,
                        IsUpload   = false,
                        NameFile   = elem,
                        PathFile   = ""
                    });
                }
            }

            if (mainFileNames.Count > 0)
            {
                foreach (var elem in mainFileNames)
                {
                    FileToUpload fileTo;
                    if (elem == "Settings.bin")
                    {
                        fileTo = FileToUpload.Settings;
                    }
                    else
                    {
                        fileTo = FileToUpload.Database;
                    }
                    newList.Add(new FileInfoData
                    {
                        DateChange = DateTime.Now,
                        FileType   = fileTo,
                        IsChanged  = false,
                        IsDownload = true,
                        IsUpload   = false,
                        NameFile   = elem,
                        PathFile   = ""
                    });
                }
            }

            list = new ListFileInfoData(newList.ToArray());
            return(Json(list));
        }