goProject/.svn/pristine/1b/1b2c410b7678eef959ff8f8c0e69d4051e45ed17.svn-base
2025-01-06 16:21:36 +08:00

84 lines
1.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package notify_util
import (
"fmt"
"goutil/syncUtil"
)
var (
// key:初始化成功的标志名称 val:占位符
registerNC = make(map[string]*notifyCenter)
mutex = syncUtil.NewRWLocker()
)
// getItemOrAdd
// @description: 获取注册的通知对象
// parameter:
// @chanGroup:
// return:
// @*notifyCenter:
func getItemOrAdd(chanGroup string) *notifyCenter {
if isOk, prevStack, currStack := mutex.Lock(deathLockTime); isOk == false {
//记日志
errMsg := fmt.Sprintf("Lock timeout! \n上一个堆栈:\n%s \n当前堆栈:\n%s", prevStack, currStack)
panic(errMsg)
}
defer mutex.Unlock()
nc, exists := registerNC[chanGroup]
if exists {
return nc
}
nc = newNotifyCenter()
registerNC[chanGroup] = nc
return nc
}
// Register
// @description: 注册需要被通知的对象
// parameter:
// @chanGroup:通知的分组标识
// @chanName:唯一标识
// @cf:回调方法
// return:
func Register(chanGroup string, chanName string, cf func()) {
nc := getItemOrAdd(chanGroup)
nc.register(chanName, cf)
}
// Unregister
// @description: 取消启动成功通知注册
// parameter:
// @chanGroup:分组标识
// @name:唯一标识
// return:
func Unregister(chanGroup string, name string) {
nc := getItemOrAdd(chanGroup)
nc.unregister(name)
}
// Notify
// @description: 通知分组所有已注册的对象
// parameter:
// @chanGroup:分组标识
// return:
func Notify(chanGroup string) {
nc := getItemOrAdd(chanGroup)
nc.notify()
}
// Notify2
// @description: 通知所有已注册的对象该方法会在捕获第一个err的时候停止后续的通知。多用于系统启动的判定
// parameter:
// @chanGroup:分组标识
// return:
// @err:
func Notify2(chanGroup string) (err error) {
nc := getItemOrAdd(chanGroup)
err = nc.notify2()
return
}