示例#1
0
        private void OnSyncFilesRequest(SyncFilesRequest fileAction, SyncFilesBodyRequest bodyRequest, HttpRequestEventArgs e)
        {
            var login = _connectionStateManager.GetLoginByToken(fileAction.Token);

            if (string.IsNullOrEmpty(login))
            {
                ApiController.SetErrorResponse(e);
                return;
            }

            var folders       = _userTableDataBase.GetAvailableFolders(login);
            var databaseFiles = _syncTableDataBase.GetSyncStates(login);

            var serverFiles = new List <FileInfoModel>();

            foreach (var folder in folders)
            {
                var rootFiles = _fileManager.GetFiles(folder);
                serverFiles.AddRange(rootFiles);
            }

            var deviceFiles = bodyRequest.Files.Select(Convert).ToList();

            var resultServerRemoveFiles = _serverRemoveFiles.Get(databaseFiles, deviceFiles, serverFiles);


            var response = new SyncFilesResponse();

            var resultClientRemoveFiles = _clientRemoveFiles.Get(databaseFiles, deviceFiles, serverFiles);

            AddFilesRemoveResponse(resultClientRemoveFiles, response);

            var resultServerAddFiles = _serverAddFiles.Get(databaseFiles, deviceFiles, serverFiles);

            AddUploadRequest(resultServerAddFiles, response);

            var resultClientAddFiles = _clientAddFiles.Get(databaseFiles, deviceFiles, serverFiles);

            AddFilesAddResponse(resultClientAddFiles, response);

            var resultClientUpdateFiles = _clientUpdateFiles.Get(databaseFiles, deviceFiles, serverFiles);

            AddUpdatedResponse(resultClientUpdateFiles, response);

            var clientServerExistFiles = _clientServerExistFiles.Get(databaseFiles, deviceFiles, serverFiles);

            _syncTableDataBase.AddStates(login, clientServerExistFiles.Select(x => x.Path).ToArray());
            _syncTableDataBase.RemoveSyncStates(login, resultServerRemoveFiles.Select(x => x.Path).ToList());

            foreach (var filePath in resultServerRemoveFiles.ToList())
            {
                _fileManager.RemoveFile(filePath.Path);
                RaiseSendMessage($"Remove {filePath.Path}");
            }

            ApiController.SendResponse(e, response);
        }
示例#2
0
        public void ActionTest()
        {
            var databaseFiles = new List <string>
            {
                Remove_it_on_server_side,
                Remove_it_on_client_side,
                Update_it_on_client_side,
            };

            var deviceFiles = new List <FileInfoModel>
            {
                new FileInfoModel(Remove_it_on_client_side, 1),
                new FileInfoModel(Add_it_on_server_side, 1),
                new FileInfoModel(Update_it_on_client_side, 1),
            };

            var serverFiles = new List <FileInfoModel>
            {
                new FileInfoModel(Remove_it_on_server_side, 1),
                new FileInfoModel(Add_it_on_client_side, 1),
                new FileInfoModel(Update_it_on_client_side, 2),
            };

            void CheckAssert(IList <FileInfoModel> result, string element)
            {
                Assert.AreEqual(result.Count, 1);
                Assert.AreEqual(result.FirstOrDefault()?.Path, element);
            }

            var serverRemoveFiles       = new ServerRemoveFiles();
            var resultServerRemoveFiles = serverRemoveFiles.Get(databaseFiles, deviceFiles, serverFiles);

            CheckAssert(resultServerRemoveFiles, Remove_it_on_server_side);

            var clientRemoveFiles       = new ClientRemoveFiles();
            var resultClientRemoveFiles = clientRemoveFiles.Get(databaseFiles, deviceFiles, serverFiles);

            CheckAssert(resultClientRemoveFiles, Remove_it_on_client_side);

            var serverAddFiles       = new ServerAddFiles();
            var resultServerAddFiles = serverAddFiles.Get(databaseFiles, deviceFiles, serverFiles);

            CheckAssert(resultServerAddFiles, Add_it_on_server_side);

            var clientAddFiles       = new ClientAddFiles();
            var resultClientAddFiles = clientAddFiles.Get(databaseFiles, deviceFiles, serverFiles);

            CheckAssert(resultClientAddFiles, Add_it_on_client_side);

            var clientUpdateFiles       = new ClientUpdateFiles();
            var resultClientUpdateFiles = clientUpdateFiles.Get(databaseFiles, deviceFiles, serverFiles);

            CheckAssert(resultClientUpdateFiles, Update_it_on_client_side);
        }