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

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

o Updated Peers@Play libraries
o Work on the distributed KeySearcher

File size: 7.0 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Numerics;
5using System.Text;
6using Cryptool.PluginBase;
7using System.ComponentModel;
8using System.Collections.ObjectModel;
9
10namespace KeySearcher
11{
12    public class KeySearcherSettings : ISettings
13    {
14        private KeySearcher keysearcher;
15        private int coresUsed;
16        private const string GroupPeerToPeer = "Peer-to-Peer network";
17
18        public KeySearcherSettings(KeySearcher ks)
19        {
20            keysearcher = ks;
21            CoresAvailable.Clear();
22            for (int i = 0; i < Environment.ProcessorCount; i++)
23                CoresAvailable.Add((i + 1).ToString());
24            CoresUsed = Environment.ProcessorCount - 1;
25
26            distributedJobIdentifier = Guid.NewGuid().ToString();
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                OnPropertyChanged("TotalAmountOfChunks");
46            }
47        }
48
49        [TaskPane("Reset", "Reset Key", null, 2, false, DisplayLevel.Beginner, ControlType.Button)]
50        public void Reset()
51        {
52            Key = keysearcher.Pattern.giveInputPattern();
53        }
54       
55        [TaskPane("CoresUsed", "Choose how many cores should be used", null, 3, false, DisplayLevel.Beginner, ControlType.DynamicComboBox, new string[] { "CoresAvailable" })]
56        public int CoresUsed
57        {
58            get { return this.coresUsed; }
59            set
60            {
61                if (value != this.coresUsed)
62                {
63                    this.coresUsed = value;
64                    OnPropertyChanged("CoresUsed");
65                    HasChanges = true;
66                }
67            }
68        }
69
70        private bool usePeerToPeer;
71        [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,
72            ControlType.CheckBox)]
73        public bool UsePeerToPeer
74        {
75            get { return usePeerToPeer; }
76            set
77            {
78                if (value != usePeerToPeer)
79                {
80                    usePeerToPeer = value;
81                    OnPropertyChanged("UsePeerToPeer");
82                    HasChanges = true;
83                }
84            }
85        }
86
87        private bool autoconnectPeerToPeer;
88        [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,
89            ControlType.CheckBox)]
90        public bool AutoconnectPeerToPeer
91        {
92            get { return autoconnectPeerToPeer; }
93            set
94            {
95                if (value != autoconnectPeerToPeer)
96                {
97                    autoconnectPeerToPeer = value;
98                    OnPropertyChanged("AutoconnectPeerToPeer");
99                    HasChanges = true;
100                }
101            }
102        }
103
104        private string distributedJobIdentifier;
105        [TaskPane("Job identifier", "Arbitrary description, that allows other peers to join this calculation.", GroupPeerToPeer, 2, false, DisplayLevel.Professional,
106            ControlType.TextBox)]
107        public string DistributedJobIdentifier
108        {
109            get { return distributedJobIdentifier; }
110            set
111            {
112                if (value != distributedJobIdentifier)
113                {
114                    distributedJobIdentifier = value;
115                    OnPropertyChanged("DistributedJobIdentifier");
116                    HasChanges = true;
117                }
118            }
119        }
120
121        private int chunkSize;
122        [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,
123            ControlType.NumericUpDown, ValidationType.RangeInteger, 1, 1000)]
124        public int ChunkSize
125        {
126            get { return chunkSize; }
127            set
128            {
129                if (value != chunkSize)
130                {
131                    chunkSize = value;
132                    OnPropertyChanged("ChunkSize");
133                    OnPropertyChanged("TotalAmountOfChunks");
134                    HasChanges = true;
135                }
136            }
137        }
138
139        [TaskPane("Amount of chunks", "Total number of chunks that must be calculated with the given chunk size.", GroupPeerToPeer, 4, false, DisplayLevel.Professional,
140            ControlType.TextBox)]
141        public double TotalAmountOfChunks
142        {
143            get {
144                if (keysearcher.Pattern == null || !keysearcher.Pattern.testWildcardKey(key) || ChunkSize == 0)
145                {
146                    return 0;
147                }
148
149                var keyPattern = new KeyPattern(keysearcher.ControlMaster.getKeyPattern());
150                keyPattern.WildcardKey = key;
151                var keyPatternPool = new KeyPatternPool(keyPattern, new BigInteger(Math.Pow(2, ChunkSize)));
152                return (double) keyPatternPool.Length;
153            }
154            set
155            {
156                OnPropertyChanged("TotalAmountOfChunks");
157            }
158        }
159
160        private ObservableCollection<string> coresAvailable = new ObservableCollection<string>();
161        public ObservableCollection<string> CoresAvailable
162        {
163            get { return coresAvailable; }
164            set
165            {
166                if (value != coresAvailable)
167                {
168                    coresAvailable = value;
169                }
170                OnPropertyChanged("CoresAvailable");
171            }
172        }
173
174        #region ISettings Members
175
176        private bool hasChanges;
177
178        public bool HasChanges
179        {
180            get
181            {
182                return hasChanges;
183            }
184            set
185            {
186                hasChanges = value;
187                OnPropertyChanged("HasChanges");
188            }
189        }
190
191        #endregion
192
193        #region INotifyPropertyChanged Members
194
195        public event PropertyChangedEventHandler PropertyChanged;
196
197        private void OnPropertyChanged(string p)
198        {
199            if (PropertyChanged != null)
200            {
201                PropertyChanged(this, new PropertyChangedEventArgs(p));
202            }
203        }
204
205        #endregion
206    }
207}
Note: See TracBrowser for help on using the repository browser.