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

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

User Statistics Added. The CSV Data will be saved under C\Users\ct2\Local\CrypTool2...

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