diff --git a/lib/gat/pooler.go b/lib/gat/pooler.go index 1088ab7349de960a032849ca7966ff1302fcb7c1..1788bbc9d72ae7f06b7e32c0dd7f830452601bdc 100644 --- a/lib/gat/pooler.go +++ b/lib/gat/pooler.go @@ -114,7 +114,7 @@ func (T *Pooler) ListenAndServe(listener net.Listener) error { if err != nil { return err } - go T.Serve(zap.WrapIOReadWriter(conn)) + go T.Serve(zap.WrapNetConn(conn)) } } diff --git a/lib/gat/recipe.go b/lib/gat/recipe.go index 9d42198e56369e479285622de12ae623add85b06..650bd6034ad4f6a519333ceaa4d8f4c2c86eff88 100644 --- a/lib/gat/recipe.go +++ b/lib/gat/recipe.go @@ -36,7 +36,7 @@ func (T TCPRecipe) Dial() (zap.ReadWriter, error) { if err != nil { return nil, err } - rw := zap.WrapIOReadWriter(conn) + rw := zap.WrapNetConn(conn) return rw, nil } diff --git a/lib/zap/conn.go b/lib/zap/conn.go new file mode 100644 index 0000000000000000000000000000000000000000..4804e5ddf82f8a5549299e26c26cb7b182ec4329 --- /dev/null +++ b/lib/zap/conn.go @@ -0,0 +1,62 @@ +package zap + +import ( + "io" + "net" +) + +type Conn struct { + conn net.Conn + buf [1]byte +} + +func WrapNetConn(conn net.Conn) *Conn { + return &Conn{ + conn: conn, + } +} + +func (T *Conn) ReadByte() (byte, error) { + _, err := io.ReadFull(T.conn, T.buf[:]) + if err != nil { + return 0, err + } + return T.buf[0], nil +} + +func (T *Conn) Read(packet *Packet) error { + _, err := packet.ReadFrom(T.conn) + return err +} + +func (T *Conn) ReadUntyped(packet *UntypedPacket) error { + _, err := packet.ReadFrom(T.conn) + return err +} + +func (T *Conn) WriteByte(b byte) error { + T.buf[0] = b + _, err := T.conn.Write(T.buf[:]) + return err +} + +func (T *Conn) Write(packet *Packet) error { + _, err := packet.WriteTo(T.conn) + return err +} + +func (T *Conn) WriteUntyped(packet *UntypedPacket) error { + _, err := packet.WriteTo(T.conn) + return err +} + +func (T *Conn) WriteV(packets *Packets) error { + _, err := packets.WriteTo(T.conn) + return err +} + +func (T *Conn) Close() error { + return T.conn.Close() +} + +var _ ReadWriter = (*Conn)(nil) diff --git a/lib/zap/reader.go b/lib/zap/reader.go index 6c0f132e291894f736991924208ea6538d28b93a..a8f5bee817892b5b55f1d4cf729e4c5fc3a153e5 100644 --- a/lib/zap/reader.go +++ b/lib/zap/reader.go @@ -1,9 +1,5 @@ package zap -import ( - "io" -) - type Reader interface { ReadByte() (byte, error) Read(*Packet) error @@ -11,40 +7,3 @@ type Reader interface { Close() error } - -func WrapIOReader(readCloser io.ReadCloser) Reader { - return ioReader{ - reader: readCloser, - closer: readCloser, - } -} - -type ioReader struct { - reader io.Reader - closer io.Closer -} - -func (T ioReader) ReadByte() (byte, error) { - var res = []byte{0} - _, err := io.ReadFull(T.reader, res) - if err != nil { - return 0, err - } - return res[0], err -} - -func (T ioReader) Read(packet *Packet) error { - _, err := packet.ReadFrom(T.reader) - return err -} - -func (T ioReader) ReadUntyped(packet *UntypedPacket) error { - _, err := packet.ReadFrom(T.reader) - return err -} - -func (T ioReader) Close() error { - return T.closer.Close() -} - -var _ Reader = ioReader{} diff --git a/lib/zap/readwriter.go b/lib/zap/readwriter.go index 0ab0babf51ff3537eab9aabbddae754b1ccbed70..1f686ed460f1727ed0e2cc9dc34775f7397f4056 100644 --- a/lib/zap/readwriter.go +++ b/lib/zap/readwriter.go @@ -3,22 +3,7 @@ package zap import "io" type ReadWriter interface { + io.ByteReader Reader Writer } - -type CombinedReadWriter struct { - Reader - Writer -} - -func (T CombinedReadWriter) Close() error { - return T.Reader.Close() -} - -func WrapIOReadWriter(readWriteCloser io.ReadWriteCloser) ReadWriter { - return CombinedReadWriter{ - Reader: WrapIOReader(readWriteCloser), - Writer: WrapIOWriter(readWriteCloser), - } -} diff --git a/lib/zap/writer.go b/lib/zap/writer.go index 667954fcf0cc7ab8c89e5bd4808d0c557b6122eb..5cf89989f7701d8e741e823e40a5822bf447e5e2 100644 --- a/lib/zap/writer.go +++ b/lib/zap/writer.go @@ -1,9 +1,5 @@ package zap -import ( - "io" -) - type Writer interface { WriteByte(byte) error Write(*Packet) error @@ -12,41 +8,3 @@ type Writer interface { Close() error } - -func WrapIOWriter(writeCloser io.WriteCloser) Writer { - return ioWriter{ - writer: writeCloser, - closer: writeCloser, - } -} - -type ioWriter struct { - writer io.Writer - closer io.Closer -} - -func (T ioWriter) WriteByte(b byte) error { - _, err := T.writer.Write([]byte{b}) - return err -} - -func (T ioWriter) Write(packet *Packet) error { - _, err := packet.WriteTo(T.writer) - return err -} - -func (T ioWriter) WriteUntyped(packet *UntypedPacket) error { - _, err := packet.WriteTo(T.writer) - return err -} - -func (T ioWriter) WriteV(packets *Packets) error { - _, err := packets.WriteTo(T.writer) - return err -} - -func (T ioWriter) Close() error { - return T.closer.Close() -} - -var _ Writer = ioWriter{}