comp.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package generic
  2. import (
  3. "net"
  4. "time"
  5. "github.com/golang/snappy"
  6. "github.com/pkg/errors"
  7. )
  8. // CompStream ...
  9. type CompStream struct {
  10. conn net.Conn
  11. w *snappy.Writer
  12. r *snappy.Reader
  13. }
  14. func (c *CompStream) Read(p []byte) (n int, err error) {
  15. return c.r.Read(p)
  16. }
  17. func (c *CompStream) Write(p []byte) (n int, err error) {
  18. if _, err := c.w.Write(p); err != nil {
  19. return 0, errors.WithStack(err)
  20. }
  21. if err := c.w.Flush(); err != nil {
  22. return 0, errors.WithStack(err)
  23. }
  24. return len(p), err
  25. }
  26. // Close ...
  27. func (c *CompStream) Close() error {
  28. return c.conn.Close()
  29. }
  30. // LocalAddr ...
  31. func (c *CompStream) LocalAddr() net.Addr {
  32. return c.conn.LocalAddr()
  33. }
  34. // RemoteAddr ...
  35. func (c *CompStream) RemoteAddr() net.Addr {
  36. return c.conn.RemoteAddr()
  37. }
  38. // SetDeadline ...
  39. func (c *CompStream) SetDeadline(t time.Time) error {
  40. return c.conn.SetDeadline(t)
  41. }
  42. // SetReadDeadline ...
  43. func (c *CompStream) SetReadDeadline(t time.Time) error {
  44. return c.conn.SetReadDeadline(t)
  45. }
  46. // SetWriteDeadline ...
  47. func (c *CompStream) SetWriteDeadline(t time.Time) error {
  48. return c.conn.SetWriteDeadline(t)
  49. }
  50. // NewCompStream ...
  51. func NewCompStream(conn net.Conn) *CompStream {
  52. c := new(CompStream)
  53. c.conn = conn
  54. c.w = snappy.NewBufferedWriter(conn)
  55. c.r = snappy.NewReader(conn)
  56. return c
  57. }