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

Last change on this file since 1433 was 1433, checked in by Paul Lelgemann, 12 years ago

o Extracted common classes from PeerToPeerBase plugin into new PeerToPeer plugin as a preparation for the new P2P proxy
o Modified directory properties to ignore the CrypBuild directory

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