mirror of
https://github.com/smallnest/rpcx.git
synced 2025-10-20 06:54:33 +08:00
add Decode method for message
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
@@ -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]
|
||||
|
Reference in New Issue
Block a user