storrent/client/peer.go
2026-01-19 21:13:01 +09:00

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{})
}