func()

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
}