package client import "storrent/bt" type peerManager struct { peers map[*bt.Peer]struct{} maxPeers int } func newPeerManager(maxPeers int) *peerManager { return &peerManager{ peers: make(map[*bt.Peer]struct{}), maxPeers: maxPeers, } } func (pm *peerManager) add(p *bt.Peer) bool { if len(pm.peers) >= pm.maxPeers { return false } pm.peers[p] = struct{}{} return true } func (pm *peerManager) addUnlimited(p *bt.Peer) { pm.peers[p] = struct{}{} } func (pm *peerManager) remove(p *bt.Peer) { delete(pm.peers, p) } func (pm *peerManager) count() int { return len(pm.peers) } func (pm *peerManager) all() []*bt.Peer { peers := make([]*bt.Peer, 0, len(pm.peers)) for p := range pm.peers { peers = append(peers, p) } return peers } func (pm *peerManager) closeAll() { for p := range pm.peers { p.Close() } pm.peers = make(map[*bt.Peer]struct{}) }