addPeer method
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();
}
}