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

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

Full working Versionnumber code added.
INFO: THE UNCOMMENTED UPDATE WILL BE COMITTED THURSDAY 8PM (20Uhr :P )
PLEASE UPDATE YOUR SVN AFTERWARDS!

File size: 3.0 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Numerics;
4using KeySearcher.Helper;
5using KeySearcher.P2P.Exceptions;
6using KeySearcher.P2P.Storage;
7
8namespace KeySearcher.P2P.Tree
9{
10    class Leaf : NodeBase
11    {
12        internal DateTime LastReservationDate;
13        private bool isLeafReserved;
14        private const int RESERVATIONTIMEOUT = 30;
15        private long clientIdentifier = -1;
16
17        public Leaf(StorageHelper storageHelper, KeyQualityHelper keyQualityHelper, Node parentNode, BigInteger id, string distributedJobIdentifier)
18            : base(storageHelper, keyQualityHelper, parentNode, id, id, distributedJobIdentifier)
19        {
20        }
21
22        public void HandleResults(LinkedList<KeySearcher.ValueKey> result)
23        {
24            Result = result;
25            UpdateDht();
26        }
27
28        public BigInteger PatternId()
29        {
30            return From;
31        }
32
33        public override Leaf CalculatableLeaf(bool useReservedNodes)
34        {
35            if (IsCalculated())
36            {
37                throw new AlreadyCalculatedException();
38            }
39
40            return this;
41        }
42
43        public override bool IsCalculated()
44        {
45            return Result.Count > 0;
46        }
47
48        public override void Reset()
49        {
50        }
51
52        public override void UpdateCache()
53        {
54            var dateSomeMinutesBefore = DateTime.UtcNow.Subtract(new TimeSpan(0, RESERVATIONTIMEOUT, 0));
55            isLeafReserved = dateSomeMinutesBefore < LastReservationDate;
56        }
57
58        public bool ReserveLeaf()
59        {
60            LastReservationDate = DateTime.UtcNow;
61            clientIdentifier = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
62            return StorageHelper.UpdateInDht(this).IsSuccessful();
63        }
64
65        public void GiveLeafFree()
66        {
67            try
68            {
69                StorageHelper.UpdateFromDht((this));
70            }
71            catch (KeySearcherStopException)
72            {
73                throw new KeySearcherStopException();
74            }         
75            //Only give leaf free, if the reservation is still ours:
76            if (clientIdentifier == Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID())
77            {
78                LastReservationDate = new DateTime(0);
79                clientIdentifier = -1;
80                isLeafReserved = false;
81                StorageHelper.UpdateInDht(this);
82            }
83        }
84
85        public override bool IsReserved()
86        {
87            return isLeafReserved;
88        }
89
90        public override string ToString()
91        {
92            return base.ToString() + ", last reservation date " + LastReservationDate;
93        }
94
95        public long getClientIdentifier()
96        {
97            return clientIdentifier;
98        }
99
100        public void setClientIdentifier(long id)
101        {
102            clientIdentifier = id;
103        }
104    }
105}
Note: See TracBrowser for help on using the repository browser.