| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package events
-
- import (
- "sync"
-
- "github.com/9seconds/mtg/v2/mtglib"
- )
-
- type multiObserver struct {
- observers []Observer
- }
-
- func (m multiObserver) EventStart(evt mtglib.EventStart) {
- wg := &sync.WaitGroup{}
- wg.Add(len(m.observers))
-
- for _, v := range m.observers {
- go func(obs Observer) {
- defer wg.Done()
-
- obs.EventStart(evt)
- }(v)
- }
-
- wg.Wait()
- }
-
- func (m multiObserver) EventFinish(evt mtglib.EventFinish) {
- wg := &sync.WaitGroup{}
- wg.Add(len(m.observers))
-
- for _, v := range m.observers {
- go func(obs Observer) {
- defer wg.Done()
-
- obs.EventFinish(evt)
- }(v)
- }
-
- wg.Wait()
- }
-
- func (m multiObserver) EventConcurrencyLimited(evt mtglib.EventConcurrencyLimited) {
- wg := &sync.WaitGroup{}
- wg.Add(len(m.observers))
-
- for _, v := range m.observers {
- go func(obs Observer) {
- defer wg.Done()
-
- obs.EventConcurrencyLimited(evt)
- }(v)
- }
-
- wg.Wait()
- }
-
- func (m multiObserver) EventIPBlocklisted(evt mtglib.EventIPBlocklisted) {
- wg := &sync.WaitGroup{}
- wg.Add(len(m.observers))
-
- for _, v := range m.observers {
- go func(obs Observer) {
- defer wg.Done()
-
- obs.EventIPBlocklisted(evt)
- }(v)
- }
-
- wg.Wait()
- }
-
- func (m multiObserver) Shutdown() {
- for _, v := range m.observers {
- v.Shutdown()
- }
- }
-
- func newMultiObserver(factories []ObserverFactory) Observer {
- observers := make([]Observer, len(factories))
-
- for i, v := range factories {
- observers[i] = v()
- }
-
- return multiObserver{
- observers: observers,
- }
- }
|