mirror of
https://github.com/v2ray/v2ray-core.git
synced 2026-11-02 16:21:05 +00:00
Introduce user level
This commit is contained in:
1 parent
d585ec0593
commit
b44098d752
6 files changed
+58
-20
No files matched your search
@@ -15,11 +15,11 @@ const (
|
||||
|
||||
type UserSet interface {
|
||||
AddUser(user config.User) error
|
||||
GetUser(timeHash []byte) (*config.ID, int64, bool)
|
||||
GetUser(timeHash []byte) (config.User, int64, bool)
|
||||
}
|
||||
|
||||
type TimedUserSet struct {
|
||||
validUserIds []*config.ID
|
||||
validUsers []config.User
|
||||
userHash map[string]indexTimePair
|
||||
userHashDeleteQueue *collect.TimedQueue
|
||||
access sync.RWMutex
|
||||
@@ -32,7 +32,7 @@ type indexTimePair struct {
|
||||
|
||||
func NewTimedUserSet() UserSet {
|
||||
tus := &TimedUserSet{
|
||||
validUserIds: make([]*config.ID, 0, 16),
|
||||
validUsers: make([]config.User, 0, 16),
|
||||
userHash: make(map[string]indexTimePair, 512),
|
||||
userHashDeleteQueue: collect.NewTimedQueue(updateIntervalSec),
|
||||
access: sync.RWMutex{},
|
||||
@@ -67,8 +67,8 @@ func (us *TimedUserSet) updateUserHash(tick <-chan time.Time) {
|
||||
|
||||
for now := range tick {
|
||||
nowSec := now.Unix() + cacheDurationSec
|
||||
for idx, id := range us.validUserIds {
|
||||
us.generateNewHashes(lastSec, nowSec, idx, id)
|
||||
for idx, user := range us.validUsers {
|
||||
us.generateNewHashes(lastSec, nowSec, idx, user.ID())
|
||||
}
|
||||
lastSec = nowSec
|
||||
}
|
||||
@@ -76,8 +76,8 @@ func (us *TimedUserSet) updateUserHash(tick <-chan time.Time) {
|
||||
|
||||
func (us *TimedUserSet) AddUser(user config.User) error {
|
||||
id := user.ID()
|
||||
idx := len(us.validUserIds)
|
||||
us.validUserIds = append(us.validUserIds, id)
|
||||
idx := len(us.validUsers)
|
||||
us.validUsers = append(us.validUsers, user)
|
||||
|
||||
nowSec := time.Now().Unix()
|
||||
lastSec := nowSec - cacheDurationSec
|
||||
@@ -86,12 +86,12 @@ func (us *TimedUserSet) AddUser(user config.User) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (us TimedUserSet) GetUser(userHash []byte) (*config.ID, int64, bool) {
|
||||
func (us TimedUserSet) GetUser(userHash []byte) (config.User, int64, bool) {
|
||||
defer us.access.RUnlock()
|
||||
us.access.RLock()
|
||||
pair, found := us.userHash[string(userHash)]
|
||||
if found {
|
||||
return us.validUserIds[pair.index], pair.timeSec, true
|
||||
return us.validUsers[pair.index], pair.timeSec, true
|
||||
}
|
||||
return nil, 0, false
|
||||
}
|
||||
Reference in new issue
Block a user