mirror of
https://github.com/lkmio/gb-cms.git
synced 2025-09-27 03:56:08 +08:00
92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
package main
|
|
|
|
import "sync"
|
|
|
|
var (
|
|
PlatformManager *platformManager
|
|
)
|
|
|
|
func init() {
|
|
PlatformManager = &platformManager{
|
|
platforms: make(map[string]interface{}, 8),
|
|
addrMap: make(map[string]interface{}, 8),
|
|
}
|
|
}
|
|
|
|
type platformManager struct {
|
|
platforms map[string]interface{} //上级id->平台
|
|
addrMap map[string]interface{} //上级地址->平台
|
|
lock sync.RWMutex
|
|
}
|
|
|
|
func (p *platformManager) AddPlatform(platform *GBPlatform) bool {
|
|
p.lock.Lock()
|
|
defer p.lock.Unlock()
|
|
|
|
// 以上级平台ID作为主键
|
|
if _, ok := p.addrMap[platform.sipClient.SeverID]; ok {
|
|
return false
|
|
}
|
|
|
|
p.platforms[platform.sipClient.SeverID] = platform
|
|
p.addrMap[platform.sipClient.Domain] = platform
|
|
return true
|
|
}
|
|
|
|
func (p *platformManager) ExistPlatform(id string) bool {
|
|
p.lock.RLock()
|
|
defer p.lock.RUnlock()
|
|
_, ok := p.platforms[id]
|
|
return ok
|
|
}
|
|
|
|
func (p *platformManager) ExistPlatformWithServerAddr(addr string) bool {
|
|
p.lock.RLock()
|
|
defer p.lock.RUnlock()
|
|
_, ok := p.addrMap[addr]
|
|
return ok
|
|
}
|
|
|
|
func (p *platformManager) FindPlatform(id string) *GBPlatform {
|
|
p.lock.RLock()
|
|
defer p.lock.RUnlock()
|
|
if platform, ok := p.platforms[id]; ok {
|
|
return platform.(*GBPlatform)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (p *platformManager) RemovePlatform(id string) *GBPlatform {
|
|
p.lock.Lock()
|
|
defer p.lock.Unlock()
|
|
|
|
platform, ok := p.platforms[id]
|
|
if !ok {
|
|
return nil
|
|
}
|
|
|
|
delete(p.platforms, id)
|
|
delete(p.addrMap, platform.(*GBPlatform).sipClient.Domain)
|
|
return platform.(*GBPlatform)
|
|
}
|
|
|
|
func (p *platformManager) FindPlatformWithServerAddr(addr string) *GBPlatform {
|
|
p.lock.RLock()
|
|
defer p.lock.RUnlock()
|
|
if platform, ok := p.addrMap[addr]; ok {
|
|
return platform.(*GBPlatform)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (p *platformManager) Platforms() []*GBPlatform {
|
|
p.lock.RLock()
|
|
defer p.lock.RUnlock()
|
|
|
|
var platforms []*GBPlatform
|
|
for _, platform := range p.platforms {
|
|
platforms = append(platforms, platform.(*GBPlatform))
|
|
}
|
|
return platforms
|
|
}
|