Esempio n. 1
0
        private void StartProcessing()
        {
            while (true)
            {
                try
                {
                    PeerManagerJob job = null;

                    try
                    {
                        job = _jobQueue.Take();
                    }
                    catch (Exception e)
                    {
                        _logger?.Error(e, "Error while dequeuing peer manager job: stopping the dequeing loop.");
                        break;
                    }

                    if (job.Type == PeerManagerJobType.ProcessMessage)
                    {
                        HandleMessage(job.Message);
                    }
                    else if (job.Type == PeerManagerJobType.DialNode)
                    {
                        AddPeer(job.Node);
                    }
                }
                catch (Exception e)
                {
                    _logger?.Warn(e, "Exception while dequeuing job.");
                }
            }
        }
Esempio n. 2
0
        public void Start()
        {
            Task.Run(() => _connectionListener.StartListening(NetworkConfig.Instance.ListeningPort));

            _connectionListener.IncomingConnection += OnIncomingConnection;
            _connectionListener.ListeningStopped   += OnListeningStopped;

            if (!_isBp)
            {
                _maintenanceTimer = new Timer(e => DoPeerMaintenance(), null, _initialMaintenanceDelay, _maintenancePeriod);
            }

            // Add the provided bootnodes
            if (NetworkConfig.Instance.Bootnodes != null && NetworkConfig.Instance.Bootnodes.Any())
            {
                // todo add jobs
                foreach (var btn in NetworkConfig.Instance.Bootnodes)
                {
                    NodeData nd      = NodeData.FromString(btn);
                    var      dialJob = new PeerManagerJob {
                        Type = PeerManagerJobType.DialNode, Node = nd
                    };
                    _jobQueue.Add(dialJob);
                }
            }
            else
            {
                _logger?.Warn("Bootnode list is empty.");
            }

            Task.Run(() => StartProcessing()).ConfigureAwait(false);
        }