module.go 1.7 KB
Newer Older
Y
Your Name 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
package ksitigarbha

import (
	"log"


)

// 这里只是在程序启动的时候会执行新增操作,所以不需要加锁
type modelManager struct {
	modules map[string]IModule
	names   []string
	namespaceNames map[string]string
Y
Your Name 已提交
14
	handlers map[string][]ConfigHandler
Y
Your Name 已提交
15 16
}

Y
Your Name 已提交
17 18
func (m *modelManager) Handler(name string, handler ConfigHandler) {
	m.handlers[name] = append(m.handlers[name],handler)
Y
Your Name 已提交
19 20
}

Y
Your Name 已提交
21 22 23 24 25 26 27 28 29
func (m *modelManager) Close(name string) {
	namespace,has:= m.getNameSpace(name)
	if !has{
		return
	}
	hs:=m.handlers[name]
	for _,handler:=range hs{
		handler.OnClose(namespace,name)
	}
Y
Your Name 已提交
30 31
}

Y
Your Name 已提交
32 33 34 35 36 37
func (m *modelManager) Open(name string, config string) {
	namespace,has:= m.getNameSpace(name)
	if !has{
		return
	}
	hs:=m.handlers[name]
Y
Your Name 已提交
38

Y
Your Name 已提交
39 40
	for _,handler:=range hs{
		handler.OnOpen(namespace,name,config)
Y
Your Name 已提交
41
	}
Y
Your Name 已提交
42
}
Y
Your Name 已提交
43

Y
Your Name 已提交
44 45 46 47 48 49 50
func newModelManager() *modelManager {
	return &modelManager{
		modules:        make(map[string]IModule),
		names:          make([]string,0,5),
		namespaceNames: make(map[string]string),
		handlers: 		make(map[string][]ConfigHandler),
	}
Y
Your Name 已提交
51 52
}

Y
Your Name 已提交
53

Y
Your Name 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
func (m *modelManager) add(name string,f IModule) {

	_,has:=m.modules[name]
	if has{
		log.Panic("register ksitigarbha duplicate name")
	}
	m.modules[name] =f
	m.names = append(m.names, f.GetName())
	m.namespaceNames[name] = f.GetNameSpace()
}

func (m *modelManager) getModuleNames() []string {
	return m.names
}

func (m *modelManager) getModuleModel(name string) (IModule ,bool){

	v, ok := m.modules[name]
	return v,ok
}

func (m *modelManager) isExisted(name string) bool {

	_, ok := m.modules[name]

	return ok
}
Y
Your Name 已提交
81 82 83
func (m *modelManager) getNameSpace(name string) (namespace string,has bool) {
	namespace,has = m.namespaceNames[name]
	return
Y
Your Name 已提交
84 85 86 87 88
}
func (m *modelManager) getModuleCount() int {
	count := len(m.modules)
	return count
}