tracker/server/store/memory/client_store.go
2016-03-02 21:05:32 -05:00

60 lines
1.2 KiB
Go

// Copyright 2016 The Chihaya Authors. All rights reserved.
// Use of this source code is governed by the BSD 2-Clause license,
// which can be found in the LICENSE file.
package memory
import (
"sync"
"github.com/chihaya/chihaya"
"github.com/chihaya/chihaya/pkg/clientid"
"github.com/chihaya/chihaya/server/store"
)
func init() {
store.RegisterClientStoreDriver("memory", &clientStoreDriver{})
}
type clientStoreDriver struct{}
func (d *clientStoreDriver) New(cfg *store.Config) (store.ClientStore, error) {
return &clientStore{
clientIDs: make(map[string]struct{}),
}, nil
}
type clientStore struct {
clientIDs map[string]struct{}
sync.RWMutex
}
var _ store.ClientStore = &clientStore{}
func (s *clientStore) CreateClient(clientID string) error {
s.Lock()
defer s.Unlock()
s.clientIDs[clientID] = struct{}{}
return nil
}
func (s *clientStore) FindClient(peerID chihaya.PeerID) (bool, error) {
clientID := clientid.New(string(peerID))
s.RLock()
defer s.RUnlock()
_, ok := s.clientIDs[clientID]
return ok, nil
}
func (s *clientStore) DeleteClient(clientID string) error {
s.Lock()
defer s.Unlock()
delete(s.clientIDs, clientID)
return nil
}