@@ -75,7 +75,7 @@ public void run() {
7575
7676 public Channel channel ;
7777
78- public ByteBuf tmp ;
78+ public ByteBuf packetBuffer ;
7979
8080 public int waitingLength ;
8181
@@ -107,17 +107,29 @@ public void sendPacket(PacketOut packet) {
107107 channel .writeAndFlush (buf );
108108 }
109109
110+ public void reallocateBuf (ChannelHandlerContext ctx ) {
111+ ByteBuf newBuf = ctx .alloc ().buffer (4 );
112+ if (packetBuffer != null ) {
113+ newBuf .writeBytes (packetBuffer );
114+ packetBuffer .release ();
115+ }
116+ packetBuffer = newBuf ;
117+ }
118+
110119 @ Override
111120 public void handlerAdded (ChannelHandlerContext ctx ) {
112- tmp = ctx .alloc ().buffer (4 );
121+ if (packetBuffer != null ) {
122+ packetBuffer .release ();
123+ }
124+ packetBuffer = ctx .alloc ().buffer (4 );
113125 lastPacketReceived = System .currentTimeMillis ();
114126 }
115127
116128 @ Override
117129 public void handlerRemoved (ChannelHandlerContext ctx ) {
118130 DepenizenBungee .instance .getLogger ().info ("Connection '" + connectionName + "' ended." );
119- tmp .release ();
120- tmp = null ;
131+ packetBuffer .release ();
132+ packetBuffer = null ;
121133 isValid = false ;
122134 DepenizenBungee .instance .removeConnection (this );
123135 broadcastRemoval ();
@@ -130,15 +142,15 @@ public void handlerRemoved(ChannelHandlerContext ctx) {
130142 @ Override
131143 public void channelRead (ChannelHandlerContext ctx , Object msg ) {
132144 ByteBuf m = (ByteBuf ) msg ;
133- tmp .writeBytes (m );
145+ packetBuffer .writeBytes (m );
134146 m .release ();
135147 if (currentStage == Stage .AWAIT_HEADER ) {
136- if (tmp .readableBytes () >= 8 ) {
137- waitingLength = tmp .readInt ();
138- packetId = tmp .readInt ();
148+ if (packetBuffer .readableBytes () >= 8 ) {
149+ waitingLength = packetBuffer .readInt ();
150+ packetId = packetBuffer .readInt ();
139151 currentStage = Stage .AWAIT_DATA ;
140152 if (thisServer == null && packetId != MyInfoPacketIn .PACKET_ID ) {
141- fail ("Invalid FIRST packet id (must be MyInfoPacket): " + packetId + ", data length thus far = " + tmp .readableBytes ());
153+ fail ("Invalid FIRST packet id (must be MyInfoPacket): " + packetId + ", data length thus far = " + packetBuffer .readableBytes ());
142154 return ;
143155 }
144156 if (!DepenizenBungee .instance .packets .containsKey (packetId )) {
@@ -148,12 +160,13 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) {
148160 }
149161 }
150162 if (currentStage == Stage .AWAIT_DATA ) {
151- if (tmp .readableBytes () >= waitingLength ) {
163+ if (packetBuffer .readableBytes () >= waitingLength ) {
152164 try {
153165 lastPacketReceived = System .currentTimeMillis ();
154166 PacketIn packet = DepenizenBungee .instance .packets .get (packetId );
155- packet .process (this , tmp );
167+ packet .process (this , packetBuffer );
156168 currentStage = Stage .AWAIT_HEADER ;
169+ reallocateBuf (ctx );
157170 }
158171 catch (Throwable ex ) {
159172 ex .printStackTrace ();
0 commit comments