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

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

Versionnumbers final version.
Use of the versionnumber starts this evening (7-8 PM).

File size: 2.8 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            StorageHelper.UpdateFromDht((this));         
68            //Only give leaf free, if the reservation is still ours:
69            if (clientIdentifier == Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID())
70            {
71                LastReservationDate = new DateTime(0);
72                clientIdentifier = -1;
73                isLeafReserved = false;
74                StorageHelper.UpdateInDht(this);
75            }
76        }
77
78        public override bool IsReserved()
79        {
80            return isLeafReserved;
81        }
82
83        public override string ToString()
84        {
85            return base.ToString() + ", last reservation date " + LastReservationDate;
86        }
87
88        public long getClientIdentifier()
89        {
90            return clientIdentifier;
91        }
92
93        public void setClientIdentifier(long id)
94        {
95            clientIdentifier = id;
96        }
97    }
98}
Note: See TracBrowser for help on using the repository browser.