v2ray-core/common/buf/merge_reader.go

35 lines
535 B
Go
Raw Normal View History

2017-03-27 09:12:34 +00:00
package buf
type MergingReader struct {
2017-03-27 09:14:55 +00:00
reader Reader
timeoutReader TimeoutReader
2017-03-27 09:12:34 +00:00
}
func NewMergingReader(reader Reader) Reader {
return &MergingReader{
2017-03-27 09:14:55 +00:00
reader: reader,
timeoutReader: reader.(TimeoutReader),
2017-03-27 09:12:34 +00:00
}
}
2017-04-15 19:07:23 +00:00
func (r *MergingReader) Read() (MultiBuffer, error) {
mb, err := r.reader.Read()
2017-03-27 09:12:34 +00:00
if err != nil {
return nil, err
}
2017-03-27 09:14:55 +00:00
if r.timeoutReader == nil {
2017-04-15 19:07:23 +00:00
return mb, nil
2017-03-27 09:14:55 +00:00
}
2017-03-27 09:26:44 +00:00
for {
2017-04-15 19:07:23 +00:00
mb2, err := r.timeoutReader.ReadTimeout(0)
2017-03-27 09:26:44 +00:00
if err != nil {
break
}
2017-04-15 19:07:23 +00:00
mb.AppendMulti(mb2)
2017-03-27 09:12:34 +00:00
}
2017-04-15 19:07:23 +00:00
return mb, nil
2017-03-27 09:12:34 +00:00
}