github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/metrics/conn/conn.go (about) 1 package meterconn 2 3 import ( 4 manet "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr-net" 5 metrics "github.com/ipfs/go-ipfs/metrics" 6 ) 7 8 type MeteredConn struct { 9 mesRecv metrics.MeterCallback 10 mesSent metrics.MeterCallback 11 12 manet.Conn 13 } 14 15 func WrapConn(bwc metrics.Reporter, c manet.Conn) manet.Conn { 16 return newMeteredConn(c, bwc.LogRecvMessage, bwc.LogSentMessage) 17 } 18 19 func newMeteredConn(base manet.Conn, rcb metrics.MeterCallback, scb metrics.MeterCallback) manet.Conn { 20 return &MeteredConn{ 21 Conn: base, 22 mesRecv: rcb, 23 mesSent: scb, 24 } 25 } 26 27 func (mc *MeteredConn) Read(b []byte) (int, error) { 28 n, err := mc.Conn.Read(b) 29 30 mc.mesRecv(int64(n)) 31 return n, err 32 } 33 34 func (mc *MeteredConn) Write(b []byte) (int, error) { 35 n, err := mc.Conn.Write(b) 36 37 mc.mesSent(int64(n)) 38 return n, err 39 }