mirror of
				https://github.com/aler9/gortsplib
				synced 2025-10-31 18:42:40 +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)
 | |
| }
 | 
