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 символов.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package relay
  2. import (
  3. "context"
  4. "sync"
  5. "time"
  6. )
  7. var relayPool = sync.Pool{
  8. New: func() interface{} {
  9. return &Relay{
  10. tickChannel: make(chan struct{}),
  11. errorChannel: make(chan error, 1),
  12. }
  13. },
  14. }
  15. func AcquireRelay(ctx context.Context, logger Logger, bufferSize int, idleTimeout time.Duration) *Relay {
  16. ctx, cancel := context.WithCancel(ctx)
  17. r := relayPool.Get().(*Relay)
  18. r.ctx = ctx
  19. r.ctxCancel = cancel
  20. r.logger = logger
  21. r.tickTimeout = idleTimeout
  22. if len(r.eastBuffer) != bufferSize {
  23. r.eastBuffer = make([]byte, bufferSize)
  24. }
  25. if len(r.westBuffer) != bufferSize {
  26. r.westBuffer = make([]byte, bufferSize)
  27. }
  28. return r
  29. }
  30. func ReleaseRelay(r *Relay) {
  31. r.ctxCancel()
  32. r.ctx = nil
  33. r.ctxCancel = nil
  34. r.logger = nil
  35. relayPool.Put(r)
  36. }