2024-05-17 18:30:33 +08:00
|
|
|
// Copyright 2021 GoEdge goedge.cdn@gmail.com. All rights reserved.
|
2021-11-17 16:16:09 +08:00
|
|
|
|
|
|
|
|
package iplibrary
|
|
|
|
|
|
|
|
|
|
import "sync"
|
|
|
|
|
|
|
|
|
|
var SharedServerListManager = NewServerListManager()
|
|
|
|
|
|
|
|
|
|
// ServerListManager 服务相关名单
|
|
|
|
|
type ServerListManager struct {
|
|
|
|
|
whiteMap map[int64]*IPList // serverId => *List
|
|
|
|
|
blackMap map[int64]*IPList // serverId => *List
|
|
|
|
|
|
|
|
|
|
locker sync.RWMutex
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewServerListManager() *ServerListManager {
|
|
|
|
|
return &ServerListManager{
|
|
|
|
|
whiteMap: map[int64]*IPList{},
|
|
|
|
|
blackMap: map[int64]*IPList{},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (this *ServerListManager) FindWhiteList(serverId int64, autoCreate bool) *IPList {
|
|
|
|
|
this.locker.RLock()
|
|
|
|
|
list, ok := this.whiteMap[serverId]
|
|
|
|
|
this.locker.RUnlock()
|
|
|
|
|
if ok {
|
|
|
|
|
return list
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if autoCreate {
|
|
|
|
|
list = NewIPList()
|
|
|
|
|
this.locker.Lock()
|
|
|
|
|
this.whiteMap[serverId] = list
|
|
|
|
|
this.locker.Unlock()
|
|
|
|
|
|
|
|
|
|
return list
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (this *ServerListManager) FindBlackList(serverId int64, autoCreate bool) *IPList {
|
|
|
|
|
this.locker.RLock()
|
|
|
|
|
list, ok := this.blackMap[serverId]
|
|
|
|
|
this.locker.RUnlock()
|
|
|
|
|
if ok {
|
|
|
|
|
return list
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if autoCreate {
|
|
|
|
|
list = NewIPList()
|
|
|
|
|
this.locker.Lock()
|
|
|
|
|
this.blackMap[serverId] = list
|
|
|
|
|
this.locker.Unlock()
|
|
|
|
|
|
|
|
|
|
return list
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
2024-04-06 10:07:39 +08:00
|
|
|
|
|
|
|
|
func (this *ServerListManager) BlackMap() map[int64]*IPList {
|
|
|
|
|
return this.blackMap
|
|
|
|
|
}
|