|
@@ -38,12 +38,12 @@ type idEntry struct {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
type UserSet interface {
|
|
type UserSet interface {
|
|
|
- AddUser(user vmess.User) error
|
|
|
|
|
- GetUser(timeHash []byte) (vmess.User, Timestamp, bool)
|
|
|
|
|
|
|
+ AddUser(user *vmess.User) error
|
|
|
|
|
+ GetUser(timeHash []byte) (*vmess.User, Timestamp, bool)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
type TimedUserSet struct {
|
|
type TimedUserSet struct {
|
|
|
- validUsers []vmess.User
|
|
|
|
|
|
|
+ validUsers []*vmess.User
|
|
|
userHash map[[16]byte]indexTimePair
|
|
userHash map[[16]byte]indexTimePair
|
|
|
ids []*idEntry
|
|
ids []*idEntry
|
|
|
access sync.RWMutex
|
|
access sync.RWMutex
|
|
@@ -56,7 +56,7 @@ type indexTimePair struct {
|
|
|
|
|
|
|
|
func NewTimedUserSet() UserSet {
|
|
func NewTimedUserSet() UserSet {
|
|
|
tus := &TimedUserSet{
|
|
tus := &TimedUserSet{
|
|
|
- validUsers: make([]vmess.User, 0, 16),
|
|
|
|
|
|
|
+ validUsers: make([]*vmess.User, 0, 16),
|
|
|
userHash: make(map[[16]byte]indexTimePair, 512),
|
|
userHash: make(map[[16]byte]indexTimePair, 512),
|
|
|
access: sync.RWMutex{},
|
|
access: sync.RWMutex{},
|
|
|
ids: make([]*idEntry, 0, 512),
|
|
ids: make([]*idEntry, 0, 512),
|
|
@@ -94,21 +94,21 @@ func (us *TimedUserSet) updateUserHash(tick <-chan time.Time) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (us *TimedUserSet) AddUser(user vmess.User) error {
|
|
|
|
|
|
|
+func (us *TimedUserSet) AddUser(user *vmess.User) error {
|
|
|
idx := len(us.validUsers)
|
|
idx := len(us.validUsers)
|
|
|
us.validUsers = append(us.validUsers, user)
|
|
us.validUsers = append(us.validUsers, user)
|
|
|
|
|
|
|
|
nowSec := time.Now().Unix()
|
|
nowSec := time.Now().Unix()
|
|
|
|
|
|
|
|
entry := &idEntry{
|
|
entry := &idEntry{
|
|
|
- id: user.ID(),
|
|
|
|
|
|
|
+ id: user.ID,
|
|
|
userIdx: idx,
|
|
userIdx: idx,
|
|
|
lastSec: Timestamp(nowSec - cacheDurationSec),
|
|
lastSec: Timestamp(nowSec - cacheDurationSec),
|
|
|
hashes: collect.NewSizedQueue(2*cacheDurationSec + 1),
|
|
hashes: collect.NewSizedQueue(2*cacheDurationSec + 1),
|
|
|
}
|
|
}
|
|
|
us.generateNewHashes(Timestamp(nowSec+cacheDurationSec), idx, entry)
|
|
us.generateNewHashes(Timestamp(nowSec+cacheDurationSec), idx, entry)
|
|
|
us.ids = append(us.ids, entry)
|
|
us.ids = append(us.ids, entry)
|
|
|
- for _, alterid := range user.AlterIDs() {
|
|
|
|
|
|
|
+ for _, alterid := range user.AlterIDs {
|
|
|
entry := &idEntry{
|
|
entry := &idEntry{
|
|
|
id: alterid,
|
|
id: alterid,
|
|
|
userIdx: idx,
|
|
userIdx: idx,
|
|
@@ -122,7 +122,7 @@ func (us *TimedUserSet) AddUser(user vmess.User) error {
|
|
|
return nil
|
|
return nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (us *TimedUserSet) GetUser(userHash []byte) (vmess.User, Timestamp, bool) {
|
|
|
|
|
|
|
+func (us *TimedUserSet) GetUser(userHash []byte) (*vmess.User, Timestamp, bool) {
|
|
|
defer us.access.RUnlock()
|
|
defer us.access.RUnlock()
|
|
|
us.access.RLock()
|
|
us.access.RLock()
|
|
|
var fixedSizeHash [16]byte
|
|
var fixedSizeHash [16]byte
|