From f69fa494eca601f7156337ab61dd17b1aca0135a Mon Sep 17 00:00:00 2001 From: Patrick <dreamlike.sky@foxmail.com> Date: Mon, 30 Mar 2020 19:06:52 +0800 Subject: [PATCH] add default eventDispatch type and handle eventType is ptr --- common/observer/dispatcher/direct_event_dispatcher.go | 4 ++++ common/observer/dispatcher/direct_event_dispatcher_test.go | 3 ++- common/observer/listenable.go | 7 +++++++ config/base_config.go | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/common/observer/dispatcher/direct_event_dispatcher.go b/common/observer/dispatcher/direct_event_dispatcher.go index f255bd6c3..412585b79 100644 --- a/common/observer/dispatcher/direct_event_dispatcher.go +++ b/common/observer/dispatcher/direct_event_dispatcher.go @@ -43,6 +43,10 @@ func NewDirectEventDispatcher() observer.EventDispatcher { } func (ded *DirectEventDispatcher) Dispatch(event observer.Event) { + if event == nil { + logger.Warnf("[DirectEventDispatcher] dispatch event nil") + return + } eventType := reflect.TypeOf(event).Elem() value, loaded := ded.ListenersCache.Load(eventType) if !loaded { diff --git a/common/observer/dispatcher/direct_event_dispatcher_test.go b/common/observer/dispatcher/direct_event_dispatcher_test.go index d0b0e828c..557dd1522 100644 --- a/common/observer/dispatcher/direct_event_dispatcher_test.go +++ b/common/observer/dispatcher/direct_event_dispatcher_test.go @@ -29,6 +29,7 @@ func TestDirectEventDispatcher_Dispatch(t *testing.T) { ded.AddEventListener(&TestEventListener{}) ded.AddEventListener(&TestEventListener1{}) ded.Dispatch(&TestEvent{}) + ded.Dispatch(nil) } type TestEvent struct { @@ -50,7 +51,7 @@ func (tel *TestEventListener) GetPriority() int { } func (tel *TestEventListener) GetEventType() reflect.Type { - return reflect.TypeOf(TestEvent{}) + return reflect.TypeOf(&TestEvent{}) } type TestEventListener1 struct { diff --git a/common/observer/listenable.go b/common/observer/listenable.go index 6dced504e..6a5d4e35d 100644 --- a/common/observer/listenable.go +++ b/common/observer/listenable.go @@ -18,6 +18,7 @@ package observer import ( + "reflect" "sort" "sync" ) @@ -44,6 +45,9 @@ func NewBaseListenable() Listenable { // AddEventListener ... func (bl *BaseListenable) AddEventListener(listener EventListener) { eventType := listener.GetEventType() + if eventType.Kind() == reflect.Ptr { + eventType = eventType.Elem() + } var listenersSlice []EventListener bl.Mutex.Lock() defer bl.Mutex.Unlock() @@ -72,6 +76,9 @@ func (bl *BaseListenable) AddEventListeners(listenersSlice []EventListener) { // RemoveEventListener ... func (bl *BaseListenable) RemoveEventListener(listener EventListener) { eventType := listener.GetEventType() + if eventType.Kind() == reflect.Ptr { + eventType = eventType.Elem() + } bl.Mutex.Lock() defer bl.Mutex.Unlock() value, loaded := bl.ListenersCache.Load(eventType) diff --git a/config/base_config.go b/config/base_config.go index 74634a5f6..f58138d2e 100644 --- a/config/base_config.go +++ b/config/base_config.go @@ -46,7 +46,7 @@ type BaseConfig struct { configCenterUrl *common.URL prefix string fatherConfig interface{} - eventDispatcherType string `yaml:"direct" json:"direct,omitempty"` + eventDispatcherType string `default:"direct" yaml:"event_dispatcher_type" json:"event_dispatcher_type,omitempty"` MetricConfig *MetricConfig `yaml:"metrics" json:"metrics,omitempty"` fileStream *bytes.Buffer } -- GitLab