Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
        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();
            }
        }