108 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package mucp
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 
 | |
| 	"github.com/asim/go-micro/v3/codec"
 | |
| 	"github.com/asim/go-micro/v3/network/transport"
 | |
| 	"github.com/asim/go-micro/v3/util/buf"
 | |
| )
 | |
| 
 | |
| type rpcRequest struct {
 | |
| 	service     string
 | |
| 	method      string
 | |
| 	endpoint    string
 | |
| 	contentType string
 | |
| 	socket      transport.Socket
 | |
| 	codec       codec.Codec
 | |
| 	header      map[string]string
 | |
| 	body        []byte
 | |
| 	rawBody     interface{}
 | |
| 	stream      bool
 | |
| 	first       bool
 | |
| }
 | |
| 
 | |
| type rpcMessage struct {
 | |
| 	topic       string
 | |
| 	contentType string
 | |
| 	payload     interface{}
 | |
| 	header      map[string]string
 | |
| 	body        []byte
 | |
| 	codec       codec.NewCodec
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) Codec() codec.Reader {
 | |
| 	return r.codec
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) ContentType() string {
 | |
| 	return r.contentType
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) Service() string {
 | |
| 	return r.service
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) Method() string {
 | |
| 	return r.method
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) Endpoint() string {
 | |
| 	return r.endpoint
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) Header() map[string]string {
 | |
| 	return r.header
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) Body() interface{} {
 | |
| 	return r.rawBody
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) Read() ([]byte, error) {
 | |
| 	// got a body
 | |
| 	if r.first {
 | |
| 		b := r.body
 | |
| 		r.first = false
 | |
| 		return b, nil
 | |
| 	}
 | |
| 
 | |
| 	var msg transport.Message
 | |
| 	err := r.socket.Recv(&msg)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	r.header = msg.Header
 | |
| 
 | |
| 	return msg.Body, nil
 | |
| }
 | |
| 
 | |
| func (r *rpcRequest) Stream() bool {
 | |
| 	return r.stream
 | |
| }
 | |
| 
 | |
| func (r *rpcMessage) ContentType() string {
 | |
| 	return r.contentType
 | |
| }
 | |
| 
 | |
| func (r *rpcMessage) Topic() string {
 | |
| 	return r.topic
 | |
| }
 | |
| 
 | |
| func (r *rpcMessage) Payload() interface{} {
 | |
| 	return r.payload
 | |
| }
 | |
| 
 | |
| func (r *rpcMessage) Header() map[string]string {
 | |
| 	return r.header
 | |
| }
 | |
| 
 | |
| func (r *rpcMessage) Body() []byte {
 | |
| 	return r.body
 | |
| }
 | |
| 
 | |
| func (r *rpcMessage) Codec() codec.Reader {
 | |
| 	b := buf.New(bytes.NewBuffer(r.body))
 | |
| 	return r.codec(b)
 | |
| }
 |