add Decode method for message

This commit is contained in:
smallnest
2017-10-20 14:49:31 +08:00
parent d45297122c
commit 42549d766c
2 changed files with 32 additions and 1 deletions

View File

@@ -313,3 +313,30 @@ func Read(r io.Reader) (*Message, error) {
return msg, err
}
// Decode decodes a message from reader.
func (m *Message) Decode(r io.Reader) error {
_, err := io.ReadFull(r, m.Header[:])
if err != nil {
return err
}
lenData := make([]byte, 4)
m.Metadata, err = decodeMetadata(lenData, r)
if err != nil {
return err
}
_, err = io.ReadFull(r, lenData)
if err != nil {
return err
}
l := binary.BigEndian.Uint32(lenData)
m.Payload = make([]byte, l)
_, err = io.ReadFull(r, m.Payload)
return err
}

View File

@@ -278,7 +278,9 @@ func (s *Server) serveConn(conn net.Conn) {
func (s *Server) readRequest(ctx context.Context, r io.Reader) (req *protocol.Message, err error) {
s.Plugins.DoPreReadRequest(ctx)
req, err = protocol.Read(r)
// pool req?
req = protocol.NewMessage()
err = req.Decode(r)
s.Plugins.DoPostReadRequest(ctx, req, err)
if s.AuthFunc != nil && err == nil {
@@ -290,7 +292,9 @@ func (s *Server) readRequest(ctx context.Context, r io.Reader) (req *protocol.Me
}
func (s *Server) handleRequest(ctx context.Context, req *protocol.Message) (res *protocol.Message, err error) {
// pool res?
res = req.Clone()
res.SetMessageType(protocol.Response)
serviceName := req.Metadata[protocol.ServicePath]