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

Last change on this file since 2038 was 2038, checked in by Sven Rech, 11 years ago

keysearcher gives log information about rereservation and freeing of pattern now.

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.