Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

multi_observer.go 914B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package events
  2. import (
  3. "sync"
  4. "github.com/9seconds/mtg/v2/mtglib"
  5. )
  6. type multiObserver struct {
  7. observers []Observer
  8. }
  9. func (m multiObserver) EventStart(evt mtglib.EventStart) {
  10. wg := &sync.WaitGroup{}
  11. wg.Add(len(m.observers))
  12. for _, v := range m.observers {
  13. go func(obs Observer) {
  14. defer wg.Done()
  15. obs.EventStart(evt)
  16. }(v)
  17. }
  18. wg.Wait()
  19. }
  20. func (m multiObserver) EventFinish(evt mtglib.EventFinish) {
  21. wg := &sync.WaitGroup{}
  22. wg.Add(len(m.observers))
  23. for _, v := range m.observers {
  24. go func(obs Observer) {
  25. defer wg.Done()
  26. obs.EventFinish(evt)
  27. }(v)
  28. }
  29. wg.Wait()
  30. }
  31. func (m multiObserver) Shutdown() {
  32. for _, v := range m.observers {
  33. v.Shutdown()
  34. }
  35. }
  36. func newMultiObserver(factories []ObserverFactory) Observer {
  37. observers := make([]Observer, len(factories))
  38. for i, v := range factories {
  39. observers[i] = v()
  40. }
  41. return multiObserver{
  42. observers: observers,
  43. }
  44. }