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

buffered_reader.go 697B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package stream
  2. import (
  3. "bytes"
  4. "time"
  5. )
  6. type bufferedReaderReadFunc func() ([]byte, error)
  7. type bufferedReader struct {
  8. buf bytes.Buffer
  9. readFunc bufferedReaderReadFunc
  10. }
  11. func (b *bufferedReader) Read(p []byte) (int, error) {
  12. if b.buf.Len() > 0 {
  13. return b.flush(p)
  14. }
  15. res, err := b.readFunc()
  16. if err != nil {
  17. return 0, err
  18. }
  19. b.buf.Write(res)
  20. return b.flush(p)
  21. }
  22. func (b *bufferedReader) ReadTimeout(p []byte, _ time.Duration) (int, error) {
  23. return b.Read(p)
  24. }
  25. func (b *bufferedReader) flush(p []byte) (int, error) {
  26. if b.buf.Len() > len(p) {
  27. return b.buf.Read(p)
  28. }
  29. sizeToReturn := b.buf.Len()
  30. copy(p, b.buf.Bytes())
  31. b.buf.Reset()
  32. return sizeToReturn, nil
  33. }