mirror of
https://github.com/wyx2685/V2bX.git
synced 2026-02-04 12:40:11 +00:00
38 lines
703 B
Go
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
|
|
}
|