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
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

multi_observer.go 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. for _, v := range m.observers {
  12. wg.Go(func() {
  13. v.EventStart(evt)
  14. })
  15. }
  16. wg.Wait()
  17. }
  18. func (m multiObserver) EventConnectedToDC(evt mtglib.EventConnectedToDC) {
  19. wg := &sync.WaitGroup{}
  20. for _, v := range m.observers {
  21. wg.Go(func() {
  22. v.EventConnectedToDC(evt)
  23. })
  24. }
  25. wg.Wait()
  26. }
  27. func (m multiObserver) EventDomainFronting(evt mtglib.EventDomainFronting) {
  28. wg := &sync.WaitGroup{}
  29. for _, v := range m.observers {
  30. wg.Go(func() {
  31. v.EventDomainFronting(evt)
  32. })
  33. }
  34. wg.Wait()
  35. }
  36. func (m multiObserver) EventTraffic(evt mtglib.EventTraffic) {
  37. wg := &sync.WaitGroup{}
  38. for _, v := range m.observers {
  39. wg.Go(func() {
  40. v.EventTraffic(evt)
  41. })
  42. }
  43. wg.Wait()
  44. }
  45. func (m multiObserver) EventFinish(evt mtglib.EventFinish) {
  46. wg := &sync.WaitGroup{}
  47. for _, v := range m.observers {
  48. wg.Go(func() {
  49. v.EventFinish(evt)
  50. })
  51. }
  52. wg.Wait()
  53. }
  54. func (m multiObserver) EventConcurrencyLimited(evt mtglib.EventConcurrencyLimited) {
  55. wg := &sync.WaitGroup{}
  56. for _, v := range m.observers {
  57. wg.Go(func() {
  58. v.EventConcurrencyLimited(evt)
  59. })
  60. }
  61. wg.Wait()
  62. }
  63. func (m multiObserver) EventIPBlocklisted(evt mtglib.EventIPBlocklisted) {
  64. wg := &sync.WaitGroup{}
  65. for _, v := range m.observers {
  66. wg.Go(func() {
  67. v.EventIPBlocklisted(evt)
  68. })
  69. }
  70. wg.Wait()
  71. }
  72. func (m multiObserver) EventReplayAttack(evt mtglib.EventReplayAttack) {
  73. wg := &sync.WaitGroup{}
  74. for _, v := range m.observers {
  75. wg.Go(func() {
  76. v.EventReplayAttack(evt)
  77. })
  78. }
  79. wg.Wait()
  80. }
  81. func (m multiObserver) EventIPListSize(evt mtglib.EventIPListSize) {
  82. wg := &sync.WaitGroup{}
  83. for _, v := range m.observers {
  84. wg.Go(func() {
  85. v.EventIPListSize(evt)
  86. })
  87. }
  88. wg.Wait()
  89. }
  90. func (m multiObserver) Shutdown() {
  91. for _, v := range m.observers {
  92. v.Shutdown()
  93. }
  94. }
  95. func newMultiObserver(factories []ObserverFactory) Observer {
  96. observers := make([]Observer, len(factories))
  97. for i, v := range factories {
  98. observers[i] = v()
  99. }
  100. return multiObserver{
  101. observers: observers,
  102. }
  103. }