mirror of
https://github.com/gookit/event
synced 2025-12-24 10:30:50 +08:00
up: add lock option for fire event
This commit is contained in:
@@ -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)
|
||||
|
||||
20
manager.go
20
manager.go
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user