/// <summary>
        /// Connect to a peer
        /// </summary>
        /// <param name="VirtualIpOrDns"></param>
        /// <param name="peer"></param>
        /// <returns></returns>
        public PeerErrorCode ConnectToPeer(string VirtualIpOrDns, RootPeer peer)
        {
            if (peer.Connected)
            {
                throw new Exception("Peer is already connected");
            }

            PeerResponse response = SharedRoot.ConnectToPeer(VirtualIpOrDns);

            if (response.ErrorCode == PeerErrorCode.Success)
            {
                peer.Connected    = true; //temp
                peer.VirtualIP    = response.VirtualIP;
                peer.ConnectionId = response.ConnectionId;
                peer._client      = this;
                peer.FromClient   = this;

                if (!PeerConnections.ContainsKey(response.ConnectionId))
                {
                    PeerConnections.Add(response.ConnectionId, peer);
                }
                else
                {
                    PeerConnections[response.ConnectionId] = peer;
                }

                peer.onRegisterMessages(this.MessageHandler);
                peer.onClientConnect();
                return(PeerErrorCode.Success);
            }
            return(response.ErrorCode);
        }
예제 #2
0
 public static PeerInfo From(PeerResponse response)
 {
     return(new PeerInfo {
         PeerId = response.PeerId,
         Ip = response.Ip,
         Port = int.Parse(response.Port),
         BitField = response.BitField,
         AmChoking = bool.Parse(response.AmChoking),
         PeerChoking = bool.Parse(response.PeerChoking),
         DownloadSpeed = long.Parse(response.DownloadSpeed),
         UploadSpeed = long.Parse(response.UploadSpeed),
         Seeder = bool.Parse(response.Seeder)
     });
 }