39 lines
642 B
Go
39 lines
642 B
Go
package wrapper
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/go-gost/x/stats"
|
|
)
|
|
|
|
// readWriter is an io.ReadWriter with Stats.
|
|
type readWriter struct {
|
|
io.ReadWriter
|
|
stats *stats.Stats
|
|
}
|
|
|
|
func WrapReadWriter(rw io.ReadWriter, stats *stats.Stats) io.ReadWriter {
|
|
if stats == nil {
|
|
return rw
|
|
}
|
|
|
|
return &readWriter{
|
|
ReadWriter: rw,
|
|
stats: stats,
|
|
}
|
|
}
|
|
|
|
func (p *readWriter) Read(b []byte) (n int, err error) {
|
|
n, err = p.ReadWriter.Read(b)
|
|
p.stats.Add(stats.KindInputBytes, int64(n))
|
|
|
|
return
|
|
}
|
|
|
|
func (p *readWriter) Write(b []byte) (n int, err error) {
|
|
n, err = p.ReadWriter.Write(b)
|
|
p.stats.Add(stats.KindOutputBytes, int64(n))
|
|
|
|
return
|
|
}
|