peer.cs

来自「破解的飞信源代码」· CS 代码 · 共 109 行

CS
109
字号
namespace Imps.Client.Core.P2P.ICE
{
    using Imps.Client.Core;
    using NCindy.Util;
    using System;
    using System.Collections.Generic;
    using System.Net;

    public class Peer
    {
        private readonly List<IPEndPoint> candidateTcpEndPoints = new List<IPEndPoint>();
        private TransportMode mode = TransportMode.P2PV2;
        private readonly long sid;
        private readonly List<IPEndPoint> usableEndPoints = new List<IPEndPoint>();

        public Peer(long sid)
        {
            this.sid = sid;
        }

        public void AddUsableEndPoint(IPEndPoint iep)
        {
            lock (this.usableEndPoints)
            {
                if (!this.usableEndPoints.Contains(iep))
                {
                    this.usableEndPoints.Add(iep);
                }
            }
        }

        public override bool Equals(object obj)
        {
            if (object.ReferenceEquals(this, obj))
            {
                return true;
            }
            if (!(obj is Peer))
            {
                return false;
            }
            Peer peer = (Peer) obj;
            return (((this.sid == peer.sid) && (this.mode == peer.mode)) && object.Equals(this.FirstEndPoint, peer.FirstEndPoint));
        }

        public override int GetHashCode()
        {
            return ((this.sid.GetHashCode() ^ this.FirstEndPoint.GetHashCode()) ^ this.mode.GetHashCode());
        }

        public override string ToString()
        {
            return string.Format("Sid:{0}, Mode:{1}, First endpoint:{2}", this.sid, this.mode, (this.FirstEndPoint == null) ? "Null" : this.FirstEndPoint.ToString());
        }

        public List<IPEndPoint> CandidateTcpEndPoints
        {
            get
            {
                return this.candidateTcpEndPoints;
            }
        }

        public IPEndPoint FirstEndPoint
        {
            get
            {
                if (this.usableEndPoints.get_Count() == 0)
                {
                    return null;
                }
                lock (this.usableEndPoints)
                {
                    return this.usableEndPoints.get_Item(0);
                }
            }
        }

        public TransportMode Mode
        {
            get
            {
                return this.mode;
            }
            set
            {
                this.mode = value;
            }
        }

        public string PeerToken
        {
            get
            {
                return CryptoHelper.GetMD5(BitConverter.GetBytes(this.sid));
            }
        }

        public long Sid
        {
            get
            {
                return this.sid;
            }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?