Skip to content
Snippets Groups Projects
Commit f69fa494 authored by Patrick's avatar Patrick
Browse files

add default eventDispatch type and handle eventType is ptr

parent 90d6f6f4
No related branches found
No related tags found
No related merge requests found
...@@ -43,6 +43,10 @@ func NewDirectEventDispatcher() observer.EventDispatcher { ...@@ -43,6 +43,10 @@ func NewDirectEventDispatcher() observer.EventDispatcher {
} }
func (ded *DirectEventDispatcher) Dispatch(event observer.Event) { func (ded *DirectEventDispatcher) Dispatch(event observer.Event) {
if event == nil {
logger.Warnf("[DirectEventDispatcher] dispatch event nil")
return
}
eventType := reflect.TypeOf(event).Elem() eventType := reflect.TypeOf(event).Elem()
value, loaded := ded.ListenersCache.Load(eventType) value, loaded := ded.ListenersCache.Load(eventType)
if !loaded { if !loaded {
......
...@@ -29,6 +29,7 @@ func TestDirectEventDispatcher_Dispatch(t *testing.T) { ...@@ -29,6 +29,7 @@ func TestDirectEventDispatcher_Dispatch(t *testing.T) {
ded.AddEventListener(&TestEventListener{}) ded.AddEventListener(&TestEventListener{})
ded.AddEventListener(&TestEventListener1{}) ded.AddEventListener(&TestEventListener1{})
ded.Dispatch(&TestEvent{}) ded.Dispatch(&TestEvent{})
ded.Dispatch(nil)
} }
type TestEvent struct { type TestEvent struct {
...@@ -50,7 +51,7 @@ func (tel *TestEventListener) GetPriority() int { ...@@ -50,7 +51,7 @@ func (tel *TestEventListener) GetPriority() int {
} }
func (tel *TestEventListener) GetEventType() reflect.Type { func (tel *TestEventListener) GetEventType() reflect.Type {
return reflect.TypeOf(TestEvent{}) return reflect.TypeOf(&TestEvent{})
} }
type TestEventListener1 struct { type TestEventListener1 struct {
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
package observer package observer
import ( import (
"reflect"
"sort" "sort"
"sync" "sync"
) )
...@@ -44,6 +45,9 @@ func NewBaseListenable() Listenable { ...@@ -44,6 +45,9 @@ func NewBaseListenable() Listenable {
// AddEventListener ... // AddEventListener ...
func (bl *BaseListenable) AddEventListener(listener EventListener) { func (bl *BaseListenable) AddEventListener(listener EventListener) {
eventType := listener.GetEventType() eventType := listener.GetEventType()
if eventType.Kind() == reflect.Ptr {
eventType = eventType.Elem()
}
var listenersSlice []EventListener var listenersSlice []EventListener
bl.Mutex.Lock() bl.Mutex.Lock()
defer bl.Mutex.Unlock() defer bl.Mutex.Unlock()
...@@ -72,6 +76,9 @@ func (bl *BaseListenable) AddEventListeners(listenersSlice []EventListener) { ...@@ -72,6 +76,9 @@ func (bl *BaseListenable) AddEventListeners(listenersSlice []EventListener) {
// RemoveEventListener ... // RemoveEventListener ...
func (bl *BaseListenable) RemoveEventListener(listener EventListener) { func (bl *BaseListenable) RemoveEventListener(listener EventListener) {
eventType := listener.GetEventType() eventType := listener.GetEventType()
if eventType.Kind() == reflect.Ptr {
eventType = eventType.Elem()
}
bl.Mutex.Lock() bl.Mutex.Lock()
defer bl.Mutex.Unlock() defer bl.Mutex.Unlock()
value, loaded := bl.ListenersCache.Load(eventType) value, loaded := bl.ListenersCache.Load(eventType)
......
...@@ -46,7 +46,7 @@ type BaseConfig struct { ...@@ -46,7 +46,7 @@ type BaseConfig struct {
configCenterUrl *common.URL configCenterUrl *common.URL
prefix string prefix string
fatherConfig interface{} 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"` MetricConfig *MetricConfig `yaml:"metrics" json:"metrics,omitempty"`
fileStream *bytes.Buffer fileStream *bytes.Buffer
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment