| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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) EventConnectedToDC(evt mtglib.EventConnectedToDC) {
- wg := &sync.WaitGroup{}
- wg.Add(len(m.observers))
-
- for _, v := range m.observers {
- go func(obs Observer) {
- defer wg.Done()
-
- obs.EventConnectedToDC(evt)
- }(v)
- }
-
- wg.Wait()
- }
-
- func (m multiObserver) EventTraffic(evt mtglib.EventTraffic) {
- wg := &sync.WaitGroup{}
- wg.Add(len(m.observers))
-
- for _, v := range m.observers {
- go func(obs Observer) {
- defer wg.Done()
-
- obs.EventTraffic(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,
- }
- }
|