mirror of
https://github.com/hanzozt/zt.git
synced 2026-10-30 15:04:55 +00:00
81 lines
1.5 KiB
Go
81 lines
1.5 KiB
Go
package xgress_validation
|
|
|
|
import (
|
|
"net"
|
|
"time"
|
|
)
|
|
|
|
func NewBufferPipe(id string) *BufferPipe {
|
|
a := NewBufferConn(id)
|
|
b := NewBufferConn(id)
|
|
return &BufferPipe{
|
|
left: &PipeEnd{id: id, reader: a, writer: b},
|
|
right: &PipeEnd{id: id, reader: b, writer: a},
|
|
}
|
|
}
|
|
|
|
type BufferPipe struct {
|
|
left *PipeEnd
|
|
right *PipeEnd
|
|
}
|
|
|
|
func (self *BufferPipe) Left() net.Conn {
|
|
return self.left
|
|
}
|
|
|
|
func (self *BufferPipe) Right() net.Conn {
|
|
return self.right
|
|
}
|
|
|
|
type PipeEnd struct {
|
|
id string
|
|
reader *BufferConn
|
|
writer *BufferConn
|
|
}
|
|
|
|
func (self *PipeEnd) Read(b []byte) (n int, err error) {
|
|
return self.reader.Read(b)
|
|
}
|
|
|
|
func (self *PipeEnd) Write(b []byte) (n int, err error) {
|
|
return self.writer.Write(b)
|
|
}
|
|
|
|
func (self *PipeEnd) CloseRead() error {
|
|
return self.reader.CloseRead()
|
|
}
|
|
|
|
func (self *PipeEnd) CloseWrite() error {
|
|
return self.writer.CloseWrite()
|
|
}
|
|
|
|
func (self *PipeEnd) Close() error {
|
|
if err := self.reader.Close(); err != nil {
|
|
return err
|
|
}
|
|
return self.writer.Close()
|
|
}
|
|
|
|
func (self *PipeEnd) LocalAddr() net.Addr {
|
|
return self.reader.LocalAddr()
|
|
}
|
|
|
|
func (self *PipeEnd) RemoteAddr() net.Addr {
|
|
return self.reader.RemoteAddr()
|
|
}
|
|
|
|
func (self *PipeEnd) SetDeadline(t time.Time) error {
|
|
if err := self.SetReadDeadline(t); err != nil {
|
|
return err
|
|
}
|
|
return self.SetWriteDeadline(t)
|
|
}
|
|
|
|
func (self *PipeEnd) SetReadDeadline(t time.Time) error {
|
|
return self.reader.SetReadDeadline(t)
|
|
}
|
|
|
|
func (self *PipeEnd) SetWriteDeadline(t time.Time) error {
|
|
return self.writer.SetWriteDeadline(t)
|
|
}
|