Exemple #1
0
        private void btnResolve_Click(object sender, RoutedEventArgs e)
        {
            if (txtPeerName.Text.Length > 0)
            {
                // 建立PeerName物件
                PeerName peerName = new PeerName(txtPeerName.Text);

                // 建立PeerNameResolver物件
                PeerNameResolver resolver = new PeerNameResolver();

                // 宣告非同步解析作業正在執行中所觸發之事件
                // 並定義所呼叫的方法為ResolveProgressChangedCallback
                resolver.ResolveProgressChanged += new EventHandler <ResolveProgressChangedEventArgs>(ResolveProgressChangedCallback);

                // 宣告非同步解析作業完成時所觸發之事件
                // 並定義所呼叫的方法為ResolveCompletedCallback
                resolver.ResolveCompleted += new EventHandler <ResolveCompletedEventArgs>(ResolveCompletedCallback);

                lstPeerNameRecord.Items.Clear();
                progressBar.Visibility = Visibility.Visible;

                // 非同步將PNRP Peer Name解析為PNRP Peer Name記錄物件
                resolver.ResolveAsync(peerName, 1);
            }
            else
            {
                MessageBox.Show("Please enter Peer Name.", "Peer Name Resolver", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemple #2
0
        public List <NetworkHost> Find(string name)
        {
            if (type != NetworkTypes.Client)
            {
                throw new Exception("Only allowed for client!");
            }

            var hosts = new List <NetworkHost>();

            peerNameResolver = new PeerNameResolver();
            peerName         = new PeerName(name, PeerNameType.Unsecured);
            var results = peerNameResolver.Resolve(peerName);

            foreach (var record in results)
            {
                var host = new NetworkHost(record.Comment);
                foreach (var endpoint in record.EndPointCollection)
                {
                    if (endpoint.AddressFamily == AddressFamily.InterNetwork)
                    {
                        Console.WriteLine(string.Format("Found EndPoint {0}:{1}", endpoint.Address, endpoint.Port));
                        host.endpoints.Add(endpoint);
                    }
                }

                if (host.endpoints.Count != 0)
                {
                    hosts.Add(host);
                }
            }

            return(hosts);
        }
        public List <PeerInfo> ResolveByPeerHostName(string peerHostName)
        {
            try
            {
                if (string.IsNullOrEmpty(peerHostName))
                {
                    throw new ArgumentException("Cannot have a null or empty host peer name.");
                }

                PeerNameResolver resolver   = new PeerNameResolver();
                List <PeerInfo>  foundPeers = new List <PeerInfo>();
                var resolvedName            = resolver.Resolve(new PeerName(peerHostName, PeerNameType.Unsecured), Cloud.AllLinkLocal);
                foreach (var foundItem in resolvedName)
                {
                    foreach (var endPointInfo in foundItem.EndPointCollection)
                    {
                        PeerInfo peerInfo = new PeerInfo(foundItem.PeerName.PeerHostName, foundItem.PeerName.Classifier, endPointInfo.Port);
                        peerInfo.Comment = foundItem.Comment;
                        foundPeers.Add(peerInfo);
                    }
                }
                return(foundPeers);
            }
            catch (PeerToPeerException px)
            {
                throw new Exception(px.InnerException.Message);
            }
        }
Exemple #4
0
        private void Run()
        {
            Console.WriteLine("Hello! Enter Your Username:");
            string username = Console.ReadLine();

            Peer <IPingService> peer = new Peer <IPingService>
            {
                PeerID   = Guid.NewGuid().ToString().Split('-')[4],
                Username = username
            };
            IPeerRegistrationRepository             peerRegistration         = new PeerRegistrationManager();
            IPeerNameResolverRepository             peerNameResolver         = new PeerNameResolver(peer.PeerID);
            IPeerConfigurationService <PingService> peerConfigurationService = new PeerConfigurationService(peer);

            PeerServiceHost psh = new PeerServiceHost(peerRegistration, peerNameResolver, peerConfigurationService);

            Thread thd = new Thread(() =>
            {
                psh.RunPeerServiceHost(peer);
            })
            {
                IsBackground = true
            };

            thd.Start();

            Console.ReadLine();
        }
Exemple #5
0
        public void StartResolving()
        {
            Thread th = new Thread(() =>
            {
                while (true)
                {
                    List <IPEndPoint> res = new List <IPEndPoint>();

                    PeerNameResolver resolver        = new PeerNameResolver();
                    PeerNameRecordCollection results = resolver.Resolve(peerName, Cloud.AllLinkLocal);

                    foreach (var peer in results)
                    {
                        foreach (var item in peer.EndPointCollection)
                        {
                            if (item.AddressFamily == AddressFamily.InterNetwork)
                            {
                                res.Add(item);
                                break;
                            }
                        }
                    }

                    lock (resolverLock)
                    {
                        peers = res;
                    }

                    Thread.Sleep(10000);
                }
            });

            th.Start();
        }
Exemple #6
0
        static void Main(string[] args)
        {
            Console.Write("Peer Classifier to Resolve: ");
            string classifier = Console.ReadLine();

            PeerNameResolver resolver = new PeerNameResolver();

            Console.Write("Please wait. Resolving...");

            try
            {
                //records = resolver.Resolve(new PeerName(classifier, PeerNameType.Unsecured));
                //DisplayResults();

                resolver.ResolveCompleted       += new EventHandler <ResolveCompletedEventArgs>(resolver_ResolveCompleted);
                resolver.ResolveProgressChanged += new EventHandler <ResolveProgressChangedEventArgs>(resolver_ResolveProgressChanged);
                resolver.ResolveAsync(new PeerName(classifier, PeerNameType.Unsecured), Guid.NewGuid());

                while (isRunning)
                {
                    Thread.Sleep(1000);
                    //Console.Write(".");
                }
            }
            catch (PeerToPeerException ex)
            {
                Console.WriteLine("PeerToPeer Exception: {0}", ex.Message);
            }

            Console.WriteLine();
            Console.WriteLine("Press Enter to Exit...");
            Console.ReadLine();
        }
        private void btnResolve_Click(object sender, RoutedEventArgs e)
        {
            if (txtPeerName.Text.Length > 0)
            {
                // 建立PeerName物件
                PeerName peerName = new PeerName(txtPeerName.Text);

                // 建立PeerNameResolver物件
                PeerNameResolver resolver = new PeerNameResolver();

                // 將PNRP Peer Name解析為PNRP Peer Name記錄物件
                PeerNameRecordCollection pmrcs = resolver.Resolve(peerName);

                if (pmrcs.Count > 0)
                {
                    lstPeerNameRecord.Items.Clear();
                }
                else
                {
                    MessageBox.Show("No Peer Name Record Found", "Peer Name Resolver", MessageBoxButton.OK, MessageBoxImage.Error);
                }

                foreach (PeerNameRecord pmrc in pmrcs)
                {
                    foreach (IPEndPoint endpoint in pmrc.EndPointCollection)
                    {
                        lstPeerNameRecord.Items.Add(endpoint);
                    }
                }
            }
            else
            {
                MessageBox.Show("Please enter Peer Name.", "Peer Name Resolver", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        public List <Peer> ResolveByPeerName(string peerName)
        {
            try
            {
                if (string.IsNullOrEmpty(peerName))
                {
                    throw new ArgumentException("Cannot have a null or empty peer name.");
                }

                PeerNameResolver         resolver     = new PeerNameResolver();
                PeerNameRecordCollection resolvedName = resolver.Resolve(new PeerName(peerName, PeerNameType.Unsecured),
                                                                         Cloud.AllLinkLocal);

                List <Peer> foundPeers = new List <Peer>();
                foreach (PeerNameRecord foundItem in resolvedName)
                {
                    Peer peer = new Peer()
                    {
                        PeerName     = foundItem.PeerName.Classifier,
                        PeerHostName = foundItem.PeerName.PeerHostName,
                        Comments     = foundItem.Comment
                    };

                    foundPeers.Add(peer);
                }

                return(foundPeers);
            }
            catch (PeerToPeerException px)
            {
                throw new Exception(px.InnerException.Message);
            }
        }
Exemple #9
0
        static void Main(string[] args)
        {
            try
            {
                if (args.Length != 1)
                {
                    Console.WriteLine("Usage: PeerNameResolver.exe <PeerNameToResolve>");
                    return;
                }

                // create a resolver object to resolve a Peer Name that was previously published
                PeerNameResolver resolver = new PeerNameResolver();
                // The Peer Name to resolve must be passed as the first command line argument to the application
                PeerName peerName = new PeerName(args[0]);
                // resolve the Peer Name - this is a network operation and will block until the resolve completes
                PeerNameRecordCollection results = resolver.Resolve(peerName);

                // Display the data returned by the resolve operation
                Console.WriteLine("Resolve operation complete.\n", peerName);
                Console.WriteLine("Results for PeerName: {0}", peerName);
                Console.WriteLine();

                int count = 1;
                foreach (PeerNameRecord record in results)
                {
                    Console.WriteLine("Record #{0} results...", count);

                    Console.Write("Comment:");
                    if (record.Comment != null)
                    {
                        Console.Write(record.Comment);
                    }
                    Console.WriteLine();

                    Console.Write("Data:");
                    if (record.Data != null)
                    {
                        //Assumes the data blob associated with the PeerName is made up of ASCII characters
                        Console.Write(System.Text.Encoding.ASCII.GetString(record.Data));
                    }
                    Console.WriteLine();

                    Console.WriteLine("Endpoints:");
                    foreach (IPEndPoint endpoint in record.EndPointCollection)
                    {
                        Console.WriteLine("\t Endpoint:{0}", endpoint);
                        Console.WriteLine();
                    }

                    count++;
                }

                Console.ReadKey();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error occured while attempting to resolve the PeerName: {0}", e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }
Exemple #10
0
        private static PeerNameRecordCollection Resolve(string serviceName)
        {
            var resolver = new PeerNameResolver();
            var peerName = new PeerName(serviceName, PeerNameType.Unsecured);

            return(resolver.Resolve(peerName));
        }
Exemple #11
0
        public PnrpManager()
        {
            _resolver = new PeerNameResolver();

            InitializeRegistrations();
            InitializeClouds();
            this.CurrentScope = PnrpScope.All;
        }
Exemple #12
0
        public PeerNameResolver ResolvePeerName(PeerName peerName)
        {
            var peerNameResolver = new PeerNameResolver();

            peerNameResolver.ResolveCompleted += peerNameResolver_ResolveCompleted;
            peerNameResolver.ResolveAsync(peerName, Guid.NewGuid());
            return(peerNameResolver);
        }
Exemple #13
0
        private void InitPeerResolver()
        {
            _peerResolver = new PeerNameResolver();
            _peerResolver.ResolveProgressChanged += OnPeerResolverFound;
            _peerResolver.ResolveCompleted       += OnPeerResolveComplete;

            _logger.Debug("Peer resolver is inited");
        }
Exemple #14
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="cloud">対象となるネットワーク</param>
        /// <param name="peerName">登録ピア名</param>
        public Resolver(Cloud cloud, PeerName peerName)
        {
            this.cloud    = cloud;
            this.peerName = peerName;

            peerNameResolver = new PeerNameResolver();
            peerNameResolver.ResolveProgressChanged += Pnr_ResolveProgressChanged;
            peerNameResolver.ResolveCompleted       += Pnr_ResolveCompleted;
        }
Exemple #15
0
        private PeersResolver()
        {
            _resolver = new PeerNameResolver();
            _resolver.ResolveProgressChanged += resolver_ResolveProgressChanged;
            _resolver.ResolveCompleted       += resolver_ResolveCompleted;

            _peerList  = new List <Peer>();
            _callbacks = new List <Constants.VoidCallback>();
        }
Exemple #16
0
        internal void Resolve2()
        {
            Logger.Log.Info("Start P2P resolver...");
            // create a resolver object to resolve a peername
            resolver = new PeerNameResolver();
            string endpointUrl = null;

            // resolve the PeerName - this is a network operation and will block until the resolve completes
            //PeerNameRecordCollection results = resolver.Resolve(peerName, 100); // Max 100 records
            PeerNameRecordCollection results = resolver.Resolve(peerName, Cloud.Available, 100); // Max 100 records

            foreach (PeerNameRecord record in results)
            {
                foreach (IPEndPoint ep in record.EndPointCollection)
                {
                    if (ep.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    {
                        endpointUrl = string.Format(endpointuriformat4, ep.Address, ep.Port);
                    }
                    else
                    if (ep.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
                    //if ((ep.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) && !ep.Address.IsIPv6LinkLocal)
                    {
                        endpointUrl = string.Format(endpointuriformat6, ep.Address, ep.Port);
                    }

                    try
                    {
                        NetTcpBinding binding      = Helper.GetStreamBinding();
                        IP2PService   serviceProxy = ChannelFactory <IP2PService> .CreateChannel(
                            binding, new EndpointAddress(endpointUrl));

                        PeerEntry peer = new PeerEntry();
                        peer.PeerName      = record.PeerName;
                        peer.ServiceProxy  = serviceProxy;
                        peer.DisplayString = serviceProxy.GetName();
                        if (record.Comment != null)
                        {
                            peer.Comment = record.Comment;
                        }

                        if (record.Data != null)
                        {
                            peer.Data = System.Text.Encoding.ASCII.GetString(record.Data);
                        }
                        Logger.Log.Info(string.Format("SUCCESS Connect:{0} \t\t {1} ", endpointUrl, peer.Comment));

                        Vault.Peers.Add(peer);
                    }
                    catch (EndpointNotFoundException e)
                    {
                        Logger.Log.Debug(e.Message);
                    }
                }
            }
        }
Exemple #17
0
        public void FindPeers()
        {
            // Создание распознавателя и добавление обработчиков событий
            PeerNameResolver resolver = new PeerNameResolver();

            resolver.ResolveProgressChanged += resolver_ResolveProgressChanged;
            resolver.ResolveCompleted       += resolver_ResolveCompleted;

            // Преобразование незащищенных имен пиров асинхронным образом
            resolver.ResolveAsync(new PeerName("0.P2P Sample"), 1);
        }
Exemple #18
0
        /// <summary>
        /// 解析对等名称
        /// </summary>
        /// <param name="myPeerName"></param>
        public static PeerNameRecordCollection ResolverPeer(String myPeerName)
        {
            Thread.Sleep(500);
            strPeerInfos.Clear();
            // 建立PeerName实例
            PeerName peerName = new PeerName("0." + myPeerName);
            // 建立PeerNameResolver实例
            PeerNameResolver resolver = new PeerNameResolver();
            // 对PNRP Peer Name进行解析
            PeerNameRecordCollection pmrcs = resolver.Resolve(peerName);

            return(pmrcs);
        }
Exemple #19
0
        internal void Refresh()
        {
            // Создание распознавателя и добавление обработчиков событий
            var resolver = new PeerNameResolver();

            resolver.ResolveProgressChanged += ResolveProgressChanged;
            resolver.ResolveCompleted       += ResolveCompleted;

            // Подготовка к добавлению новых пиров
            _home.ListPeerEntryClear();
            _home.SetRefreshMenuEnabled(false);

            // Преобразование защищенных имен пиров асинхронным образом
            resolver.ResolveAsync(new PeerName("P2P Sample", PeerNameType.Secured), _home.DlgSetting.Id);
        }
Exemple #20
0
        private void RefreshButton_Click(object sender, RoutedEventArgs e)
        {
            // Create resolver and add event handlers
            PeerNameResolver resolver = new PeerNameResolver();

            resolver.ResolveProgressChanged += new EventHandler <ResolveProgressChangedEventArgs>(resolver_ResolveProgressChanged);
            resolver.ResolveCompleted       += new EventHandler <ResolveCompletedEventArgs>(resolver_ResolveCompleted);

            // Prepare for new peers
            PeerList.Items.Clear();
            RefreshButton.IsEnabled = false;

            // Resolve unsecured peers asynchronously
            resolver.ResolveAsync(new PeerName("0.P2P Sample"), 1);
        }
Exemple #21
0
        public void LookupRegistrationAsync(PeerName peerName, EventHandler <ResolveProgressChangedEventArgs> progressChanged, EventHandler <ResolveCompletedEventArgs> completed)
        {
            if (peerName == null)
            {
                throw new ArgumentException("Cannot have null PeerName");
            }


            _resolver = new PeerNameResolver();

            _resolver.ResolveCompleted       += new EventHandler <ResolveCompletedEventArgs>(completed);
            _resolver.ResolveProgressChanged += new EventHandler <ResolveProgressChangedEventArgs>(progressChanged);
            Debug.WriteLine(string.Format("Resolving: {0}", peerName.ToString()));
            _resolver.ResolveAsync(peerName, peerName);
        }
        private void RefreshButton_Click(object sender, RoutedEventArgs e)
        {
            // create recognizers and event handlers
            PeerNameResolver resolver = new PeerNameResolver();

            resolver.ResolveProgressChanged +=
                resolver_ResolveProgressChanged;
            resolver.ResolveCompleted +=
                resolver_ResolveCompleted;

            PeerList.Items.Clear();
            RefreshButton.IsEnabled = false;

            // parse names async
            resolver.ResolveAsync(new PeerName("0.P2P Sample"), 1);
        }
        private void RefreshButton_Click(object sender, RoutedEventArgs e)
        {
            // Создание распознавателя и добавление обработчиков событий
            PeerNameResolver resolver = new PeerNameResolver();

            resolver.ResolveProgressChanged +=
                new EventHandler <ResolveProgressChangedEventArgs>(resolver_ResolveProgressChanged);
            resolver.ResolveCompleted +=
                new EventHandler <ResolveCompletedEventArgs>(resolver_ResolveCompleted);

            // Подготовка к добавлению новых пиров
            PeerList.Items.Clear();
            RefreshButton.IsEnabled = false;

            // Преобразование незащищенных имен пиров асинхронным образом
            resolver.ResolveAsync(new PeerName("0.P2P Sample"), 1);
        }
Exemple #24
0
        public void ResolveAsync()
        {
            // Create resolver.
            resolver = new PeerNameResolver();
            resolver.ResolveProgressChanged +=
                new EventHandler <ResolveProgressChangedEventArgs>(resolver_ResolveProgressChanged);
            resolver.ResolveCompleted +=
                new EventHandler <ResolveCompletedEventArgs>(resolver_ResolveCompleted);

            // Prepare for new peer adding
            Vault.Peers.Clear();

            // Solve peer names async
            //resolver.ResolveAsync(new PeerName("0.P2P Sample"), 1);
            //PeerName peername = new PeerName(Application.ProductName, PeerNameType.Unsecured);
            resolver.ResolveAsync(peerName, Cloud.Available);
        }
Exemple #25
0
        public void RefreshPeers()
        {
            // Создание распознавателя и добавление обработчиков событий
            PeerNameResolver resolver = new PeerNameResolver();

            resolver.ResolveProgressChanged +=
                new EventHandler <ResolveProgressChangedEventArgs>(resolver_ResolveProgressChanged);
            resolver.ResolveCompleted +=
                new EventHandler <ResolveCompletedEventArgs>(resolver_ResolveCompleted);

            // Подготовка к добавлению новых пиров
            PeerList.Clear();
            CanRefreshPeers = false;

            // Преобразование незащищенных имен пиров асинхронным образом
            resolver.ResolveAsync(new PeerName("0.P2P Sample"), 1);
        }
        /// <summary>
        /// 解析对等名称
        /// </summary>
        /// <param name="myPeerName"></param>
        public static void ResolverPeer(String myPeerName)
        {
            // 建立PeerName实例
            PeerName peerName = new PeerName("0." + myPeerName);
            // 建立PeerNameResolver实例
            PeerNameResolver resolver = new PeerNameResolver();
            // 对PNRP Peer Name进行解析
            PeerNameRecordCollection pmrcs = resolver.Resolve(peerName);

            foreach (PeerNameRecord pmrc in pmrcs)
            {
                foreach (IPEndPoint endpoint in pmrc.EndPointCollection)
                {
                    Console.WriteLine(endpoint);
                }
            }
        }
Exemple #27
0
        public PeerNameRecordCollection getPeerNameRecords(string classifier)
        {
            PeerNameRecordCollection peers    = null;
            PeerNameResolver         resolver = new PeerNameResolver();

            Console.WriteLine("Please wait, Resolving...");

            try
            {
                peers = resolver.Resolve(new PeerName(classifier, PeerNameType.Unsecured));
            }
            catch (PeerToPeerException ex)
            {
                Console.WriteLine("PeerToPeer Exception: {0}", ex.Message);
            }

            return(peers);
        }
Exemple #28
0
        public PeerNameResult ResolveHostName(string hostPeerName)
        {
            if (string.IsNullOrEmpty(hostPeerName))
            {
                throw new ArgumentException("Cannot have a null or empty host peer name.");
            }

            PeerNameResolver resolver = new PeerNameResolver();

            var results = resolver.Resolve(new PeerName(hostPeerName, PeerNameType.Unsecured), Cloud.Global);

            if (results == null || results.Count == 0)
            {
                throw new PeerToPeerException(string.Format("Unable to resolve {0}", hostPeerName));
            }

            return(new PeerNameResult(results[0].PeerName.PeerHostName, results[0].EndPointCollection[0].Port));
        }
        private void Run()
        {
            Peer <IPingService> peer = new Peer <IPingService> {
                UserName = Guid.NewGuid().ToString().Split('-')[4]
            };
            IPeerRegistrationRepository peerRegistration         = new PeerRegistrationManager();
            IPeerNameResolverRepository peerNameResolver         = new PeerNameResolver(peer.UserName);
            IPeerConfigurationService   peerConfigurationService = new PeerConfigurationService(peer);

            peerRegistration.StartPeerRegistration(peer.UserName, peerConfigurationService.Port);

            Console.WriteLine("Peer Information . . . .");
            Console.WriteLine($"Peer Uri: {peerRegistration.PeerUri} \t\t Port: {peerConfigurationService.Port}");
            var host = Dns.GetHostEntry(peerRegistration.PeerUri);

            host.AddressList?.ToList().ForEach(p => Console.WriteLine($"\t\t IP :{p}"));
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            // create a resolver object to resolve a peername
            PeerNameResolver resolver = new PeerNameResolver();
            // the peername to resolve must be passed as the first command line argument to the application
            PeerName peerName = new PeerName("3df33a18134282a04f56b887633e5a6640b7682e.RowansWebServer");
            // resolve the PeerName - this is a network operation and will block until the resolve completes
            PeerNameRecordCollection results = resolver.Resolve(peerName);

            // Display the data returned by the resolve operation
            Console.WriteLine("Results for PeerName: {0}", peerName);
            Console.WriteLine();
            int count = 1;

            foreach (PeerNameRecord record in results)
            {
                Console.WriteLine("Record #{0} results...", count);

                Console.Write("Comment:");
                if (record.Comment != null)
                {
                    Console.Write(record.Comment);
                }
                Console.WriteLine();

                Console.Write("Data:");
                if (record.Data != null)
                {
                    Console.Write(System.Text.Encoding.ASCII.GetString(record.Data));
                }
                Console.WriteLine();

                Console.WriteLine("Endpoints:");
                foreach (IPEndPoint endpoint in record.EndPointCollection)
                {
                    Console.WriteLine("\t Endpoint:{0}", endpoint);
                    Console.WriteLine();
                }

                count++;
            }

            Console.ReadKey();
        }