addPeer method

void addPeer(
  1. Peer peer, {
  2. bool preConnected = false,
})

add peer to the pool of binding peers

if preConnected is true then the node will move the peer into the peers pool after handling its events duplicated peers will be ignored

Implementation

void addPeer(Peer peer, {bool preConnected = false}) {
  // check if peer is unique and node is active
  if (_bindingPeers.contains(peer) || _peers.contains(peer) || !isAlive) {
    return;
  }

  _bindingPeers.add(peer);

  onPeerConnectHandler() {
    _bindingPeers.remove(peer);
    if (!isAlive) {
      peer.destroy();
    } else {
      _peers.add(peer);
      emit(NodeEvent.onPeerConnect(peer));
    }
  }

  // handle peer
  peer.on(
    connect: onPeerConnectHandler,
    disconnect: () {
      _peers.remove(peer);
      emit(NodeEvent.onPeerDisconnect(peer));
    },
    data: (data) => emit(NodeEvent.onData(data, peer)),
    message: (msg) => emit(NodeEvent.onMessage(msg, peer)),
    error: (msg, err, stk) => emit(NodeEvent.onError(msg, err, stk)),
  );

  if (preConnected) {
    onPeerConnectHandler();
  } else {
    peer.connect();
  }
}