60 lines
1.2 KiB
Go
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
|
|
}
|