51 lines
884 B
Go
51 lines
884 B
Go
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{})
|
|
}
|