source: trunk/CrypPlugins/KeySearcher/P2P/Tree/Leaf.cs @ 2428

Last change on this file since 2428 was 2428, checked in by nolte, 11 years ago

Version 5
Added User-Information to KeyValues. (Fully Working)

File size: 4.2 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Numerics;
4using Cryptool.P2P;
5using KeySearcher.Helper;
6using KeySearcher.P2P.Exceptions;
7using KeySearcher.P2P.Storage;
8using KeySearcher.Properties;
9
10namespace KeySearcher.P2P.Tree
11{
12    class Leaf : NodeBase
13    {
14        internal DateTime LastReservationDate;
15        private bool isLeafReserved;
16        private const int RESERVATIONTIMEOUT = 30;
17        private long clientIdentifier = -1;
18
19        public Leaf(StorageHelper storageHelper, KeyQualityHelper keyQualityHelper, Node parentNode, BigInteger id, string distributedJobIdentifier)
20            : base(storageHelper, keyQualityHelper, parentNode, id, id, distributedJobIdentifier)
21        {
22        }
23
24        public void HandleResults(LinkedList<KeySearcher.ValueKey> result)
25        {
26            EnhanceUserInformation(result);
27            UpdateActivity();           
28            UpdateDht();
29        }
30
31        private void EnhanceUserInformation(LinkedList<KeySearcher.ValueKey> result)
32        {
33            var enhancedResults = new LinkedList<KeySearcher.ValueKey>();
34            DateTime chunkstart = DateTime.UtcNow;
35            DateTime defaultstart = DateTime.MinValue;
36            string username = P2PSettings.Default.PeerName;
37            long maschineid = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
38            string maschinename = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetHostName();
39
40            foreach (var valueKey in result)
41            {
42                KeySearcher.ValueKey vk = valueKey;
43
44                if ((username != null) && (!username.Equals("")))
45                {
46                    vk.user = username;
47                    vk.time = chunkstart;
48                    vk.maschid = maschineid;
49                    vk.maschname = maschinename;
50                }
51                else
52                {
53                    vk.user = "Unknown";
54                    vk.time = defaultstart;
55                    vk.maschid = 666;
56                    vk.maschname = "Devil";
57                }
58                enhancedResults.AddLast(vk);
59            }
60            Result = enhancedResults;
61        }
62
63        public BigInteger PatternId()
64        {
65            return From;
66        }
67
68        public override Leaf CalculatableLeaf(bool useReservedNodes)
69        {
70            if (IsCalculated())
71            {
72                throw new AlreadyCalculatedException();
73            }
74
75            return this;
76        }
77
78        public override bool IsCalculated()
79        {
80            return Result.Count > 0;
81        }
82
83        public override void Reset()
84        {
85        }
86
87        public override void UpdateCache()
88        {
89            var dateSomeMinutesBefore = DateTime.UtcNow.Subtract(new TimeSpan(0, RESERVATIONTIMEOUT, 0));
90            isLeafReserved = dateSomeMinutesBefore < LastReservationDate;
91        }
92
93        public bool ReserveLeaf()
94        {
95            LastReservationDate = DateTime.UtcNow;
96            clientIdentifier = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
97            return StorageHelper.UpdateInDht(this).IsSuccessful();
98        }
99
100        public void GiveLeafFree()
101        {
102            StorageHelper.UpdateFromDht((this));         
103            //Only give leaf free, if the reservation is still ours:
104            if (clientIdentifier == Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID())
105            {
106                LastReservationDate = new DateTime(0);
107                clientIdentifier = -1;
108                isLeafReserved = false;
109                StorageHelper.UpdateInDht(this);
110            }
111        }
112
113        public override bool IsReserved()
114        {
115            return isLeafReserved;
116        }
117
118        public override string ToString()
119        {
120            return base.ToString() + Resources.__last_reservation_date_ + LastReservationDate;
121        }
122
123        public long getClientIdentifier()
124        {
125            return clientIdentifier;
126        }
127
128        public void setClientIdentifier(long id)
129        {
130            clientIdentifier = id;
131        }
132    }
133}
Note: See TracBrowser for help on using the repository browser.