reader.go 955 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package pipe
  2. import (
  3. "time"
  4. "github.com/xtls/xray-core/common/buf"
  5. )
  6. // Reader is a buf.Reader that reads content from a pipe.
  7. type Reader struct {
  8. pipe *pipe
  9. }
  10. // ReadMultiBuffer implements buf.Reader.
  11. func (r *Reader) ReadMultiBuffer() (buf.MultiBuffer, error) {
  12. return r.pipe.ReadMultiBuffer()
  13. }
  14. // ReadMultiBufferTimeout reads content from a pipe within the given duration, or returns buf.ErrTimeout otherwise.
  15. func (r *Reader) ReadMultiBufferTimeout(d time.Duration) (buf.MultiBuffer, error) {
  16. return r.pipe.ReadMultiBufferTimeout(d)
  17. }
  18. // Interrupt implements common.Interruptible.
  19. func (r *Reader) Interrupt() {
  20. r.pipe.Interrupt()
  21. }
  22. // ReturnAnError makes ReadMultiBuffer return an error, only once.
  23. func (r *Reader) ReturnAnError(err error) {
  24. r.pipe.errChan <- err
  25. }
  26. // Recover catches an error set by ReturnAnError, if exists.
  27. func (r *Reader) Recover() (err error) {
  28. select {
  29. case err = <-r.pipe.errChan:
  30. default:
  31. }
  32. return
  33. }