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
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

buffered_reader.go 734B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package wrappers
  2. import "bytes"
  3. type BufferedReader struct {
  4. Buffer *bytes.Buffer
  5. }
  6. func (b *BufferedReader) BufferedRead(p []byte, callback func() error) (int, error) {
  7. if b.Buffer.Len() > 0 {
  8. return b.flush(p)
  9. }
  10. if err := callback(); err != nil {
  11. return 0, err
  12. }
  13. return b.flush(p)
  14. }
  15. func (b *BufferedReader) flush(p []byte) (int, error) {
  16. sizeToRead := len(p)
  17. if b.Buffer.Len() < sizeToRead {
  18. sizeToRead = b.Buffer.Len()
  19. }
  20. data := b.Buffer.Bytes()
  21. copy(p, data[:sizeToRead])
  22. if sizeToRead == b.Buffer.Len() {
  23. b.Buffer.Reset()
  24. } else {
  25. b.Buffer = bytes.NewBuffer(data[sizeToRead:])
  26. }
  27. return sizeToRead, nil
  28. }
  29. func NewBufferedReader() BufferedReader {
  30. return BufferedReader{Buffer: &bytes.Buffer{}}
  31. }