conn.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package countconn
  2. import (
  3. "net"
  4. "time"
  5. "github.com/dustin/go-humanize"
  6. "github.com/go-kit/kit/log"
  7. )
  8. type Conn struct {
  9. *Reader
  10. *Writer
  11. conn net.Conn
  12. logger log.Logger
  13. }
  14. func WrapConn(logger log.Logger, c net.Conn) net.Conn {
  15. wrap := Conn{
  16. logger: logger,
  17. conn: c,
  18. }
  19. wrap.Reader = NewReader(c)
  20. wrap.Writer = NewWriter(c)
  21. return &wrap
  22. }
  23. func (c *Conn) Close() error {
  24. c.logger.Log("conn", "closed",
  25. "local", c.conn.LocalAddr().String(),
  26. "remote", c.conn.RemoteAddr(),
  27. "tx", humanize.Bytes(uint64(c.Writer.N())),
  28. "rx", humanize.Bytes(uint64(c.Reader.N())),
  29. )
  30. return c.conn.Close()
  31. }
  32. func (c *Conn) LocalAddr() net.Addr { return c.conn.LocalAddr() }
  33. func (c *Conn) RemoteAddr() net.Addr { return c.conn.RemoteAddr() }
  34. func (c *Conn) SetDeadline(t time.Time) error { return c.conn.SetDeadline(t) }
  35. func (c *Conn) SetReadDeadline(t time.Time) error { return c.conn.SetReadDeadline(t) }
  36. func (c *Conn) SetWriteDeadline(t time.Time) error { return c.conn.SetWriteDeadline(t) }