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
RevLine 
[1634]1using System;
2using System.Collections.Generic;
3using System.Numerics;
4using KeySearcher.Helper;
[1665]5using KeySearcher.P2P.Exceptions;
[1674]6using KeySearcher.P2P.Storage;
[1634]7
[1674]8namespace KeySearcher.P2P.Tree
[1634]9{
10    class Leaf : NodeBase
11    {
12        internal DateTime LastReservationDate;
[1693]13        private bool isLeafReserved;
[2011]14        private const int RESERVATIONTIMEOUT = 30;
[2024]15        private long clientIdentifier = -1;
[1634]16
[1674]17        public Leaf(StorageHelper storageHelper, KeyQualityHelper keyQualityHelper, Node parentNode, BigInteger id, string distributedJobIdentifier)
18            : base(storageHelper, keyQualityHelper, parentNode, id, id, distributedJobIdentifier)
[1634]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
[1665]33        public override Leaf CalculatableLeaf(bool useReservedNodes)
[1634]34        {
[1665]35            if (IsCalculated())
36            {
37                throw new AlreadyCalculatedException();
38            }
39
[1634]40            return this;
41        }
42
[1651]43        public override bool IsCalculated()
44        {
45            return Result.Count > 0;
46        }
47
[1665]48        public override void Reset()
49        {
50        }
51
[1693]52        public override void UpdateCache()
53        {
[2011]54            var dateSomeMinutesBefore = DateTime.UtcNow.Subtract(new TimeSpan(0, RESERVATIONTIMEOUT, 0));
55            isLeafReserved = dateSomeMinutesBefore < LastReservationDate;
[1693]56        }
57
[1647]58        public bool ReserveLeaf()
[1634]59        {
60            LastReservationDate = DateTime.UtcNow;
[2024]61            clientIdentifier = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
[1674]62            return StorageHelper.UpdateInDht(this).IsSuccessful();
[1634]63        }
64
[2038]65        public void GiveLeafFree()
[1634]66        {
[2152]67            StorageHelper.UpdateFromDht((this));         
[2024]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        {
[1693]80            return isLeafReserved;
[1634]81        }
[1651]82
83        public override string ToString()
84        {
85            return base.ToString() + ", last reservation date " + LastReservationDate;
86        }
[2019]87
88        public long getClientIdentifier()
89        {
90            return clientIdentifier;
91        }
92
93        public void setClientIdentifier(long id)
94        {
95            clientIdentifier = id;
96        }
[1634]97    }
98}
Note: See TracBrowser for help on using the repository browser.