findPeerReceiver function
void
findPeerReceiver()
Receives peers from a dispatcher and forwards them to a result channel
Implementation
void findPeerReceiver(
StreamController<AddrInfo> peerController,
Stream<AddrInfo> evtStream,
List<AddrInfo> rcvPeers) async {
try {
await for (final ai in evtStream) {
rcvPeers.add(ai);
var sentAll = true;
var i = 0;
while (i < rcvPeers.length) {
if (peerController.isClosed) {
return;
}
try {
peerController.add(rcvPeers[i]);
i++;
} catch (e) {
rcvPeers = rcvPeers.sublist(i);
sentAll = false;
break;
}
}
if (sentAll) {
rcvPeers = [];
}
}
} finally {
for (final p in rcvPeers) {
if (peerController.isClosed) {
return;
}
peerController.add(p);
}
await peerController.close();
}
}