Пример #1
0
        public Persistence.Models.Task[] Run(Persistence.Models.Computer computer, TimeSpan?timeout, TimeSpan?pollInterval)
        {
            timeout      = timeout ?? TimeSpan.FromSeconds(90);
            pollInterval = pollInterval ?? TimeSpan.FromSeconds(1 / 4);

            Persistence.Models.Task[] tasks = null;

            var endTime = DateTime.Now.Add(timeout.Value);

            while (true)
            {
                computer.UpdatePing();
                _computerRepository.Update(computer);

                var now   = DateTime.UtcNow;
                var cache = new InMemoryRepositoryModelCache();
                tasks = _taskRepository.ForComputer(computer, now, cache);

                if (tasks.Length > 0 || DateTime.Now >= endTime)
                {
                    foreach (var task in tasks)
                    {
                        task.MarkAsReceived();
                        _taskRepository.Update(task);
                    }

                    return(tasks);
                }

                System.Threading.Thread.Sleep(pollInterval.Value);
            }
        }
Пример #2
0
        public Persistence.Models.Device[] Run(Persistence.Models.Computer computer, Persistence.Models.User user, Persistence.Models.Network network, IDeviceState[] sentDevices)
        {
            computer.UpdatePing();
            _computerRepository.Update(computer);

            network.UpdatePing(computer);
            _networkRepository.Update(network);

            var existingDevices = _deviceRepository.Get(network);

            UpdateDevices(sentDevices, existingDevices, network);

            var devicesToRemove = GetRemovedDevices(sentDevices, existingDevices);

            RemoveDevices(devicesToRemove);

            return(existingDevices);
        }