func()

in proxy/protocol/dubbo/dubbo/codec.go [72:131]


func (p *DubboCodec) EncodeDubboRsp(rsp *DubboRsp, buffer *util.WriteBuffer) int {
	// set Magic number.
	header := make([]byte, HeaderLength)
	// set Magic number.
	util.Short2bytes(Magic, header, 0)
	// set request and serialization flag.
	header[2] = p.GetContentTypeID()
	if rsp.IsHeartbeat() {
		header[2] |= FlagEvent
	}
	// set response status.
	status := rsp.GetStatus()
	header[3] = status
	// set request id.
	util.Long2bytes(rsp.GetID(), header, 4)
	buffer.WriteIndex(HeaderLength)
	if status == Ok {
		if rsp.IsHeartbeat() {
			//encodeHeartbeatData
			ret := rsp.GetValue()
			buffer.WriteObject(ret)
		} else {
			//encodeResponseData
			except := rsp.GetException()
			if except == nil {
				ret := rsp.GetValue()
				if ret == nil {
					buffer.WriteByte(ResponseNullValue)
				} else {
					//buffer.WriteByte(ResponseValue)
					if v, ok := ret.([]byte); ok {
						buffer.WriteBytes(v)
					} else {
						buffer.WriteObject(ret)
					}

				}
			} else {
				buffer.WriteByte(ResponseWithException)
				buffer.WriteObject(except)
			}
		}
	} else {
		if rsp.GetErrorMsg() == "" {
			buffer.WriteByte(ResponseNullValue)
		} else {
			buffer.WriteObject(rsp.GetErrorMsg())
		}

	}

	len := buffer.WrittenBytes() - HeaderLength
	util.Int2bytes(len, header, 12)

	buffer.WriteIndex(0)
	buffer.WriteBytes(header)
	buffer.WriteIndex(HeaderLength + len)

	return 0
}