List of usage examples for io.vertx.core.datagram DatagramPacket data
Buffer data();
From source file:org.hawkular.metrics.clients.ptrans.collectd.packet.CollectdPacketDecoder.java
License:Apache License
public CollectdPacket decode(DatagramPacket packet) { long start = System.currentTimeMillis(); ByteBuf content = packet.data().getByteBuf(); List<Part<?>> parts = new ArrayList<>(100); for (;;) {//from ww w .j a v a 2s .co m if (!hasReadableBytes(content, 4)) { break; } short partTypeId = content.readShort(); PartType partType = PartType.findById(partTypeId); int partLength = content.readUnsignedShort(); int valueLength = partLength - 4; if (!hasReadableBytes(content, valueLength)) { break; } if (partType == null) { content.skipBytes(valueLength); continue; } Part<?> part; switch (partType) { case HOST: case PLUGIN: case PLUGIN_INSTANCE: case TYPE: case INSTANCE: part = new StringPart(partType, readStringPartContent(content, valueLength)); break; case TIME: case TIME_HIGH_RESOLUTION: case INTERVAL: case INTERVAL_HIGH_RESOLUTION: part = new NumericPart(partType, readNumericPartContent(content)); break; case VALUES: part = new ValuePart(partType, readValuePartContent(content, valueLength)); break; default: part = null; content.skipBytes(valueLength); } //noinspection ConstantConditions if (part != null) { log.tracef("Decoded part: %s", part); parts.add(part); } } if (log.isTraceEnabled()) { long stop = System.currentTimeMillis(); log.tracef("Decoded datagram in %d ms", stop - start); } if (parts.size() > 0) { return new CollectdPacket(parts); } else { log.trace("No parts decoded, no CollectdPacket output"); return null; } }