mirror of
https://github.com/smallnest/rpcx.git
synced 2025-10-20 22:59:26 +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
|
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) {
|
func (s *Server) readRequest(ctx context.Context, r io.Reader) (req *protocol.Message, err error) {
|
||||||
s.Plugins.DoPreReadRequest(ctx)
|
s.Plugins.DoPreReadRequest(ctx)
|
||||||
req, err = protocol.Read(r)
|
// pool req?
|
||||||
|
req = protocol.NewMessage()
|
||||||
|
err = req.Decode(r)
|
||||||
s.Plugins.DoPostReadRequest(ctx, req, err)
|
s.Plugins.DoPostReadRequest(ctx, req, err)
|
||||||
|
|
||||||
if s.AuthFunc != nil && err == nil {
|
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) {
|
func (s *Server) handleRequest(ctx context.Context, req *protocol.Message) (res *protocol.Message, err error) {
|
||||||
|
// pool res?
|
||||||
res = req.Clone()
|
res = req.Clone()
|
||||||
|
|
||||||
res.SetMessageType(protocol.Response)
|
res.SetMessageType(protocol.Response)
|
||||||
|
|
||||||
serviceName := req.Metadata[protocol.ServicePath]
|
serviceName := req.Metadata[protocol.ServicePath]
|
||||||
|
Reference in New Issue
Block a user