source: trunk/CrypPlugins/P2PEditor/GUI/Controls/JobDisplay.xaml.cs @ 1634

Last change on this file since 1634 was 1634, checked in by Paul Lelgemann, 12 years ago

o Fixed KeySearcher progress display
+ Work on the distributed KeySearcher part

File size: 5.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Timers;
5using System.Windows;
6using System.Windows.Input;
7using System.Windows.Threading;
8using Cryptool.P2P;
9using Cryptool.P2PEditor.Distributed;
10using Cryptool.P2PEditor.Worker;
11using Cryptool.PluginBase;
12
13namespace Cryptool.P2PEditor.GUI.Controls
14{
15    /// <summary>
16    /// Interaction logic for JobDisplay.xaml
17    /// </summary>
18    public partial class JobDisplay
19    {
20        public static DependencyProperty JobsProperty = DependencyProperty.Register("Jobs",
21                                                                                    typeof (List<DistributedJob>),
22                                                                                    typeof (JobDisplay));
23
24        private Timer _refreshListTimer;
25
26        public JobDisplay()
27        {
28            InitializeComponent();
29            UpdateRefreshTimerSettings(P2PManager.IsConnected);
30
31            P2PManager.ConnectionManager.OnP2PConnectionStateChangeOccurred += P2PManager_OnP2PConnectionStateChangeOccurred;
32        }
33
34        void P2PManager_OnP2PConnectionStateChangeOccurred(object sender, bool newState)
35        {
36            UpdateRefreshTimerSettings(newState);
37        }
38
39        private void UpdateRefreshTimerSettings(bool isConnected)
40        {
41            if (P2PSettings.Default.DistributedJobListRefreshInterval == 0)
42            {
43                return;
44            }
45
46            if (_refreshListTimer == null)
47            {
48                _refreshListTimer = new Timer(P2PSettings.Default.DistributedJobListRefreshInterval * 1000);
49                _refreshListTimer.Elapsed += RefreshListTimerElapsed;
50            }
51
52            if (isConnected)
53            {
54                _refreshListTimer.Start();
55            }
56            else 
57            {
58                _refreshListTimer.Stop();
59            }
60        }
61
62        void RefreshListTimerElapsed(object sender, ElapsedEventArgs e)
63        {
64            if (!IsVisible)
65            {
66                return;
67            }
68
69            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateJobList));
70        }
71
72        public List<DistributedJob> Jobs
73        {
74            get { return (List<DistributedJob>) GetValue(JobsProperty); }
75            set { SetValue(JobsProperty, value); }
76        }
77
78        private void RefreshButton_Click(object sender, RoutedEventArgs e)
79        {
80            UpdateJobList();
81        }
82
83        public void UpdateJobList()
84        {
85            if (!P2PManager.IsConnected)
86            {
87                return;
88            }
89
90            P2PEditor.GuiLogMessage("Requesting new job list...", NotificationLevel.Debug);
91            var updateWorker = new JobListUpdateWorker(JobListManager);
92            updateWorker.RunWorkerCompleted += HandleRefreshedJobList;
93            updateWorker.RunWorkerAsync();
94        }
95
96        void HandleRefreshedJobList(object sender, RunWorkerCompletedEventArgs e)
97        {
98            var updateWorker = sender as JobListUpdateWorker;
99            if (updateWorker == null)
100            {
101                return;
102            }
103
104            P2PEditor.GuiLogMessage("Received new job list...", NotificationLevel.Debug);
105            Jobs = updateWorker.RefreshedJobList;
106            Jobs.Reverse();
107        }
108
109        private void ParticipateButton_Click(object sender, RoutedEventArgs e)
110        {
111            ParticipateInSelectedJob();
112        }
113
114        private void ParticipateItemHandler(object sender, MouseButtonEventArgs e)
115        {
116            ParticipateInSelectedJob();
117        }
118
119        private void ParticipateInSelectedJob()
120        {
121            var jobToParticipateIn = (DistributedJob) JobListBox.SelectedItem;
122
123            if (jobToParticipateIn == null)
124            {
125                return;
126            }
127
128            P2PEditor.GuiLogMessage(
129                string.Format("Participating in job {0} ({1}).", jobToParticipateIn.JobName, jobToParticipateIn.JobGuid),
130                NotificationLevel.Info);
131            new JobParticipationWorker(P2PEditor, JobListManager, jobToParticipateIn, Dispatcher).RunWorkerAsync();
132        }
133
134        private void DeleteButton_Click(object sender, RoutedEventArgs e)
135        {
136            DeleteSelectedJob();
137        }
138
139        private void JobListBox_KeyUp(object sender, KeyEventArgs e)
140        {
141            switch (e.Key)
142            {
143                case Key.Enter:
144                    ParticipateInSelectedJob();
145                    break;
146                case Key.Delete:
147                    DeleteSelectedJob();
148                    break;
149            }
150           
151        }
152
153        private void DeleteSelectedJob()
154        {
155            var jobToDelete = (DistributedJob)JobListBox.SelectedItem;
156
157            if (jobToDelete == null || jobToDelete.JobOwner != P2PSettings.Default.PeerName)
158            {
159                return;
160            }
161
162            P2PEditor.GuiLogMessage(
163                string.Format("Deleting job {0} ({1}).", jobToDelete.JobName, jobToDelete.JobGuid),
164                NotificationLevel.Info);
165
166            var backgroundCreationWorker = new JobDeletionWorker(JobListManager, jobToDelete);
167            backgroundCreationWorker.RunWorkerCompleted += BackgroundDeletionWorkerCompleted;
168            backgroundCreationWorker.RunWorkerAsync();
169        }
170
171        private void BackgroundDeletionWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
172        {
173            P2PEditorPresentation.ShowActiveJobs();
174        }
175    }
176}
Note: See TracBrowser for help on using the repository browser.