in internal/remote/codec.go [173:215]
func encode(command *RemotingCommand) ([]byte, error) {
var (
header []byte
err error
)
switch codecType {
case JsonCodecs:
header, err = jsonSerializer.encodeHeader(command)
case RocketMQCodecs:
header, err = rocketMqSerializer.encodeHeader(command)
}
if err != nil {
return nil, err
}
frameSize := 4 + len(header) + len(command.Body)
buf := bytes.NewBuffer(make([]byte, frameSize))
buf.Reset()
err = binary.Write(buf, binary.BigEndian, int32(frameSize))
if err != nil {
return nil, err
}
err = binary.Write(buf, binary.BigEndian, markProtocolType(int32(len(header))))
if err != nil {
return nil, err
}
err = binary.Write(buf, binary.BigEndian, header)
if err != nil {
return nil, err
}
err = binary.Write(buf, binary.BigEndian, command.Body)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}