mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-02 22:10:25 +08:00
66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
// Copyright 2021 GoEdge goedge.cdn@gmail.com. All rights reserved.
|
|
|
|
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
|
|
}
|
|
|
|
func (this *ServerListManager) BlackMap() map[int64]*IPList {
|
|
return this.blackMap
|
|
}
|