private void DoWork() { while (!_shutdown) { DateTime _lastSave = DateTime.MinValue; while (_conn.isPaused == false && Global.PauseAll == false) { if (_que.Count == 0) { SaveQueue(); break; } if (_que.Count > 0 && ClientCommands.isConnected(_conn.MachineName)) { SyncFile file = null; DownloadAsZipFile(); try { _que.TryDequeue(out file); if (file != null) { ProcessFile(file); } } catch (Exception ex) { _log.Error(ex); if (file != null) { _ErrorQue.Enqueue(file); } } if (FastDateTime.Now.Subtract(_lastSave).TotalMinutes > Global.SaveQueueEvery_X_Minute) { SaveQueue(); _lastSave = FastDateTime.Now; } } else { Thread.Sleep(3000); } } Thread.Sleep(1000); } }
private void timer_elapsed(object sender, ElapsedEventArgs e) { if (ClientCommands.isConnected(_conn.MachineName)) { if (_que.Count == 0 && _conn.isClient && _downloading == false) { NewSync(); } } else { // clear cache if connection lost _log.Info("Clearing cache for : " + _conn.Name); _conn.CurrentState = new State(); _conn.isChanged = true; GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); } }
private void NewSync() { lock (_lock) { if (ClientCommands.isConnected(_conn.MachineName) == false) { return; } if (_conn.isConfirmed == false) { _conn.isConfirmed = ClientCommands.isConfirmed(_conn); _conn.isPaused = false; ServerCommands.SaveConnection(_conn); } if (_que.Count > 0) { return; } if (_conn.ReadyForSync()) { if (_conn.ReadOnly) { if (ClientCommands.isChanged(_conn) || _conn.isChanged) { _log.Info("syncing readonly : " + _conn.Name); var state = DeltaProcessor.GetCurrentState(_conn.Path, _conn); _connInfo.TotalFileCount = state.Files.Count; var d = ClientCommands.SyncMeReadonly(state, _conn); if (d != null) { QueueDelta(d); _conn.isChanged = false; } } } else { if (ClientCommands.isChanged(_conn) || _conn.isChanged) { _log.Info("syncing read write : " + _conn.Name); var laststate = DeltaProcessor.GetLastState(_conn); // sync read write var state = DeltaProcessor.GetCurrentState(_conn.Path, _conn); _connInfo.TotalFileCount = state.Files.Count; var delta = DeltaProcessor.ComputeDelta(state, laststate); if (laststate.Files.Count > 0 || laststate.Folders.Count > 0) { delta.FilesChanged = new List <SyncFile>(); delta.FilesAdded = new List <SyncFile>(); } var d = ClientCommands.SyncMeReadWrite(state, delta, _conn); if (d != null) { QueueDelta(d); _conn.isChanged = false; DeltaProcessor.SaveState(_conn, state); } } } } SaveQueue(); } }