Automate the stress testing of a Minecraft server network using bots

Optimisation: Don't use Unpooled

PureGero dadf42a4 3a19ec6f

Changed files
+23 -10
src
main
java
com
github
puregero
+22 -6
src/main/java/com/github/puregero/minecraftstresstest/CompressionDecoder.java
··· 1 1 package com.github.puregero.minecraftstresstest; 2 2 3 3 import io.netty.buffer.ByteBuf; 4 - import io.netty.buffer.Unpooled; 5 4 import io.netty.channel.ChannelHandlerContext; 6 5 import io.netty.handler.codec.ByteToMessageDecoder; 7 6 7 + import java.nio.ByteBuffer; 8 8 import java.util.List; 9 9 import java.util.zip.Inflater; 10 10 ··· 23 23 return; 24 24 } 25 25 26 - byte[] bs = new byte[friendlyByteBuf.readableBytes()]; 27 - friendlyByteBuf.readBytes(bs); 26 + ByteBuffer bs; 27 + if (friendlyByteBuf.nioBufferCount() > 0) { 28 + bs = friendlyByteBuf.nioBuffer(); 29 + friendlyByteBuf.skipBytes(friendlyByteBuf.readableBytes()); 30 + } else { 31 + bs = ByteBuffer.allocateDirect(friendlyByteBuf.readableBytes()); 32 + friendlyByteBuf.readBytes(bs); 33 + bs.flip(); 34 + } 28 35 this.inflater.setInput(bs); 29 - byte[] cs = new byte[length]; 30 - this.inflater.inflate(cs); 31 - list.add(Unpooled.wrappedBuffer(cs)); 36 + 37 + ByteBuf cs = channelHandlerContext.alloc().directBuffer(length); 38 + ByteBuffer csInternal = cs.internalNioBuffer(0, length); 39 + int startPos = csInternal.position(); 40 + this.inflater.inflate(csInternal); 41 + int csLength = csInternal.position() - startPos; 42 + if (csLength != length) { 43 + throw new IllegalStateException("Decompressed length " + csLength + " does not match expected length " + length); 44 + } 45 + cs.writerIndex(cs.writerIndex() + csLength); 46 + 32 47 this.inflater.reset(); 48 + list.add(cs); 33 49 } 34 50 } 35 51 }
+1 -4
src/main/java/com/github/puregero/minecraftstresstest/PacketDecoder.java
··· 1 1 package com.github.puregero.minecraftstresstest; 2 2 3 3 import io.netty.buffer.ByteBuf; 4 - import io.netty.buffer.Unpooled; 5 4 import io.netty.channel.ChannelHandlerContext; 6 5 import io.netty.handler.codec.ByteToMessageDecoder; 7 6 ··· 23 22 return; 24 23 } 25 24 26 - byte[] bs = new byte[length]; 27 - friendlyByteBuf.readBytes(bs); 28 - list.add(Unpooled.wrappedBuffer(bs)); 25 + list.add(friendlyByteBuf.readBytes(length)); 29 26 } 30 27 } 31 28 }