up: add lock option for fire event

This commit is contained in:
inhere
2021-03-11 22:09:48 +08:00
parent ca71faacb4
commit d79fad3e64
2 changed files with 22 additions and 0 deletions

View File

@@ -206,6 +206,7 @@ func TestMustFire(t *testing.T) {
func TestManager_FireEvent(t *testing.T) {
em := NewManager("test")
em.EnableLock()
e1 := NewBasic("e1", nil)
em.AddEvent(e1)
@@ -228,6 +229,7 @@ func TestManager_FireEvent(t *testing.T) {
func TestManager_FireEvent2(t *testing.T) {
buf := new(bytes.Buffer)
mgr := NewManager("test")
mgr.DisableLock()
evt1 := NewBasic("evt1", nil).Fill(nil, M{"n": "inhere"})
mgr.AddEvent(evt1)

View File

@@ -3,6 +3,7 @@ package event
import (
"regexp"
"strings"
"sync"
)
// Wildcard event name
@@ -28,6 +29,10 @@ type ManagerFace interface {
// Manager event manager definition. for manage events and listeners
type Manager struct {
sync.Mutex
// enable lock on fire event.
enableLock bool
// name of the manager
name string
// pool sync.Pool
// is an sample for new BasicEvent
@@ -54,6 +59,16 @@ func NewManager(name string) *Manager {
return em
}
// EnableLock of the manager.
func (em *Manager) EnableLock() {
em.enableLock = true
}
// DisableLock of the manager.
func (em *Manager) DisableLock() {
em.enableLock = false
}
/*************************************************************
* Listener Manage: - register listener
*************************************************************/
@@ -157,6 +172,11 @@ func (em *Manager) Fire(name string, params M) (err error, e Event) {
}
}
if em.enableLock {
em.Lock()
defer em.Unlock()
}
// call listeners use defined Event
if e, ok := em.events[name]; ok {
if params != nil {