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

modify some comments and optimize code

parent f69fa494
No related branches found
No related tags found
No related merge requests found
...@@ -23,6 +23,8 @@ import ( ...@@ -23,6 +23,8 @@ import (
var globalEventDispatcher EventDispatcher var globalEventDispatcher EventDispatcher
var allEventListeners []EventListener
// EventDispatcher is align with EventDispatcher interface in Java. // EventDispatcher is align with EventDispatcher interface in Java.
// it's the top abstraction // it's the top abstraction
// Align with 2.7.5 // Align with 2.7.5
...@@ -53,10 +55,15 @@ func SetAndInitGlobalDispatcher(name string) { ...@@ -53,10 +55,15 @@ func SetAndInitGlobalDispatcher(name string) {
panic("EventDispatcher for " + name + " is not existing, make sure you have import the package.") panic("EventDispatcher for " + name + " is not existing, make sure you have import the package.")
} }
globalEventDispatcher = dispatchers[name]() globalEventDispatcher = dispatchers[name]()
globalEventDispatcher.AddEventListeners(eventListeners) globalEventDispatcher.AddEventListeners(allEventListeners)
} }
// GetGlobalDispatcher // GetGlobalDispatcher
func GetGlobalDispatcher() EventDispatcher { func GetGlobalDispatcher() EventDispatcher {
return globalEventDispatcher return globalEventDispatcher
} }
// AddEventListener it will be added in global event dispatcher
func AddEventListener(listener EventListener) {
allEventListeners = append(allEventListeners, listener)
}
...@@ -25,9 +25,6 @@ import ( ...@@ -25,9 +25,6 @@ import (
gxsort "github.com/dubbogo/gost/sort" gxsort "github.com/dubbogo/gost/sort"
) )
// All eventListeners
var eventListeners []EventListener
// EventListener is an new interface used to align with dubbo 2.7.5 // EventListener is an new interface used to align with dubbo 2.7.5
// It contains the Prioritized means that the listener has its priority // It contains the Prioritized means that the listener has its priority
type EventListener interface { type EventListener interface {
...@@ -44,7 +41,3 @@ type ConditionalEventListener interface { ...@@ -44,7 +41,3 @@ type ConditionalEventListener interface {
// Accept will make the decision whether it should handle this event // Accept will make the decision whether it should handle this event
Accept(e Event) bool Accept(e Event) bool
} }
func AddEventListener(listener EventListener) {
eventListeners = append(eventListeners, listener)
}
...@@ -23,6 +23,7 @@ import ( ...@@ -23,6 +23,7 @@ import (
"sync" "sync"
) )
// Listenable could add and remove the event listener
type Listenable interface { type Listenable interface {
AddEventListener(listener EventListener) AddEventListener(listener EventListener)
AddEventListeners(listenersSlice []EventListener) AddEventListeners(listenersSlice []EventListener)
...@@ -32,32 +33,31 @@ type Listenable interface { ...@@ -32,32 +33,31 @@ type Listenable interface {
RemoveAllEventListeners() RemoveAllEventListeners()
} }
// BaseListenable base listenable
type BaseListenable struct { type BaseListenable struct {
Listenable Listenable
ListenersCache sync.Map ListenersCache sync.Map
Mutex sync.Mutex Mutex sync.Mutex
} }
// NewBaseListenable a constructor of base listenable
func NewBaseListenable() Listenable { func NewBaseListenable() Listenable {
return &BaseListenable{} return &BaseListenable{}
} }
// AddEventListener ... // AddEventListener add event listener
func (bl *BaseListenable) AddEventListener(listener EventListener) { func (bl *BaseListenable) AddEventListener(listener EventListener) {
eventType := listener.GetEventType() eventType := listener.GetEventType()
if eventType.Kind() == reflect.Ptr { if eventType.Kind() == reflect.Ptr {
eventType = eventType.Elem() eventType = eventType.Elem()
} }
var listenersSlice []EventListener
bl.Mutex.Lock() bl.Mutex.Lock()
defer bl.Mutex.Unlock() defer bl.Mutex.Unlock()
if value, loaded := bl.ListenersCache.LoadOrStore(eventType, make([]EventListener, 0, 8)); loaded { value, loaded := bl.ListenersCache.LoadOrStore(eventType, make([]EventListener, 0, 8))
listenersSlice = value.([]EventListener) listenersSlice := value.([]EventListener)
if containListener(listenersSlice, listener) { // return if listenersSlice already has this listener
return if loaded && containListener(listenersSlice, listener) {
} return
} else {
listenersSlice = make([]EventListener, 0, 8)
} }
listenersSlice = append(listenersSlice, listener) listenersSlice = append(listenersSlice, listener)
sort.Slice(listenersSlice, func(i, j int) bool { sort.Slice(listenersSlice, func(i, j int) bool {
...@@ -66,14 +66,14 @@ func (bl *BaseListenable) AddEventListener(listener EventListener) { ...@@ -66,14 +66,14 @@ func (bl *BaseListenable) AddEventListener(listener EventListener) {
bl.ListenersCache.Store(eventType, listenersSlice) bl.ListenersCache.Store(eventType, listenersSlice)
} }
// AddEventListeners .. // AddEventListeners add the slice of event listener
func (bl *BaseListenable) AddEventListeners(listenersSlice []EventListener) { func (bl *BaseListenable) AddEventListeners(listenersSlice []EventListener) {
for _, listener := range listenersSlice { for _, listener := range listenersSlice {
bl.AddEventListener(listener) bl.AddEventListener(listener)
} }
} }
// RemoveEventListener ... // RemoveEventListener remove the event listener
func (bl *BaseListenable) RemoveEventListener(listener EventListener) { func (bl *BaseListenable) RemoveEventListener(listener EventListener) {
eventType := listener.GetEventType() eventType := listener.GetEventType()
if eventType.Kind() == reflect.Ptr { if eventType.Kind() == reflect.Ptr {
...@@ -94,21 +94,21 @@ func (bl *BaseListenable) RemoveEventListener(listener EventListener) { ...@@ -94,21 +94,21 @@ func (bl *BaseListenable) RemoveEventListener(listener EventListener) {
bl.ListenersCache.Store(eventType, listenersSlice) bl.ListenersCache.Store(eventType, listenersSlice)
} }
// RemoveEventListeners ... // RemoveEventListeners remove the slice of event listener
func (bl *BaseListenable) RemoveEventListeners(listenersSlice []EventListener) { func (bl *BaseListenable) RemoveEventListeners(listenersSlice []EventListener) {
for _, listener := range listenersSlice { for _, listener := range listenersSlice {
bl.RemoveEventListener(listener) bl.RemoveEventListener(listener)
} }
} }
// RemoveAllEventListeners ... // RemoveAllEventListeners remove all
func (bl *BaseListenable) RemoveAllEventListeners() { func (bl *BaseListenable) RemoveAllEventListeners() {
bl.Mutex.Lock() bl.Mutex.Lock()
defer bl.Mutex.Unlock() defer bl.Mutex.Unlock()
bl.ListenersCache = *new(sync.Map) bl.ListenersCache = sync.Map{}
} }
// GetAllEventListeners ... // GetAllEventListeners get all
func (bl *BaseListenable) GetAllEventListeners() []EventListener { func (bl *BaseListenable) GetAllEventListeners() []EventListener {
allListenersSlice := make([]EventListener, 0, 16) allListenersSlice := make([]EventListener, 0, 16)
bl.ListenersCache.Range(func(_, value interface{}) bool { bl.ListenersCache.Range(func(_, value interface{}) bool {
...@@ -122,6 +122,7 @@ func (bl *BaseListenable) GetAllEventListeners() []EventListener { ...@@ -122,6 +122,7 @@ func (bl *BaseListenable) GetAllEventListeners() []EventListener {
return allListenersSlice return allListenersSlice
} }
// containListener true if contain listener
func containListener(listenersSlice []EventListener, listener EventListener) bool { func containListener(listenersSlice []EventListener, listener EventListener) bool {
for _, loadListener := range listenersSlice { for _, loadListener := range listenersSlice {
if loadListener == listener { if loadListener == listener {
......
...@@ -19,7 +19,6 @@ package config ...@@ -19,7 +19,6 @@ package config
import ( import (
"fmt" "fmt"
"github.com/apache/dubbo-go/common/observer"
"log" "log"
"os" "os"
"time" "time"
...@@ -34,6 +33,7 @@ import ( ...@@ -34,6 +33,7 @@ import (
"github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/extension"
"github.com/apache/dubbo-go/common/logger" "github.com/apache/dubbo-go/common/logger"
"github.com/apache/dubbo-go/common/observer"
_ "github.com/apache/dubbo-go/common/observer/dispatcher" _ "github.com/apache/dubbo-go/common/observer/dispatcher"
) )
...@@ -101,7 +101,7 @@ func Load() { ...@@ -101,7 +101,7 @@ func Load() {
if providerConfig != nil { if providerConfig != nil {
eventDispatcherType = providerConfig.eventDispatcherType eventDispatcherType = providerConfig.eventDispatcherType
} }
// init EventDispatcher // init EventDispatcher should before everything
observer.SetAndInitGlobalDispatcher(eventDispatcherType) observer.SetAndInitGlobalDispatcher(eventDispatcherType)
// reference config // reference config
......
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