source: trunk/CrypPlugins/PeerToPeer/PeedId.cs @ 1458

Last change on this file since 1458 was 1458, checked in by Paul Lelgemann, 12 years ago
  • Removed unused references and using statement in CrypP2P, PeerToPeer, PeerToPeerBaseProxy

+ Skeleton for P2PEditor

File size: 2.8 KB
Line 
1using PeersAtPlay.P2POverlay;
2
3namespace Cryptool.Plugins.PeerToPeer.Internal
4{
5    public class PeerId
6    {
7        private const uint OFFSET_BASIS = 2166136261;
8        private const uint PRIME = 16777619; // 2^24 + 2^8 + 0x93
9        private readonly byte[] byteId;
10        private readonly int hashCode;
11        private readonly string stringId;
12
13        public PeerId(OverlayAddress oAddress)
14        {
15            if (oAddress != null)
16            {
17                stringId = oAddress.ToString();
18                byteId = oAddress.ToByteArray();
19
20                // FNV-1 hashing
21                uint fnvHash = OFFSET_BASIS;
22                foreach (byte b in byteId)
23                {
24                    fnvHash = (fnvHash*PRIME) ^ b;
25                }
26                hashCode = (int) fnvHash;
27            }
28        }
29
30        /// <summary>
31        /// Returns true when the byteId content is identical
32        /// </summary>
33        /// <param name="right"></param>
34        /// <returns></returns>
35        public override bool Equals(object right)
36        {
37            /* standard checks for reference types */
38
39            if (right == null)
40                return false;
41
42            if (ReferenceEquals(this, right))
43                return true;
44
45            if (GetType() != right.GetType())
46                return false;
47
48            // actual content comparison
49            return this == (PeerId) right;
50        }
51
52        public static bool operator ==(PeerId left, PeerId right)
53        {
54            // because it's possible that one parameter is null, catch this exception
55            /* Begin add - Christian Arnold, 2009.12.16, must cast the parameters, otherwise --> recursion */
56            if (left == (object) right)
57                return true;
58
59            if ((object) left == null || (object) right == null)
60                return false;
61            /* End add */
62
63            if (left.hashCode != right.hashCode)
64                return false;
65
66            if (left.byteId.Length != right.byteId.Length)
67                return false;
68
69            for (int i = 0; i < left.byteId.Length; i++)
70            {
71                // uneven pattern content
72                if (left.byteId[i] != right.byteId[i])
73                    return false;
74            }
75
76            return true;
77        }
78
79        public static bool operator !=(PeerId left, PeerId right)
80        {
81            return !(left == right);
82        }
83
84        public override int GetHashCode()
85        {
86            return hashCode;
87        }
88
89        public override string ToString()
90        {
91            return stringId;
92        }
93
94        public byte[] ToByteArray()
95        {
96            return byteId;
97        }
98    }
99}
Note: See TracBrowser for help on using the repository browser.