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

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

Prepared KeySearcher for Localization

File size: 2.9 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;
[2295]7using KeySearcher.Properties;
[1634]8
[1674]9namespace KeySearcher.P2P.Tree
[1634]10{
11    class Leaf : NodeBase
12    {
13        internal DateTime LastReservationDate;
[1693]14        private bool isLeafReserved;
[2011]15        private const int RESERVATIONTIMEOUT = 30;
[2024]16        private long clientIdentifier = -1;
[1634]17
[1674]18        public Leaf(StorageHelper storageHelper, KeyQualityHelper keyQualityHelper, Node parentNode, BigInteger id, string distributedJobIdentifier)
19            : base(storageHelper, keyQualityHelper, parentNode, id, id, distributedJobIdentifier)
[1634]20        {
21        }
22
23        public void HandleResults(LinkedList<KeySearcher.ValueKey> result)
24        {
25            Result = result;
[2217]26            UpdateActivity();
[1634]27            UpdateDht();
28        }
29
30        public BigInteger PatternId()
31        {
32            return From;
33        }
34
[1665]35        public override Leaf CalculatableLeaf(bool useReservedNodes)
[1634]36        {
[1665]37            if (IsCalculated())
38            {
39                throw new AlreadyCalculatedException();
40            }
41
[1634]42            return this;
43        }
44
[1651]45        public override bool IsCalculated()
46        {
47            return Result.Count > 0;
48        }
49
[1665]50        public override void Reset()
51        {
52        }
53
[1693]54        public override void UpdateCache()
55        {
[2011]56            var dateSomeMinutesBefore = DateTime.UtcNow.Subtract(new TimeSpan(0, RESERVATIONTIMEOUT, 0));
57            isLeafReserved = dateSomeMinutesBefore < LastReservationDate;
[1693]58        }
59
[1647]60        public bool ReserveLeaf()
[1634]61        {
62            LastReservationDate = DateTime.UtcNow;
[2024]63            clientIdentifier = Cryptool.PluginBase.Miscellaneous.UniqueIdentifier.GetID();
[1674]64            return StorageHelper.UpdateInDht(this).IsSuccessful();
[1634]65        }
66
[2038]67        public void GiveLeafFree()
[1634]68        {
[2152]69            StorageHelper.UpdateFromDht((this));         
[2024]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        {
[1693]82            return isLeafReserved;
[1634]83        }
[1651]84
85        public override string ToString()
86        {
[2295]87            return base.ToString() + Resources.__last_reservation_date_ + LastReservationDate;
[1651]88        }
[2019]89
90        public long getClientIdentifier()
91        {
92            return clientIdentifier;
93        }
94
95        public void setClientIdentifier(long id)
96        {
97            clientIdentifier = id;
98        }
[1634]99    }
100}
Note: See TracBrowser for help on using the repository browser.