Change a few things

This commit is contained in:
Asim Aslam
2019-01-10 11:39:39 +00:00
parent bb31480f1a
commit 648da5494f
5 changed files with 97 additions and 38 deletions

View File

@@ -3,7 +3,6 @@ package client
import (
"bytes"
errs "errors"
"fmt"
"github.com/micro/go-micro/codec"
raw "github.com/micro/go-micro/codec/bytes"
@@ -85,7 +84,7 @@ func (rwc *readWriteCloser) Close() error {
return nil
}
func newRpcCodec(req *transport.Message, client transport.Client, c codec.NewCodec) *rpcCodec {
func newRpcCodec(req *transport.Message, client transport.Client, c codec.NewCodec) codec.Codec {
rwc := &readWriteCloser{
wbuf: bytes.NewBuffer(nil),
rbuf: bytes.NewBuffer(nil),
@@ -99,34 +98,45 @@ func newRpcCodec(req *transport.Message, client transport.Client, c codec.NewCod
return r
}
func (c *rpcCodec) Write(req *request, body interface{}) error {
func (c *rpcCodec) Write(wm *codec.Message, body interface{}) error {
c.buf.wbuf.Reset()
m := &codec.Message{
Id: req.Seq,
Target: req.Service,
Method: req.ServiceMethod,
Id: wm.Id,
Target: wm.Target,
Method: wm.Method,
Type: codec.Request,
Header: map[string]string{
"X-Micro-Id": fmt.Sprintf("%v", req.Seq),
"X-Micro-Service": req.Service,
"X-Micro-Method": req.ServiceMethod,
"X-Micro-Id": wm.Id,
"X-Micro-Service": wm.Target,
"X-Micro-Method": wm.Method,
},
}
if err := c.codec.Write(m, body); err != nil {
return errors.InternalServerError("go.micro.client.codec", err.Error())
}
c.req.Body = c.buf.wbuf.Bytes()
// set body
if len(wm.Body) > 0 {
c.req.Body = wm.Body
} else {
c.req.Body = c.buf.wbuf.Bytes()
}
// set header
for k, v := range m.Header {
c.req.Header[k] = v
}
// send the request
if err := c.client.Send(c.req); err != nil {
return errors.InternalServerError("go.micro.client.transport", err.Error())
}
return nil
}
func (c *rpcCodec) Read(r *response, b interface{}) error {
func (c *rpcCodec) ReadHeader(wm *codec.Message, r codec.MessageType) error {
var m transport.Message
if err := c.client.Recv(&m); err != nil {
return errors.InternalServerError("go.micro.client.transport", err.Error())
@@ -139,34 +149,38 @@ func (c *rpcCodec) Read(r *response, b interface{}) error {
me.Header = m.Header
// read header
err := c.codec.ReadHeader(&me, codec.Response)
r.ServiceMethod = me.Method
r.Seq = me.Id
r.Error = me.Error
err := c.codec.ReadHeader(&me, r)
wm.Method = me.Method
wm.Id = me.Id
wm.Error = me.Error
// check error in header
if len(me.Error) == 0 {
r.Error = me.Header["X-Micro-Error"]
wm.Error = me.Header["X-Micro-Error"]
}
// check method in header
if len(me.Method) == 0 {
r.ServiceMethod = me.Header["X-Micro-Method"]
wm.Method = me.Header["X-Micro-Method"]
}
if len(me.Id) == 0 {
r.Seq = me.Header["X-Micro-Id"]
wm.Id = me.Header["X-Micro-Id"]
}
// return header error
if err != nil {
return errors.InternalServerError("go.micro.client.codec", err.Error())
}
return nil
}
func (c *rpcCodec) ReadBody(b interface{}) error {
// read body
if err := c.codec.ReadBody(b); err != nil {
return errors.InternalServerError("go.micro.client.codec", err.Error())
}
return nil
}
@@ -178,3 +192,7 @@ func (c *rpcCodec) Close() error {
}
return nil
}
func (c *rpcCodec) String() string {
return "rpc"
}