source: trunk/CrypPlugins/KeySearcher/KeySearcherSettings.cs @ 1727

Last change on this file since 1727 was 1727, checked in by Paul Lelgemann, 11 years ago

+ P2PEditor can display the status of jobs, if available; Participating displays overlay while loading workspace data
+ KeySearcher can upload status for P2PEditor display

File size: 6.9 KB
Line 
1using System;
2using System.Numerics;
3using System.Windows;
4using Cryptool.P2P;
5using Cryptool.PluginBase;
6using System.ComponentModel;
7using System.Collections.ObjectModel;
8using KeySearcher.KeyPattern;
9using KeySearcher.P2P.Storage;
10
11namespace KeySearcher
12{
13    public class KeySearcherSettings : ISettings
14    {
15        private readonly KeySearcher keysearcher;
16        private int coresUsed;
17        private const string GroupPeerToPeer = "Peer-to-Peer network";
18
19        public KeySearcherSettings(KeySearcher ks)
20        {
21            keysearcher = ks;
22            CoresAvailable.Clear();
23            for (int i = 0; i < Environment.ProcessorCount; i++)
24                CoresAvailable.Add((i + 1).ToString());
25            CoresUsed = Environment.ProcessorCount - 1;
26
27            chunkSize = 21;
28        }
29
30        private string key;
31        [TaskPane("Key", "Key pattern used to bruteforce", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
32        public String Key
33        {
34            get
35            {
36                return key;
37            }
38            set
39            {
40                key = value;
41                OnPropertyChanged("Key");
42                if (!(keysearcher.Pattern != null && keysearcher.Pattern.testWildcardKey(value)))
43                    keysearcher.GuiLogMessage("Wrong key pattern!", NotificationLevel.Error);
44                HasChanges = true;
45            }
46        }
47
48        [TaskPane("Reset", "Reset Key", null, 2, false, DisplayLevel.Beginner, ControlType.Button)]
49        public void Reset()
50        {
51            Key = keysearcher.Pattern.giveInputPattern();
52        }
53       
54        [TaskPane("CoresUsed", "Choose how many cores should be used", null, 3, false, DisplayLevel.Beginner, ControlType.DynamicComboBox, new string[] { "CoresAvailable" })]
55        public int CoresUsed
56        {
57            get { return this.coresUsed; }
58            set
59            {
60                if (value != this.coresUsed)
61                {
62                    this.coresUsed = value;
63                    OnPropertyChanged("CoresUsed");
64                    HasChanges = true;
65                }
66            }
67        }
68
69        private bool usePeerToPeer;
70        [TaskPane("Use Peer-to-Peer network", "Distributes the operation on available peers by using the built-in peer-to-peer network.", GroupPeerToPeer, 0, false, DisplayLevel.Beginner,
71            ControlType.CheckBox)]
72        public bool UsePeerToPeer
73        {
74            get { return usePeerToPeer; }
75            set
76            {
77                if (value != usePeerToPeer)
78                {
79                    usePeerToPeer = value;
80                    OnPropertyChanged("UsePeerToPeer");
81                    HasChanges = true;
82                }
83            }
84        }
85
86        private bool autoconnectPeerToPeer;
87        [TaskPane("Autoconnect network", "Establish a connection to the network if the workspace is started without the background connection being active.", GroupPeerToPeer, 1, false, DisplayLevel.Beginner,
88            ControlType.CheckBox)]
89        public bool AutoconnectPeerToPeer
90        {
91            get { return autoconnectPeerToPeer; }
92            set
93            {
94                if (value != autoconnectPeerToPeer)
95                {
96                    autoconnectPeerToPeer = value;
97                    OnPropertyChanged("AutoconnectPeerToPeer");
98                    HasChanges = true;
99                }
100            }
101        }
102
103        private bool verbosePeerToPeerDisplay;
104        [TaskPane("Display verbose information", "Display verbose information about network requests in the quick watch.", GroupPeerToPeer, 2, true, DisplayLevel.Beginner,
105            ControlType.CheckBox)]
106        public bool VerbosePeerToPeerDisplay
107        {
108            get { return verbosePeerToPeerDisplay; }
109            set
110            {
111                if (value != verbosePeerToPeerDisplay)
112                {
113                    verbosePeerToPeerDisplay = value;
114                    OnPropertyChanged("VerbosePeerToPeerDisplay");
115                    HasChanges = true;
116                }
117            }
118        }
119
120        private int chunkSize;
121        [TaskPane("Chunk size", "Amount of keys, that will be calculated by one peer at a time. This value is the exponent of the power of two used for the chunk size.", GroupPeerToPeer, 3, false, DisplayLevel.Professional,
122            ControlType.NumericUpDown, ValidationType.RangeInteger, 1, 1000)]
123        public int ChunkSize
124        {
125            get { return chunkSize; }
126            set
127            {
128                if (value != chunkSize)
129                {
130                    chunkSize = value;
131                    OnPropertyChanged("ChunkSize");
132                    HasChanges = true;
133                }
134            }
135        }
136
137        [TaskPane("Copy status key", "Copy status key to clipboard. The key can than be used to upload it together with the job using the P2PEditor.", GroupPeerToPeer, 4, true, DisplayLevel.Professional, ControlType.Button)]
138        public void StatusKeyButton()
139        {
140            if (!keysearcher.IsKeySearcherRunning)
141            {
142                keysearcher.GuiLogMessage("KeySearcher must be running to copy the status key.", NotificationLevel.Error);
143                return;
144            }
145
146            var generator = new StorageKeyGenerator(keysearcher, this);
147            var statusKey = generator.GenerateStatusKey();
148
149            Clipboard.SetDataObject(statusKey, true);
150            keysearcher.GuiLogMessage("Status key '" + statusKey + "' has been copied to clipboard.",
151                                      NotificationLevel.Info);
152        }
153
154        private ObservableCollection<string> coresAvailable = new ObservableCollection<string>();
155        public ObservableCollection<string> CoresAvailable
156        {
157            get { return coresAvailable; }
158            set
159            {
160                if (value != coresAvailable)
161                {
162                    coresAvailable = value;
163                }
164                OnPropertyChanged("CoresAvailable");
165            }
166        }
167
168        #region ISettings Members
169
170        private bool hasChanges;
171
172        public bool HasChanges
173        {
174            get
175            {
176                return hasChanges;
177            }
178            set
179            {
180                hasChanges = value;
181                OnPropertyChanged("HasChanges");
182            }
183        }
184
185        #endregion
186
187        #region INotifyPropertyChanged Members
188
189        public event PropertyChangedEventHandler PropertyChanged;
190
191        private void OnPropertyChanged(string p)
192        {
193            if (PropertyChanged != null)
194            {
195                PropertyChanged(this, new PropertyChangedEventArgs(p));
196            }
197        }
198
199        #endregion
200    }
201}
Note: See TracBrowser for help on using the repository browser.