feat:完善项目
This commit is contained in:
56
app/service/eventhub.go
Normal file
56
app/service/eventhub.go
Normal 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)
|
||||
}
|
Reference in New Issue
Block a user