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

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

Updated the Keysearcher DHT by adding a Client Identifier

File size: 2.5 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        //--------------------------------------------------------------------------------------------
16        private long clientIdentifier = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
17        //--------------------------------------------------------------------------------------------
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            Result = result;
27            UpdateDht();
28        }
29
30        public BigInteger PatternId()
31        {
32            return From;
33        }
34
35        public override Leaf CalculatableLeaf(bool useReservedNodes)
36        {
37            if (IsCalculated())
38            {
39                throw new AlreadyCalculatedException();
40            }
41
42            return this;
43        }
44
45        public override bool IsCalculated()
46        {
47            return Result.Count > 0;
48        }
49
50        public override void Reset()
51        {
52        }
53
54        public override void UpdateCache()
55        {
56            var dateSomeMinutesBefore = DateTime.UtcNow.Subtract(new TimeSpan(0, RESERVATIONTIMEOUT, 0));
57            isLeafReserved = dateSomeMinutesBefore < LastReservationDate;
58        }
59
60        public bool ReserveLeaf()
61        {
62            LastReservationDate = DateTime.UtcNow;
63            return StorageHelper.UpdateInDht(this).IsSuccessful();
64        }
65
66        public override bool IsReserverd()
67        {
68            return isLeafReserved;
69        }
70
71        public override string ToString()
72        {
73            return base.ToString() + ", last reservation date " + LastReservationDate;
74        }
75
76        public long getClientIdentifier()
77        {
78            return clientIdentifier;
79        }
80
81        public void setClientIdentifier(long id)
82        {
83            clientIdentifier = id;
84        }
85    }
86}
Note: See TracBrowser for help on using the repository browser.