2019-07-29 07:01:59 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import "sync"
|
|
|
|
|
|
|
|
type GroupManager struct {
|
|
|
|
groups map[string]Group
|
|
|
|
mu sync.Mutex
|
|
|
|
}
|
|
|
|
|
|
|
|
var groupManagerInstance *GroupManager
|
|
|
|
var groupManagerInstanceLock sync.Mutex
|
|
|
|
|
|
|
|
func InstanceOfGroupManager() *GroupManager {
|
2019-07-30 07:35:29 +00:00
|
|
|
defer groupManagerInstanceLock.Unlock()
|
2019-07-29 07:01:59 +00:00
|
|
|
groupManagerInstanceLock.Lock()
|
|
|
|
|
|
|
|
if groupManagerInstance == nil {
|
|
|
|
groupManagerInstance = &GroupManager{groups: map[string]Group{}}
|
2019-08-01 01:54:38 +00:00
|
|
|
groupManagerInstance.groups["default"] = Group{Name: "default", Weight: 10, Reserved: false}
|
2019-07-29 07:01:59 +00:00
|
|
|
}
|
|
|
|
return groupManagerInstance
|
|
|
|
}
|
|
|
|
|
2020-05-24 13:07:02 +00:00
|
|
|
func (gm *GroupManager) init(conf Configuration) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2019-07-29 07:01:59 +00:00
|
|
|
func (gm *GroupManager) Add(group Group) MsgGroupCreate {
|
|
|
|
defer gm.mu.Unlock()
|
2019-07-30 07:35:29 +00:00
|
|
|
gm.mu.Lock()
|
2019-07-29 07:01:59 +00:00
|
|
|
if _, ok := gm.groups[group.Name]; ok {
|
|
|
|
return MsgGroupCreate{Code: 1, Error: "Name already exists!"}
|
|
|
|
}
|
|
|
|
gm.groups[group.Name] = group
|
|
|
|
return MsgGroupCreate{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (gm *GroupManager) Update(group Group) MsgGroupCreate {
|
|
|
|
defer gm.mu.Unlock()
|
2019-07-30 07:35:29 +00:00
|
|
|
gm.mu.Lock()
|
2019-07-29 07:01:59 +00:00
|
|
|
if _, ok := gm.groups[group.Name]; !ok {
|
|
|
|
return MsgGroupCreate{Code: 1, Error: "Group not exists!"}
|
|
|
|
}
|
|
|
|
gm.groups[group.Name] = group
|
|
|
|
return MsgGroupCreate{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (gm *GroupManager) Remove(group Group) MsgGroupCreate {
|
|
|
|
defer gm.mu.Unlock()
|
2019-07-30 07:35:29 +00:00
|
|
|
gm.mu.Lock()
|
2019-07-29 07:01:59 +00:00
|
|
|
if _, ok := gm.groups[group.Name]; !ok {
|
|
|
|
return MsgGroupCreate{Code: 1, Error: "Group not exists!"}
|
|
|
|
}
|
|
|
|
delete(gm.groups, group.Name)
|
|
|
|
return MsgGroupCreate{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (gm *GroupManager) List() MsgGroupList {
|
|
|
|
defer gm.mu.Unlock()
|
2019-07-30 07:35:29 +00:00
|
|
|
gm.mu.Lock()
|
2019-08-01 05:42:53 +00:00
|
|
|
var result []Group
|
2019-07-29 07:01:59 +00:00
|
|
|
for _, v := range gm.groups {
|
|
|
|
result = append(result, v)
|
|
|
|
}
|
|
|
|
return MsgGroupList{Groups: result}
|
|
|
|
}
|
2019-08-01 02:42:37 +00:00
|
|
|
|
|
|
|
func (gm *GroupManager) get(name string) *Group {
|
|
|
|
defer gm.mu.Unlock()
|
|
|
|
gm.mu.Lock()
|
|
|
|
|
|
|
|
for _, v := range gm.groups {
|
|
|
|
if v.Name == name {
|
|
|
|
return &v
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|