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

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

Serialize of the User Statistics update (Writing+Reading in DHT available)
Still needs to be tested before usage!

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//-------------------------------------------------------------------------------
26//          UpdateActivity();
27//-------------------------------------------------------------------------------
28            UpdateDht();
29        }
30
31        public BigInteger PatternId()
32        {
33            return From;
34        }
35
36        public override Leaf CalculatableLeaf(bool useReservedNodes)
37        {
38            if (IsCalculated())
39            {
40                throw new AlreadyCalculatedException();
41            }
42
43            return this;
44        }
45
46        public override bool IsCalculated()
47        {
48            return Result.Count > 0;
49        }
50
51        public override void Reset()
52        {
53        }
54
55        public override void UpdateCache()
56        {
57            var dateSomeMinutesBefore = DateTime.UtcNow.Subtract(new TimeSpan(0, RESERVATIONTIMEOUT, 0));
58            isLeafReserved = dateSomeMinutesBefore < LastReservationDate;
59        }
60
61        public bool ReserveLeaf()
62        {
63            LastReservationDate = DateTime.UtcNow;
64            clientIdentifier = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
65            return StorageHelper.UpdateInDht(this).IsSuccessful();
66        }
67
68        public void GiveLeafFree()
69        {
70            StorageHelper.UpdateFromDht((this));         
71            //Only give leaf free, if the reservation is still ours:
72            if (clientIdentifier == Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID())
73            {
74                LastReservationDate = new DateTime(0);
75                clientIdentifier = -1;
76                isLeafReserved = false;
77                StorageHelper.UpdateInDht(this);
78            }
79        }
80
81        public override bool IsReserved()
82        {
83            return isLeafReserved;
84        }
85
86        public override string ToString()
87        {
88            return base.ToString() + ", last reservation date " + LastReservationDate;
89        }
90
91        public long getClientIdentifier()
92        {
93            return clientIdentifier;
94        }
95
96        public void setClientIdentifier(long id)
97        {
98            clientIdentifier = id;
99        }
100    }
101}
Note: See TracBrowser for help on using the repository browser.