mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 07:06:58 +08:00
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
// Package bytecounter contains a io.ReadWriter wrapper that allows to count read and written bytes.
|
|
package bytecounter
|
|
|
|
import (
|
|
"io"
|
|
"sync/atomic"
|
|
)
|
|
|
|
// ByteCounter is a io.ReadWriter wrapper that allows to count read and written bytes.
|
|
type ByteCounter struct {
|
|
rw io.ReadWriter
|
|
received *uint64
|
|
sent *uint64
|
|
}
|
|
|
|
// New allocates a ByteCounter.
|
|
func New(rw io.ReadWriter, received *uint64, sent *uint64) *ByteCounter {
|
|
if received == nil {
|
|
received = new(uint64)
|
|
}
|
|
if sent == nil {
|
|
sent = new(uint64)
|
|
}
|
|
|
|
return &ByteCounter{
|
|
rw: rw,
|
|
received: received,
|
|
sent: sent,
|
|
}
|
|
}
|
|
|
|
// Read implements io.ReadWriter.
|
|
func (bc *ByteCounter) Read(p []byte) (int, error) {
|
|
n, err := bc.rw.Read(p)
|
|
atomic.AddUint64(bc.received, uint64(n))
|
|
return n, err
|
|
}
|
|
|
|
// Write implements io.ReadWriter.
|
|
func (bc *ByteCounter) Write(p []byte) (int, error) {
|
|
n, err := bc.rw.Write(p)
|
|
atomic.AddUint64(bc.sent, uint64(n))
|
|
return n, err
|
|
}
|
|
|
|
// BytesReceived returns the number of bytes received.
|
|
func (bc *ByteCounter) BytesReceived() uint64 {
|
|
return atomic.LoadUint64(bc.received)
|
|
}
|
|
|
|
// BytesSent returns the number of bytes sent.
|
|
func (bc *ByteCounter) BytesSent() uint64 {
|
|
return atomic.LoadUint64(bc.sent)
|
|
}
|