func (peer *Peer) forEachConnectedPeer(establishedAndSymmetric bool, exclude map[PeerName]PeerName, f func(*Peer)) {
	for remoteName, conn := range peer.connections {
		if establishedAndSymmetric && !conn.isEstablished() {
			continue
		}
		if _, found := exclude[remoteName]; found {
			continue
		}
		remotePeer := conn.Remote()
		if remoteConn, found := remotePeer.connections[peer.Name]; !establishedAndSymmetric || (found && remoteConn.isEstablished()) {
			f(remotePeer)
		}
	}
}
func (peer *Peer) forEachConnectedPeer(establishedAndSymmetric bool, exclude map[PeerName]PeerName, f func(*Peer)) {
	for remoteName, conn := range peer.connections {
		if establishedAndSymmetric && !conn.isEstablished() {
			continue
		}
		if _, found := exclude[remoteName]; found {
			continue
		}
		remotePeer := conn.Remote()
		if remoteConn, found := remotePeer.connections[peer.Name]; !establishedAndSymmetric || (found && remoteConn.isEstablished()) {
			f(remotePeer)
		}
	}
}
func ( peer * Peer ) forEachConnectedPeer ( establishedAndSymmetric bool , exclude map [ PeerName ] PeerName , f func ( * Peer ) ) { for remoteName , conn := range peer . connections { if establishedAndSymmetric && ! conn . isEstablished ( ) { continue } if _ , found := exclude [ remoteName ] ; found { continue } remotePeer := conn . Remote ( ) if remoteConn , found := remotePeer . connections [ peer . Name ] ; ! establishedAndSymmetric || ( found && remoteConn . isEstablished ( ) ) { f ( remotePeer ) } } }
// Apply f to all peers reachable by peer. If establishedAndSymmetric is true,
// only peers with established bidirectional connections will be selected. The
// exclude maps is treated as a set of remote peers to blacklist.
Apply f to all peers reachable by peer . If establishedAndSymmetric is true only peers with established bidirectional connections will be selected . The exclude maps is treated as a set of remote peers to blacklist .