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."); } } }
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); }