All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.netty.protocol.dubbo.DubboPacket Maven / Gradle / Ivy

package com.github.netty.protocol.dubbo;

import com.github.netty.protocol.dubbo.packet.BodyFail;
import com.github.netty.protocol.dubbo.packet.BodyHeartBeat;
import com.github.netty.protocol.dubbo.packet.BodyRequest;
import com.github.netty.protocol.dubbo.packet.BodyResponse;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;

import java.util.Map;
import java.util.Objects;

public class DubboPacket {
    final Header header;
    Body body;

    public DubboPacket(Header header) {
        this.header = header;
    }

    public Header getHeader() {
        return header;
    }

    public Body getBody() {
        return body;
    }

    public void release() {
        header.release();
        if (body != null) {
            body.release();
        }
    }

    public ByteBuf buildErrorPacket(ByteBufAllocator allocator, byte errorStatus, String errorMessage) {
        byte serializationProtoId = header.getSerializationProtoId();
        byte[] errorBytes = Serialization.getStringBytesOf(serializationProtoId, errorMessage);
        int maxCapacity = Constant.HEADER_LENGTH + errorBytes.length;

        ByteBuf empty = allocator.ioBuffer(maxCapacity, maxCapacity);
        empty.writeByte(Constant.MAGIC_0);
        empty.writeByte(Constant.MAGIC_1);
        empty.writeByte(serializationProtoId);
        empty.writeByte(errorStatus);
        empty.writeLong(header.getRequestId());
        empty.writeInt(errorBytes.length);
        empty.writeBytes(errorBytes);
        return empty;
    }

    public String getRequestPath() {
        if (body instanceof BodyRequest) {
            return ((BodyRequest) body).getPath();
        } else {
            return null;
        }
    }

    public String getRequestMethodName() {
        if (body instanceof BodyRequest) {
            return ((BodyRequest) body).getMethodName();
        } else {
            return null;
        }
    }

    public String getAttachmentValue(String attachmentName) {
        if (attachmentName == null || attachmentName.isEmpty()) {
            return null;
        }
        String serviceName = null;
        if (body instanceof BodyRequest) {
            Map attachments = ((BodyRequest) body).getAttachments();
            if (attachments != null) {
                serviceName = Objects.toString(attachments.get(attachmentName), null);
            }
        } else if (body instanceof BodyResponse) {
            Map attachments = ((BodyResponse) body).getAttachments();
            if (attachments != null) {
                serviceName = Objects.toString(attachments.get(attachmentName), null);
            }
        } else if (body instanceof BodyHeartBeat) {

        } else if (body instanceof BodyFail) {

        } else {
        }
        return serviceName;
    }

    @Override
    public String toString() {
        return "DubboPacket{" +
                "\n" + header +
                ",\n" + body +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy