in proxy/protocol/dubbo/dubbo/codec.go [265:326]
func (p *DubboCodec) DecodeDubboReqBodyForRegstry(req *Request, bodyBuf *util.ReadBuffer) int {
var obj interface{}
var err error
if req.IsHeartbeat() {
//decodeHeartbeatData
obj, err = bodyBuf.ReadObject()
if err != nil {
req.SetData(err.Error())
req.SetBroken(true)
return -1
}
} else if req.IsEvent() {
//decodeEventData
obj, err = bodyBuf.ReadObject()
if err != nil {
req.SetData(err.Error())
req.SetBroken(true)
return -1
}
} else {
req.SetAttachment(DubboVersionKey, bodyBuf.ReadString())
req.SetAttachment(PathKey, bodyBuf.ReadString())
req.SetAttachment(VersionKey, bodyBuf.ReadString())
req.SetVersion(req.GetAttachment(VersionKey, ""))
req.SetMethodName(bodyBuf.ReadString())
//解析参数
typeDesc := string(bodyBuf.ReadString())
agrsArry := util.TypeDesToArgsObjArry(typeDesc)
if typeDesc == "" {
agrsArry = nil
} else {
size := len(agrsArry)
if req.GetMethodName() == "subscribe" {
size = 1
}
for i := 0; i < size; i++ {
val, err := bodyBuf.ReadObject()
if err != nil {
req.SetBroken(true)
req.SetData(err.Error())
return -1
} else {
agrsArry[i].SetValue(val)
}
}
req.SetArguments(agrsArry)
}
if err == nil {
req.SetAttachments(nil)
} else {
req.SetBroken(true)
req.SetData(err.Error())
return -1
}
req.SetBroken(false)
req.SetData(obj)
}
return 0
}