This commit is contained in:
henry
2021-11-02 09:43:19 +08:00
parent 570bb3c772
commit 4734344985
78 changed files with 4798 additions and 0 deletions

56
app/service/eventhub.go Normal file
View File

@ -0,0 +1,56 @@
package service
import (
"sync"
)
// listener 监听
type listener struct {
handler ListenerHandle
}
// listeners 监听器
type listeners struct {
listener map[interface{}]*listener
mutex *sync.RWMutex
}
// ListenerHandle 监听事件
type ListenerHandle interface {
Handle(args ...interface{})
}
// listenerObject 监听器
var listenerObject = &listeners{
listener: make(map[interface{}]*listener, 0),
mutex: new(sync.RWMutex),
}
// Subscribe 注册事件
func Subscribe(prefix interface{}, handler ListenerHandle) {
listenerObject.mutex.Lock()
defer listenerObject.mutex.Unlock()
listenerObject.listener[prefix] = &listener{handler: handler}
}
// Publish 推送事件
func Publish(prefix interface{}, args ...interface{}) {
listenerObject.mutex.RLock()
defer listenerObject.mutex.RUnlock()
listener, has := listenerObject.listener[prefix]
if !has {
return
}
listener.handler.Handle(args...)
}
// Unsubscribe 取消监听
func Unsubscribe(prefix interface{}) {
listenerObject.mutex.Lock()
defer listenerObject.mutex.Unlock()
_, has := listenerObject.listener[prefix]
if !has {
return
}
delete(listenerObject.listener, prefix)
}