Skip to content

Commit ad6509c

Browse files
committed
Send sequential acks as range
Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
1 parent 9e9bde5 commit ad6509c

File tree

1 file changed

+11
-2
lines changed
  • transport-raknet/src/main/java/org/cloudburstmc/netty/handler/codec/raknet/common

1 file changed

+11
-2
lines changed

transport-raknet/src/main/java/org/cloudburstmc/netty/handler/codec/raknet/common/RakSessionCodec.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.net.Inet6Address;
3737
import java.net.InetSocketAddress;
3838
import java.util.ArrayDeque;
39+
import java.util.Deque;
3940
import java.util.Iterator;
4041
import java.util.Queue;
4142
import java.util.concurrent.TimeUnit;
@@ -76,7 +77,7 @@ public class RakSessionCodec extends ChannelDuplexHandler {
7677
private IntObjectMap<RakDatagramPacket> sentDatagrams;
7778
private Queue<IntRange> incomingAcks;
7879
private Queue<IntRange> incomingNaks;
79-
private Queue<IntRange> outgoingAcks;
80+
private Deque<IntRange> outgoingAcks;
8081
private Queue<IntRange> outgoingNaks;
8182
private long lastMinWeight;
8283

@@ -287,7 +288,15 @@ private void handleDatagram(ChannelHandlerContext ctx, RakDatagramPacket packet)
287288
this.outgoingNaks.offer(new IntRange(packet.getSequenceIndex() - missedDatagrams, packet.getSequenceIndex() - 1));
288289
}
289290

290-
this.outgoingAcks.offer(new IntRange(packet.getSequenceIndex(), packet.getSequenceIndex()));
291+
int sequenceIndex = packet.getSequenceIndex();
292+
IntRange lastRange = this.outgoingAcks.peekLast();
293+
294+
// Check if the new sequence index is exactly 1 greater than the last range's end
295+
if (lastRange != null && lastRange.end == sequenceIndex - 1) {
296+
lastRange.end = sequenceIndex;
297+
} else {
298+
this.outgoingAcks.offer(new IntRange(sequenceIndex, sequenceIndex));
299+
}
291300

292301
for (final EncapsulatedPacket encapsulated : packet.getPackets()) {
293302
if (encapsulated.getReliability().isReliable()) {

0 commit comments

Comments
 (0)