using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Hive.Contracts.BusinessObjects; using System.Timers; using HeuristicLab.Hive.Contracts; using System.Collections; using System.Threading; namespace HeuristicLab.Hive.Server.ServerConsole { public class JobDataFetcher { public List PollStates { get; set; } public event EventHandler NewDataAvailable; private System.Timers.Timer timer; public List CachedJobs { get; set; } public double Interval { get { return timer.Interval; } set { timer.Interval = value; } } private int _nrOfEntriesOnPage; public int NrOfEntriesOnPage { get { return _nrOfEntriesOnPage; } set { Console.WriteLine("Setting for " + PollStates + " changed to: " + value); _nrOfEntriesOnPage = value; Thread t = new Thread(new ThreadStart(DoUpdateRun)); t.Start(); } } public int CurrentPage { get; set; } public JobDataFetcher(IEnumerable states, int nrOfEntries) { PollStates = new List(); CachedJobs = new List(); NrOfEntriesOnPage = nrOfEntries; CurrentPage = 0; PollStates.AddRange(states); timer = new System.Timers.Timer(); timer.Interval = 5000; timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed); } public void Start() { timer.Start(); } public void Forward() { CurrentPage++; DoUpdateRun(); } public void Backward() { if (CurrentPage != 0) CurrentPage--; DoUpdateRun(); } private void Timer_Elapsed(object sender, ElapsedEventArgs e) { DoUpdateRun(); } private void DoUpdateRun() { foreach (State stat in PollStates) { ResponseList resList = ServiceLocator.GetJobManager().GetAllJobsWithFilter(stat, CurrentPage * NrOfEntriesOnPage, NrOfEntriesOnPage); if (resList.Success) { if (resList.List.Count == 0) { if (CurrentPage > 0) { CurrentPage--; } } else { CachedJobs = new List(); CachedJobs.AddRange(resList.List); } } } if (NewDataAvailable != null) NewDataAvailable(this, new EventArgs()); } } }