source: trunk/CrypPlugins/P2PEditor/Distributed/DistributedJob.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: 4.4 KB
Line 
1using System;
2using System.ComponentModel;
3using System.IO;
4using Cryptool.P2P;
5
6namespace Cryptool.P2PEditor.Distributed
7{
8    public class DistributedJob : INotifyPropertyChanged
9    {
10        public DistributedJob()
11        {
12            Guid = Guid.NewGuid();
13            Owner = P2PSettings.Default.PeerName;
14            CreateDate = DateTime.UtcNow;
15        }
16
17        public Guid Guid { get; set; }
18
19        public String Name { get; set; }
20
21        public String Description { get; set; }
22
23        public String Owner { get; set; }
24
25        public DateTime CreateDate { get; set; }
26
27        public String FileName { get; set; }
28
29        private DistributedJobStatus status;
30        public DistributedJobStatus Status
31        {
32            get { return status; }
33            set
34            {
35                if (value == status) return;
36                status = value;
37                OnPropertyChanged("Status");
38            }
39        }
40
41        private int downloads;
42        public int Downloads
43        {
44            get { return downloads; }
45            set
46            {
47                if (value == downloads) return;
48                downloads = value;
49                OnPropertyChanged("Downloads");
50            }
51        }
52
53        private DateTime lastDownload;
54        public DateTime LastDownload
55        {
56            get { return lastDownload; }
57            set
58            {
59                if (value == lastDownload) return;
60                lastDownload = value;
61                OnPropertyChanged("LastDownload");
62            }
63        }
64
65        private String localFilePath;
66        public String LocalFilePath
67        {
68            get { return localFilePath; }
69            set
70            {
71                if (value == localFilePath) return;
72                localFilePath = value;
73                FileName = Path.GetFileName(localFilePath);
74                OnPropertyChanged("LocalFilePath");
75            }
76        }
77
78        private String statusKey;
79        public String StatusKey
80        {
81            get { return statusKey; }
82            set
83            {
84                if (value == statusKey) return;
85                statusKey = value;
86                OnPropertyChanged("StatusKey");
87            }
88        }
89
90        public void ConvertRawWorkspaceToLocalFile(byte[] rawWorkspaceData)
91        {
92            var workspacePath = P2PSettings.Default.WorkspacePath;
93            if (String.IsNullOrEmpty(workspacePath) || !Directory.Exists(workspacePath))
94            {
95                throw new ArgumentOutOfRangeException(workspacePath, "Configured local workspace directory is null, empty or does not exist.");
96            }
97
98            // Avoid overwriting previous versions of this workspace or workspaces with common names by adding an integer prefix
99            var originalFileName = FileName;
100            LocalFilePath = Path.Combine(workspacePath, Owner + "_" + originalFileName);
101            var counter = 0;
102            while (File.Exists(LocalFilePath))
103            {
104                LocalFilePath = Path.Combine(workspacePath, counter++ + "_" + Owner + "_" + originalFileName);
105            }
106
107            if (rawWorkspaceData == null || rawWorkspaceData.Length == 0)
108            {
109                throw new NotSupportedException("Workspace data could not be fetched using Peer-to-Peer system.");
110            }
111
112            File.WriteAllBytes(LocalFilePath, rawWorkspaceData);
113        }
114
115        #region INotifyPropertyChanged Members
116
117        public event PropertyChangedEventHandler PropertyChanged;
118
119        private void OnPropertyChanged(string propertyName)
120        {
121            if (PropertyChanged != null)
122                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
123        }
124
125        #endregion
126
127        #region Equals and HashCode
128
129        public override bool Equals(object obj)
130        {
131            if (obj == null || GetType() != obj.GetType())
132            {
133                return false;
134            }
135
136            return Equals((DistributedJob) obj);
137        }
138
139        public bool Equals(DistributedJob obj)
140        {
141            if (obj == null)
142            {
143                return false;
144            }
145
146            return obj.Guid == Guid;
147        }
148
149        public override int GetHashCode()
150        {
151            return Guid.GetHashCode();
152        }
153
154        #endregion
155    }
156}
Note: See TracBrowser for help on using the repository browser.