Я пытаюсь понять протокол декодирования aTrack, основанный на реализации https://github.com/traccar/traccar, они используют Netty для реализации своей платформы, но я не понимаю, как использовать метод retain объекта ByteBuf.Они использовали его в этом методе:
protected Object decode(
Channel channel, SocketAddress remoteAddress, Object msg) throws Exception {
ByteBuf buf = (ByteBuf) msg;
if (buf.getUnsignedShort(buf.readerIndex()) == 0xfe02) {
if (channel != null) {
channel.writeAndFlush(new NetworkMessage(buf.retain(), remoteAddress)); // keep-alive message
}
return null;
} else if (buf.getByte(buf.readerIndex()) == '$') {
return decodeInfo(channel, remoteAddress, buf.toString(StandardCharsets.US_ASCII).trim());
} else if (buf.getByte(buf.readerIndex() + 2) == ',') {
return decodeText(channel, remoteAddress, buf.toString(StandardCharsets.US_ASCII).trim());
} else {
return decodeBinary(channel, remoteAddress, buf);
}
}
Кто-нибудь может объяснить мне, как работает метод rete () ByteBuf?
спасибо.