Files
V2bX/core/xray/app/dispatcher/countreader.go
2025-09-12 14:26:58 +09:00

38 lines
703 B
Go

package dispatcher
import (
"sync/atomic"
"time"
"github.com/xtls/xray-core/common/buf"
)
var _ buf.TimeoutReader = (*CounterReader)(nil)
type CounterReader struct {
Reader buf.TimeoutReader
Counter *atomic.Int64
}
func (c *CounterReader) ReadMultiBufferTimeout(time.Duration) (buf.MultiBuffer, error) {
mb, err := c.Reader.ReadMultiBufferTimeout(time.Second)
if err != nil {
return nil, err
}
if mb.Len() > 0 {
c.Counter.Add(int64(mb.Len()))
}
return mb, nil
}
func (c *CounterReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
mb, err := c.Reader.ReadMultiBuffer()
if err != nil {
return nil, err
}
if mb.Len() > 0 {
c.Counter.Add(int64(mb.Len()))
}
return mb, nil
}