فهرست منبع

Changed Emit to multiparam instead of event

luis 7 سال پیش
والد
کامیت
3a9de2b8c5
4فایلهای تغییر یافته به همراه44 افزوده شده و 45 حذف شده
  1. 10 3
      bus.go
  2. 26 39
      event.go
  3. 0 1
      event_test.go
  4. 8 2
      system.go

+ 10 - 3
bus.go

@@ -10,8 +10,9 @@ type Bus interface {
 
 // EventBus implementation
 type eventBus struct {
-	system   *System
-	handlers map[string]*[]HandlerFunc
+	system     *System
+	emitPrefix string
+	handlers   map[string]*[]HandlerFunc
 }
 
 // NewBus Creates and Initializes an eventBus
@@ -38,7 +39,13 @@ func (e *eventBus) handleEvent(evt Event) {
 }
 
 // This should send to system
-func (e *eventBus) Emit(evt Event) {
+func (e *eventBus) Emit(name string, data interface{}) {
+	var evt Event
+	if e.emitPrefix != "" {
+		evt = New(e.emitPrefix+namedPrefixer+name, data)
+	} else {
+		evt = New(name, data)
+	}
 	e.system.handleEvent(evt) // Forward to system
 }
 

+ 26 - 39
event.go

@@ -4,30 +4,32 @@ const (
 	namedPrefixer = ":"
 )
 
-// Emitter able to emit events
-type Emitter interface {
-	Emit(Event)
-}
-
-// Receiver able to listen to events
-type Receiver interface {
-	On(name string, handler HandlerFunc)
-}
-
-// HandlerFunc func
-type HandlerFunc func(Event)
-
-// Event specific interface
-type Event interface {
-	Name() string
-	Data() interface{}
-}
-
-// private data
-type event struct {
-	name string
-	data interface{}
-}
+type (
+	// Emitter able to emit events
+	Emitter interface {
+		Emit(name string, data interface{})
+	}
+
+	// Receiver able to listen to events
+	Receiver interface {
+		On(name string, handler HandlerFunc)
+	}
+
+	// HandlerFunc func
+	HandlerFunc func(Event)
+
+	// Event specific interface
+	Event interface {
+		Name() string
+		Data() interface{}
+	}
+
+	// private data
+	event struct {
+		name string
+		data interface{}
+	}
+)
 
 // New Event
 func New(name string, data interface{}) Event {
@@ -45,18 +47,3 @@ func (e *event) Data() interface{} {
 // Prefixer
 
 // NamedEmitter data for event prefixer
-type NamedEmitter struct {
-	name string
-	bus  Bus
-}
-
-// NewNamedEmitter creates a new emitter pointing to bus
-func NewNamedEmitter(name string, bus Bus) Emitter {
-	return &NamedEmitter{name, bus}
-}
-
-// Emit will prefix with namedemitter name and push to bus
-func (ne *NamedEmitter) Emit(evt Event) {
-	newEvt := &event{name: ne.name + namedPrefixer + evt.Name(), data: evt.Data()}
-	ne.bus.Emit(newEvt)
-}

+ 0 - 1
event_test.go

@@ -63,7 +63,6 @@ func TestMultiBus(t *testing.T) {
 		t.Fatal("mismatch number of events consumed")
 	}
 	es.RemoveBus(bus2)
-
 	bus1.Emit(event.New("test", nil))
 
 	if cevt != 3 {

+ 8 - 2
system.go

@@ -8,8 +8,14 @@ func NewSystem() *System {
 	return &System{[]*eventBus{}}
 }
 
-func (s *System) NewBus() Bus {
-	evtBus := &eventBus{s, map[string]*[]HandlerFunc{}}
+// NewBus params are 0 - emitPrefix
+func (s *System) NewBus(params ...string) Bus {
+	emitPrefix := ""
+	if len(params) != 0 {
+		emitPrefix = params[0]
+	}
+
+	evtBus := &eventBus{s, emitPrefix, map[string]*[]HandlerFunc{}}
 	s.busList = append(s.busList, evtBus)
 
 	return evtBus