source: trunk/CrypPlugins/P2PEditor/Distributed/DistributedJob.cs @ 1703

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

o P2PEditor: fix for local filename problem
+ KeySearcher: debug log entry for sent/received bytes

File size: 3.2 KB
Line 
1using System;
2using System.ComponentModel;
3using System.IO;
4using Cryptool.P2P;
5
6namespace Cryptool.P2PEditor.Distributed
7{
8    [Serializable]
9    public class DistributedJob : INotifyPropertyChanged
10    {
11        [NonSerialized]
12        private String localFilePath;
13
14        public DistributedJob()
15        {
16            JobGuid = Guid.NewGuid();
17            JobOwner = P2PSettings.Default.PeerName;
18            JobDate = DateTime.Now;
19        }
20
21        public Guid JobGuid { get; private set; }
22
23        public String JobName { get; set; }
24
25        public String JobDescription { get; set; }
26
27        public String JobOwner { get; set; }
28
29        public DateTime JobDate { get; set; }
30
31        public String FileName { get; private set; }
32
33        public String LocalFilePath
34        {
35            get { return localFilePath; }
36            set
37            {
38                if (value == localFilePath) return;
39                localFilePath = value;
40                FileName = Path.GetFileName(localFilePath);
41                OnPropertyChanged("LocalFilePath");
42            }
43        }
44
45        #region INotifyPropertyChanged Members
46
47        [field: NonSerialized]
48        public event PropertyChangedEventHandler PropertyChanged;
49
50        #endregion
51
52        public void ConvertRawWorkspaceToLocalFile(byte[] rawWorkspaceData)
53        {
54            string workspacePath = P2PSettings.Default.WorkspacePath;
55            if (String.IsNullOrEmpty(workspacePath) || !Directory.Exists(workspacePath))
56            {
57                throw new ArgumentOutOfRangeException(workspacePath, "Configured local workspace directory is null, empty or does not exist.");
58            }
59
60            // Avoid overwriting previous versions of this workspace or workspaces with common names by adding an integer prefix
61            var originalFileName = FileName;
62            LocalFilePath = Path.Combine(workspacePath, JobOwner + "_" + originalFileName);
63            var counter = 0;
64            while (File.Exists(LocalFilePath))
65            {
66                LocalFilePath = Path.Combine(workspacePath, counter++ + "_" + JobOwner + "_" + originalFileName);
67            }
68
69            if (rawWorkspaceData == null || rawWorkspaceData.Length == 0)
70            {
71                throw new NotSupportedException("Workspace data could not be fetched using Peer-to-Peer system.");
72            }
73
74            File.WriteAllBytes(LocalFilePath, rawWorkspaceData);
75        }
76
77        private void OnPropertyChanged(string propertyName)
78        {
79            if (PropertyChanged != null)
80                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
81        }
82
83        public override bool Equals(object obj)
84        {
85            if (obj == null || GetType() != obj.GetType())
86            {
87                return false;
88            }
89
90            return Equals((DistributedJob) obj);
91        }
92
93        public bool Equals(DistributedJob obj)
94        {
95            if (obj == null)
96            {
97                return false;
98            }
99
100            return obj.JobGuid == JobGuid;
101        }
102
103        public override int GetHashCode()
104        {
105            return JobGuid.GetHashCode();
106        }
107    }
108}
Note: See TracBrowser for help on using the repository browser.