merge_reader.go 535 B

12345678910111213141516171819202122232425262728293031323334
  1. package buf
  2. type MergingReader struct {
  3. reader Reader
  4. timeoutReader TimeoutReader
  5. }
  6. func NewMergingReader(reader Reader) Reader {
  7. return &MergingReader{
  8. reader: reader,
  9. timeoutReader: reader.(TimeoutReader),
  10. }
  11. }
  12. func (r *MergingReader) Read() (MultiBuffer, error) {
  13. mb, err := r.reader.Read()
  14. if err != nil {
  15. return nil, err
  16. }
  17. if r.timeoutReader == nil {
  18. return mb, nil
  19. }
  20. for {
  21. mb2, err := r.timeoutReader.ReadTimeout(0)
  22. if err != nil {
  23. break
  24. }
  25. mb.AppendMulti(mb2)
  26. }
  27. return mb, nil
  28. }