package io.mycat.backend.postgresql.packet;
import java.nio.ByteBuffer;
/**
* 后端数据包信息
*
* @author Coollf
*
*/
// BackendKeyData (B)
// Byte1('K')
// 标识该消息是一个取消键字数据。 如果前端希望能够在稍后发出 CancelRequest 消息, 那么它必须保存这个值。
//
// Int32(12)
// 以字节记的消息内容的长度,包括长度本身。
//
// Int32
// 后端的进程号(PID)。
//
// Int32
// 此后端的密钥(secret key )。
public class BackendKeyData extends PostgreSQLPacket {
/**
* 长度
*/
private int length;
/***
* 进程ID
*/
private int pid;
/***
* 此后端的密钥(secret key )
*/
private int secretKey;
public int getPid() {
return pid;
}
public int getSecretKey() {
return secretKey;
}
@Override
public int getLength() {
return length;
}
@Override
public char getMarker() {
return PacketMarker.B_BackendKey.getValue();
}
/***
* 解析数据包
*
* @param buffer
* @param offset
* @return
* @throws IllegalArgumentException
*/
public static BackendKeyData parse(ByteBuffer buffer, int offset) {
if (buffer.get(offset) != PacketMarker.B_BackendKey.getValue()) {
throw new IllegalArgumentException("this packet not is BackendKeyData");
}
BackendKeyData pac = new BackendKeyData();
pac.length = buffer.getInt(offset + 1);
pac.pid = buffer.getInt(offset + 1 + 4);
pac.secretKey = buffer.getInt(offset + 1 + 4 + 4);
return pac;
}
}