add ConnServer.ReadInterleavedFrameOrRequest(); remove ConnServer.ReadInterleavedFrame()

This commit is contained in:
aler9
2020-07-04 18:24:35 +02:00
parent e557f02632
commit 4c712d2370
2 changed files with 46 additions and 32 deletions

View File

@@ -78,6 +78,32 @@ func (c *ConnClient) NetConn() net.Conn {
return c.conf.NConn return c.conf.NConn
} }
// ReadInterleavedFrameOrResponse reads an InterleavedFrame or a Response.
func (c *ConnClient) ReadInterleavedFrameOrResponse(frame *InterleavedFrame) (interface{}, error) {
c.conf.NConn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout))
b, err := c.br.ReadByte()
if err != nil {
return nil, err
}
c.br.UnreadByte()
if b == _INTERLEAVED_FRAME_MAGIC {
err := frame.read(c.br)
if err != nil {
return nil, err
}
return frame, err
}
return readResponse(c.br)
}
// ReadInterleavedFrame reads an InterleavedFrame.
func (c *ConnClient) ReadInterleavedFrame(frame *InterleavedFrame) error {
c.conf.NConn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout))
return frame.read(c.br)
}
func (c *ConnClient) writeRequest(req *Request) error { func (c *ConnClient) writeRequest(req *Request) error {
if req.Header == nil { if req.Header == nil {
req.Header = make(Header) req.Header = make(Header)
@@ -143,32 +169,6 @@ func (c *ConnClient) WriteRequestNoResponse(req *Request) error {
return c.writeRequest(req) return c.writeRequest(req)
} }
// ReadInterleavedFrameOrResponse reads an InterleavedFrame or a Response.
func (c *ConnClient) ReadInterleavedFrameOrResponse(frame *InterleavedFrame) (interface{}, error) {
c.conf.NConn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout))
b, err := c.br.ReadByte()
if err != nil {
return nil, err
}
c.br.UnreadByte()
if b == _INTERLEAVED_FRAME_MAGIC {
err := frame.read(c.br)
if err != nil {
return nil, err
}
return frame, err
}
return readResponse(c.br)
}
// ReadInterleavedFrame reads an InterleavedFrame.
func (c *ConnClient) ReadInterleavedFrame(frame *InterleavedFrame) error {
c.conf.NConn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout))
return frame.read(c.br)
}
// WriteInterleavedFrame writes an InterleavedFrame. // WriteInterleavedFrame writes an InterleavedFrame.
func (c *ConnClient) WriteInterleavedFrame(frame *InterleavedFrame) error { func (c *ConnClient) WriteInterleavedFrame(frame *InterleavedFrame) error {
c.conf.NConn.SetWriteDeadline(time.Now().Add(c.conf.WriteTimeout)) c.conf.NConn.SetWriteDeadline(time.Now().Add(c.conf.WriteTimeout))

View File

@@ -68,18 +68,32 @@ func (s *ConnServer) ReadRequest() (*Request, error) {
return readRequest(s.br) return readRequest(s.br)
} }
// ReadInterleavedFrameOrRequest reads an InterleavedFrame or a Request.
func (s *ConnServer) ReadInterleavedFrameOrRequest(frame *InterleavedFrame) (interface{}, error) {
s.conf.NConn.SetReadDeadline(time.Time{}) // disable deadline
b, err := s.br.ReadByte()
if err != nil {
return nil, err
}
s.br.UnreadByte()
if b == _INTERLEAVED_FRAME_MAGIC {
err := frame.read(s.br)
if err != nil {
return nil, err
}
return frame, err
}
return readRequest(s.br)
}
// WriteResponse writes a response. // WriteResponse writes a response.
func (s *ConnServer) WriteResponse(res *Response) error { func (s *ConnServer) WriteResponse(res *Response) error {
s.conf.NConn.SetWriteDeadline(time.Now().Add(s.conf.WriteTimeout)) s.conf.NConn.SetWriteDeadline(time.Now().Add(s.conf.WriteTimeout))
return res.write(s.bw) return res.write(s.bw)
} }
// ReadInterleavedFrame reads an InterleavedFrame.
func (s *ConnServer) ReadInterleavedFrame(frame *InterleavedFrame) error {
s.conf.NConn.SetReadDeadline(time.Now().Add(s.conf.ReadTimeout))
return frame.read(s.br)
}
// WriteInterleavedFrame writes an InterleavedFrame. // WriteInterleavedFrame writes an InterleavedFrame.
func (s *ConnServer) WriteInterleavedFrame(frame *InterleavedFrame) error { func (s *ConnServer) WriteInterleavedFrame(frame *InterleavedFrame) error {
s.conf.NConn.SetWriteDeadline(time.Now().Add(s.conf.WriteTimeout)) s.conf.NConn.SetWriteDeadline(time.Now().Add(s.conf.WriteTimeout))