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

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

keysearcher:
fixed naming bug in results

File size: 3.0 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Numerics;
4using Cryptool.P2P;
5using KeySearcher.Helper;
6using KeySearcher.P2P.Exceptions;
7using KeySearcher.P2P.Storage;
8using KeySearcher.Properties;
9
10namespace KeySearcher.P2P.Tree
11{
12    class Leaf : NodeBase
13    {
14        internal DateTime LastReservationDate;
15        private bool isLeafReserved;
16        private const int RESERVATIONTIMEOUT = 30;
17        private long clientIdentifier = -1;
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            UpdateActivity();           
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            ParentNode.Reset();
54            Result.Clear();
55            Activity.Clear();
56            StorageHelper.UpdateInDht(this);
57        }
58
59        public override void UpdateCache()
60        {
61            var dateSomeMinutesBefore = DateTime.UtcNow.Subtract(new TimeSpan(0, RESERVATIONTIMEOUT, 0));
62            isLeafReserved = dateSomeMinutesBefore < LastReservationDate;
63        }
64
65        public bool ReserveLeaf()
66        {
67            LastReservationDate = DateTime.UtcNow;
68            clientIdentifier = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
69            return StorageHelper.UpdateInDht(this).IsSuccessful();
70        }
71
72        public void GiveLeafFree()
73        {
74            StorageHelper.UpdateFromDht((this));         
75            //Only give leaf free, if the reservation is still ours:
76            if (clientIdentifier == Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID())
77            {
78                LastReservationDate = new DateTime(0);
79                clientIdentifier = -1;
80                isLeafReserved = false;
81                StorageHelper.UpdateInDht(this);
82            }
83        }
84
85        public override bool IsReserved()
86        {
87            return isLeafReserved;
88        }
89
90        public override string ToString()
91        {
92            return base.ToString() + Resources.__last_reservation_date_ + LastReservationDate;
93        }
94
95        public long getClientIdentifier()
96        {
97            return clientIdentifier;
98        }
99
100        public void setClientIdentifier(long id)
101        {
102            clientIdentifier = id;
103        }
104    }
105}
Note: See TracBrowser for help on using the repository browser.