Java源码示例:org.tio.core.GroupContext
示例1
@Override
public ByteBuffer encode(Packet packet, GroupContext groupContext, ChannelContext channelContext) {
LiteRpcPacket rpcPacket = (LiteRpcPacket) packet;
// 理论上只会编码resp对象吧
if (rpcPacket.opType == OP_RPC_RESP) {
int bodySize = 2 + 16;
if (rpcPacket.body != null) {
bodySize += rpcPacket.body.length;
}
ByteBuffer buffer = ByteBuffer.allocate(HEADER_LENGHT + bodySize);
buffer.order(groupContext.getByteOrder());
buffer.putInt(bodySize);
buffer.put(VERSION);
buffer.put(OP_RPC_RESP);
buffer.putLong(rpcPacket.uuidMost);
buffer.putLong(rpcPacket.uuidLeast);
if (rpcPacket.body != null)
buffer.put(rpcPacket.body);
return buffer;
}
return null;
}
示例2
/**
* 编码:把业务消息包编码为可以发送的ByteBuffer
* 消息头:type + bodyLength
* 消息体:byte[]
*/
@Override
public ByteBuffer encode(Packet packet, GroupContext groupContext, ChannelContext channelContext) {
BlockPacket showcasePacket = (BlockPacket) packet;
byte[] body = showcasePacket.getBody();
int bodyLen = 0;
if (body != null) {
bodyLen = body.length;
}
//总长度是消息头的长度+消息体的长度
int allLen = BlockPacket.HEADER_LENGTH + bodyLen;
ByteBuffer buffer = ByteBuffer.allocate(allLen);
buffer.order(groupContext.getByteOrder());
//写入消息类型
buffer.put(showcasePacket.getType());
//写入消息体长度
buffer.putInt(bodyLen);
//写入消息体
if (body != null) {
buffer.put(body);
}
return buffer;
}
示例3
/**
* 编码:把业务消息包编码为可以发送的ByteBuffer
* 总的消息结构:消息头 + 消息类别 + 消息体
* 消息头结构: 4个字节,存储消息体的长度
* 消息类别: 1 个字节, 存储类别,S => 字符串, B => 区块, T => 交易
* 消息体结构: 对象的json串的byte[]
*/
public ByteBuffer encode(Packet packet, GroupContext groupContext, ChannelContext channelContext) {
MessagePacket messagePacket = (MessagePacket) packet;
byte[] body = messagePacket.getBody();
int bodyLen = 0;
if (body != null) {
bodyLen = body.length;
}
//bytebuffer的总长度是 = 消息头的长度 + 消息体的长度
int allLen = MessagePacket.HEADER_LENGTH + bodyLen;
//创建一个新的bytebuffer
ByteBuffer buffer = ByteBuffer.allocate(allLen);
//设置字节序
buffer.order(groupContext.getByteOrder());
//写入消息类型
buffer.put(messagePacket.getType());
//写入消息头----消息头的内容就是消息体的长度
buffer.putInt(bodyLen);
//写入消息体
if (body != null) {
buffer.put(body);
}
return buffer;
}
示例4
@Override
public void onExpired(GroupContext groupContext, IpStat ipStat) {
}