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); } }
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); }