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

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

Prepared KeySearcher for Localization

File size: 2.9 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Numerics;
4using KeySearcher.Helper;
5using KeySearcher.P2P.Exceptions;
6using KeySearcher.P2P.Storage;
7using KeySearcher.Properties;
8
9namespace KeySearcher.P2P.Tree
10{
11    class Leaf : NodeBase
12    {
13        internal DateTime LastReservationDate;
14        private bool isLeafReserved;
15        private const int RESERVATIONTIMEOUT = 30;
16        private long clientIdentifier = -1;
17
18        public Leaf(StorageHelper storageHelper, KeyQualityHelper keyQualityHelper, Node parentNode, BigInteger id, string distributedJobIdentifier)
19            : base(storageHelper, keyQualityHelper, parentNode, id, id, distributedJobIdentifier)
20        {
21        }
22
23        public void HandleResults(LinkedList<KeySearcher.ValueKey> result)
24        {
25            Result = result;
26            UpdateActivity();
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            clientIdentifier = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
64            return StorageHelper.UpdateInDht(this).IsSuccessful();
65        }
66
67        public void GiveLeafFree()
68        {
69            StorageHelper.UpdateFromDht((this));         
70            //Only give leaf free, if the reservation is still ours:
71            if (clientIdentifier == Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID())
72            {
73                LastReservationDate = new DateTime(0);
74                clientIdentifier = -1;
75                isLeafReserved = false;
76                StorageHelper.UpdateInDht(this);
77            }
78        }
79
80        public override bool IsReserved()
81        {
82            return isLeafReserved;
83        }
84
85        public override string ToString()
86        {
87            return base.ToString() + Resources.__last_reservation_date_ + LastReservationDate;
88        }
89
90        public long getClientIdentifier()
91        {
92            return clientIdentifier;
93        }
94
95        public void setClientIdentifier(long id)
96        {
97            clientIdentifier = id;
98        }
99    }
100}
Note: See TracBrowser for help on using the repository browser.