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

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

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

File size: 5.9 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Cryptool.PluginBase;
6using System.ComponentModel;
7using System.Collections.ObjectModel;
8
9namespace KeySearcher
10{
11    public class KeySearcherSettings : ISettings
12    {
13        private KeySearcher keysearcher;
14        private int coresUsed;
15        private const string GroupPeerToPeer = "Peer-to-Peer network";
16
17        public KeySearcherSettings(KeySearcher ks)
18        {
19            keysearcher = ks;
20            CoresAvailable.Clear();
21            for (int i = 0; i < Environment.ProcessorCount; i++)
22                CoresAvailable.Add((i + 1).ToString());
23            CoresUsed = Environment.ProcessorCount - 1;
24
25            distributedJobIdentifier = Guid.NewGuid().ToString();
26        }
27
28        private string key;
29        [TaskPane("Key", "Key pattern used to bruteforce", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
30        public String Key
31        {
32            get
33            {
34                return key;
35            }
36            set
37            {
38                key = value;
39                OnPropertyChanged("Key");
40                if (!(keysearcher.Pattern != null && keysearcher.Pattern.testWildcardKey(value)))
41                    keysearcher.GuiLogMessage("Wrong key pattern!", NotificationLevel.Error);
42                HasChanges = true;
43            }
44        }
45
46        [TaskPane("Reset", "Reset Key", null, 2, false, DisplayLevel.Beginner, ControlType.Button)]
47        public void Reset()
48        {
49            Key = keysearcher.Pattern.giveInputPattern();
50        }
51       
52        [TaskPane("CoresUsed", "Choose how many cores should be used", null, 3, false, DisplayLevel.Beginner, ControlType.DynamicComboBox, new string[] { "CoresAvailable" })]
53        public int CoresUsed
54        {
55            get { return this.coresUsed; }
56            set
57            {
58                if (value != this.coresUsed)
59                {
60                    this.coresUsed = value;
61                    OnPropertyChanged("CoresUsed");
62                    HasChanges = true;
63                }
64            }
65        }
66
67        private bool usePeerToPeer;
68        [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,
69            ControlType.CheckBox)]
70        public bool UsePeerToPeer
71        {
72            get { return usePeerToPeer; }
73            set
74            {
75                if (value != usePeerToPeer)
76                {
77                    usePeerToPeer = value;
78                    OnPropertyChanged("UsePeerToPeer");
79                    HasChanges = true;
80                }
81            }
82        }
83
84        private bool autoconnectPeerToPeer;
85        [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,
86            ControlType.CheckBox)]
87        public bool AutoconnectPeerToPeer
88        {
89            get { return autoconnectPeerToPeer; }
90            set
91            {
92                if (value != autoconnectPeerToPeer)
93                {
94                    autoconnectPeerToPeer = value;
95                    OnPropertyChanged("AutoconnectPeerToPeer");
96                    HasChanges = true;
97                }
98            }
99        }
100
101        private string distributedJobIdentifier;
102        [TaskPane("Job identifier", "Arbitrary description, that allows other peers to join this calculation.", GroupPeerToPeer, 2, false, DisplayLevel.Professional,
103            ControlType.TextBox)]
104        public string DistributedJobIdentifier
105        {
106            get { return distributedJobIdentifier; }
107            set
108            {
109                if (value != distributedJobIdentifier)
110                {
111                    distributedJobIdentifier = value;
112                    OnPropertyChanged("DistributedJobIdentifier");
113                    HasChanges = true;
114                }
115            }
116        }
117
118        private int chunkSize;
119        [TaskPane("Chunk size", "Amount of keys (x 10.000), that will be calculated by one peer at a time.", GroupPeerToPeer, 3, false, DisplayLevel.Professional,
120            ControlType.NumericUpDown, ValidationType.RangeInteger, 250, int.MaxValue)]
121        public int ChunkSize
122        {
123            get { return chunkSize; }
124            set
125            {
126                if (value != chunkSize)
127                {
128                    chunkSize = value;
129                    OnPropertyChanged("ChunkSize");
130                    HasChanges = true;
131                }
132            }
133        }
134
135        private ObservableCollection<string> coresAvailable = new ObservableCollection<string>();
136        public ObservableCollection<string> CoresAvailable
137        {
138            get { return coresAvailable; }
139            set
140            {
141                if (value != coresAvailable)
142                {
143                    coresAvailable = value;
144                }
145                OnPropertyChanged("CoresAvailable");
146            }
147        }
148
149        #region ISettings Members
150
151        private bool hasChanges;
152
153        public bool HasChanges
154        {
155            get
156            {
157                return hasChanges;
158            }
159            set
160            {
161                hasChanges = value;
162                OnPropertyChanged("HasChanges");
163            }
164        }
165
166        #endregion
167
168        #region INotifyPropertyChanged Members
169
170        public event PropertyChangedEventHandler PropertyChanged;
171
172        private void OnPropertyChanged(string p)
173        {
174            if (PropertyChanged != null)
175            {
176                PropertyChanged(this, new PropertyChangedEventArgs(p));
177            }
178        }
179
180        #endregion
181    }
182}
Note: See TracBrowser for help on using the repository browser.