private static void Sync(ISyncClientFactory syncClientFactory, FileUploadWorker fileUploadWorker, string source, string target) { using (var syncClient = syncClientFactory.Create(target)) { foreach (var i in Directory.EnumerateFiles(source, "*", SearchOption.AllDirectories)) { if (fileUploadWorker.ValidateFile(i)) { var targetFile = fileUploadWorker.ResolveTargetFile(i); for (;;) { try { var dirty = false; var sourceFileInfo = new FileInfo(i); var targetFileInfo = syncClient.GetFileInfo(targetFile); if (!targetFileInfo.Exists) { Log("Sync file:{0} not exists", targetFile); dirty = true; } else { if (targetFileInfo?.Size != null && sourceFileInfo.Length != targetFileInfo.Size.Value) { Log("Sync file:{0} size:{1} {2}", targetFile, sourceFileInfo.Length, targetFileInfo.Size.Value); dirty = true; } if (targetFileInfo?.Timestamp != null && sourceFileInfo.LastWriteTime > targetFileInfo.Timestamp.Value) { Log("Sync file:{0} timestamp:{1} {2}", targetFile, sourceFileInfo.LastWriteTime.ToDateTimeString(), targetFileInfo.Timestamp.Value.ToDateTimeString()); dirty = true; } } if (dirty) { fileUploadWorker.Add(i, false); } break; } catch (Exception ex) { LogError("Sync file:{0} exception:{1}", targetFile, ex); syncClient.Close(); Thread.Sleep(1000); } } } } } }
public SingleTargetSyncService( ISyncClientFactory syncClientFactory, ILifetimeScope dependencyScope, ILogger <SingleTargetSyncService> logger) { _syncClientFactory = syncClientFactory; _dependencyScope = dependencyScope; _logger = logger; }
private static Task SyncAsync(ISyncClientFactory syncClientFactory, FileUploadWorker fileUploadWorker, string source, string target) { return(Task.Factory.StartNew(() => { Log("Sync started"); Sync(syncClientFactory, fileUploadWorker, source, target); Log("Sync done"); }, TaskCreationOptions.LongRunning)); }