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 722B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package wrappers
  2. import (
  3. "bytes"
  4. "github.com/juju/errors"
  5. )
  6. type BufferedReader struct {
  7. Buffer *bytes.Buffer
  8. }
  9. var (
  10. BufferedReaderContinue = errors.New("Please continue reading")
  11. )
  12. func (b *BufferedReader) BufferedRead(p []byte, callback func() error) (int, error) {
  13. if b.Buffer.Len() > 0 {
  14. return b.flush(p)
  15. }
  16. if err := callback(); err != nil {
  17. return 0, err
  18. }
  19. return b.flush(p)
  20. }
  21. func (b *BufferedReader) flush(p []byte) (int, error) {
  22. if b.Buffer.Len() <= len(p) {
  23. sizeToReturn := b.Buffer.Len()
  24. copy(p, b.Buffer.Bytes())
  25. b.Buffer.Reset()
  26. return sizeToReturn, nil
  27. }
  28. return b.Buffer.Read(p)
  29. }
  30. func NewBufferedReader() BufferedReader {
  31. return BufferedReader{Buffer: &bytes.Buffer{}}
  32. }