Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobDataFetcher.cs @ 4121

Last change on this file since 4121 was 4121, checked in by cneumuel, 14 years ago

Stabilization of Hive, Improvement HiveExperiment GUI (#1115)

File size: 3.0 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using HeuristicLab.Hive.Contracts.BusinessObjects;
6using System.Timers;
7using HeuristicLab.Hive.Contracts;
8using System.Collections;
9using System.Threading;
10using HeuristicLab.Hive.Contracts.Interfaces;
11
12namespace HeuristicLab.Hive.Server.ServerConsole {
13  public class JobDataFetcher {
14    private List<State> pollStates;
15
16    public IEnumerable<State> PollStates {
17      get { return pollStates; }
18    }
19
20    public event EventHandler NewDataAvailable;
21
22    private System.Timers.Timer timer;
23
24    private static object locker = new object();
25
26    public List<JobDto> CachedJobs { get; set; }
27
28    private IJobManager jobManager;
29
30    public double Interval {
31      get { return timer.Interval; }
32      set { timer.Interval = value; }
33    }
34
35    private int _nrOfEntriesOnPage;
36    public int NrOfEntriesOnPage {
37      get {
38        return _nrOfEntriesOnPage;
39      }
40      set {
41        Console.WriteLine("Setting for " + PollStates + " changed to: " + value);
42        _nrOfEntriesOnPage = value;
43        Thread t = new Thread(new ThreadStart(DoUpdateRun));
44        t.Start();
45      }
46    }
47    public int CurrentPage { get; set; }
48
49    public JobDataFetcher(IEnumerable<State> states, int nrOfEntries) {
50      pollStates = new List<State>();
51      CachedJobs = new List<JobDto>();
52      NrOfEntriesOnPage = nrOfEntries;
53      CurrentPage = 0;
54      pollStates.AddRange(states);
55      jobManager = ServiceLocator.GetJobManager();
56      timer = new System.Timers.Timer();
57      timer.Interval = 5000;
58      timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
59    }
60
61    public void Start() {
62      timer.Start();
63    }
64
65    public void Forward() {
66      CurrentPage++;
67      DoUpdateRun();
68    }
69    public void Backward() {
70      if (CurrentPage != 0)
71        CurrentPage--;
72      DoUpdateRun();
73    }
74
75    private void Timer_Elapsed(object sender, ElapsedEventArgs e) {
76      DoUpdateRun();
77    }
78
79    private void DoUpdateRun() {
80      // [chn] Exception occured here: PollStates enumeration changed!
81      // todo: make access to PollStates thread-safe!
82      // * added lock on locker -> didn't help
83      // * made public property PollStates an IEnumerable to be immutable -> didn't help
84      // * using for loop
85
86      State[] pollStatesCopy = PollStates.ToArray();
87      for (int i = 0; i < pollStatesCopy.Length; i++) {
88        ResponseList<JobDto> resList = jobManager.GetAllJobsWithFilter(pollStatesCopy[i], CurrentPage * NrOfEntriesOnPage, NrOfEntriesOnPage);
89        if (resList.Success) {
90          if (resList.List.Count == 0) {
91            if (CurrentPage > 0) {
92              CurrentPage--;
93            }
94          } else {
95            CachedJobs = new List<JobDto>();
96            CachedJobs.AddRange(resList.List);
97          }
98        }
99      }
100      if (NewDataAvailable != null) {
101        NewDataAvailable(this, new EventArgs());
102      }
103    }
104  }
105}
Note: See TracBrowser for help on using the repository browser.