lbry.go/dht/store.go

43 lines
707 B
Go
Raw Normal View History

2018-03-07 22:15:58 +01:00
package dht
2018-03-08 01:49:33 +01:00
import "sync"
2018-03-07 22:15:58 +01:00
type peer struct {
2018-03-08 01:49:33 +01:00
nodeID bitmap
2018-03-07 22:15:58 +01:00
}
type peerStore struct {
2018-03-08 01:49:33 +01:00
data map[string][]peer
2018-03-07 22:15:58 +01:00
lock sync.RWMutex
}
func newPeerStore() *peerStore {
return &peerStore{
data: make(map[string][]peer),
2018-03-07 22:15:58 +01:00
}
}
2018-03-08 01:49:33 +01:00
func (s *peerStore) Insert(key string, nodeId bitmap) {
2018-03-07 22:15:58 +01:00
s.lock.Lock()
defer s.lock.Unlock()
2018-03-08 01:49:33 +01:00
newPeer := peer{nodeID: nodeId}
2018-03-07 22:15:58 +01:00
_, ok := s.data[key]
if !ok {
s.data[key] = []peer{newPeer}
} else {
s.data[key] = append(s.data[key], newPeer)
}
}
2018-03-08 01:49:33 +01:00
func (s *peerStore) Get(key string) []bitmap {
2018-03-07 22:15:58 +01:00
s.lock.RLock()
defer s.lock.RUnlock()
var nodes []bitmap
2018-03-07 22:15:58 +01:00
if peers, ok := s.data[key]; ok {
for _, p := range peers {
2018-03-08 01:49:33 +01:00
nodes = append(nodes, p.nodeID)
2018-03-07 22:15:58 +01:00
}
}
return nodes
}