Exemplo n.º 1
0
        public async Task <ICollection <KnownPeer> > DiscoverPeers()
        {
            _logger.LogInformation("Discovering peers");

            var result = new HashSet <KnownPeer>();

            try
            {
                var udpClient = new UdpClient(_port);

                var ownAddress = _ownAddressResolver.ResolvePreferredLocalAddress();
                udpClient.JoinMulticastGroup(IPAddress.Parse(_multicastAddress), ownAddress);

                udpClient.Client.ReceiveTimeout = Convert.ToInt32(_interval.TotalMilliseconds + 1000);

                DateTime pollUntil = DateTime.Now.Add(_interval);

                while (pollUntil > DateTime.Now)
                {
                    byte[] b = new byte[1024];
                    try
                    {
                        //var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
                        var data = await udpClient.ReceiveAsync(); //(ref ipEndPoint);

                        string message = Encoding.ASCII.GetString(data.Buffer);
                        _logger.LogDebug($"rx message {message}");
                        if (message.StartsWith(_serviceId))
                        {
                            var connStr = message.Remove(0, _serviceId.Length);
                            result.Add(new KnownPeer()
                            {
                                ConnectionString = connStr,
                                LastContact      = DateTime.Now
                            });
                        }
                    }
                    catch (SocketException ex)
                    {
                        _logger.LogError($"SocketException polling for peers - {ex.Message}");
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError($"Exception polling for peers - {ex.Message}");
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error joining multicast - {ex.Message}");
            }

            return(result);
        }
Exemplo n.º 2
0
        private void DiscoverOwnConnectionStrings()
        {
            var ownAddress = _ownAddressResolver.ResolvePreferredLocalAddress();

            if (ownAddress != null)
            {
                _internalConnsctionString = $"tcp://{ownAddress}:{_port}";
            }

            //TODO: external addresses
        }
Exemplo n.º 3
0
        private void DiscoverOwnConnectionStrings()
        {
            var ownAddress = _ownAddressResolver.ResolvePreferredLocalAddress();

            if (ownAddress != null)
            {
                _internalConnectionString = $"tcp://{ownAddress}:{_port}";
            }

            var externalConnectionString = _natTraversal.ConfigureNatTraversal(ownAddress, (int)_port);

            if (externalConnectionString != null)
            {
                _externalConnectionString = $"tcp://{externalConnectionString}";
            }
        }