Skip to content

Commit da50e9c

Browse files
committed
Use more correct ping time and only set needsB&AS on RakDatagramPacket
Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
1 parent bac675d commit da50e9c

File tree

3 files changed

+44
-11
lines changed

3 files changed

+44
-11
lines changed

transport-raknet/src/main/java/org/cloudburstmc/netty/handler/codec/raknet/client/RakClientOnlineInitialHandlerCompatible.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,16 @@
77
import org.cloudburstmc.netty.channel.raknet.RakChannel;
88
import org.cloudburstmc.netty.channel.raknet.RakPriority;
99
import org.cloudburstmc.netty.channel.raknet.RakReliability;
10+
import org.cloudburstmc.netty.channel.raknet.config.RakChannelOption;
1011
import org.cloudburstmc.netty.channel.raknet.packet.RakMessage;
1112
import org.cloudburstmc.netty.util.RakUtils;
1213

14+
import java.net.InetSocketAddress;
15+
1316
import static org.cloudburstmc.netty.channel.raknet.RakConstants.ID_CONNECTED_PING;
17+
import static org.cloudburstmc.netty.channel.raknet.RakConstants.ID_NEW_INCOMING_CONNECTION;
1418
import static org.cloudburstmc.netty.channel.raknet.RakConstants.IPV4_MESSAGE_SIZE;
19+
import static org.cloudburstmc.netty.channel.raknet.RakConstants.LOCAL_ADDRESS;
1520

1621
public class RakClientOnlineInitialHandlerCompatible extends RakClientOnlineInitialHandler {
1722
public static final String NAME = "rak-client-online-initial-handler";
@@ -36,7 +41,7 @@ void onSuccess(ChannelHandlerContext ctx) {
3641

3742
ByteBuf pingBuffer = ctx.alloc().ioBuffer();
3843
pingBuffer.writeByte(ID_CONNECTED_PING);
39-
pingBuffer.writeLong(System.currentTimeMillis());
44+
pingBuffer.writeLong(System.nanoTime() / 1_000_000L);
4045
ctx.write(new RakMessage(pingBuffer, RakReliability.UNRELIABLE, RakPriority.NORMAL));
4146

4247
ctx.write(future.get());
@@ -57,4 +62,18 @@ void onConnectionRequestAccepted(ChannelHandlerContext ctx, ByteBuf buf) {
5762
this.pingTime = buf.readLong();
5863
return;
5964
}
65+
66+
@Override
67+
void writeIncomingConnection(ChannelHandlerContext ctx, ByteBuf buf, long pingTime) {
68+
buf.writeByte(ID_NEW_INCOMING_CONNECTION);
69+
RakUtils.writeAddress(buf, (InetSocketAddress) ctx.channel().remoteAddress());
70+
71+
RakUtils.writeAddress(buf, (InetSocketAddress) ctx.channel().localAddress());
72+
for (int i = 0; i < this.rakChannel().config().getOption(RakChannelOption.RAK_CLIENT_INTERNAL_ADDRESSES) - 1; i++) {
73+
RakUtils.writeAddress(buf, LOCAL_ADDRESS);
74+
}
75+
76+
buf.writeLong(pingTime);
77+
buf.writeLong(System.nanoTime() / 1_000_000L);
78+
}
6079
}

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public class RakSessionCodec extends ChannelDuplexHandler {
5858
private RakSlidingWindow slidingWindow;
5959
private int splitIndex;
6060
private int datagramReadIndex;
61-
private int datagramWriteIndex;
61+
int datagramWriteIndex;
6262
private int reliabilityReadIndex;
6363
private int reliabilityWriteIndex;
6464
private int[] orderReadIndex;
@@ -70,7 +70,7 @@ public class RakSessionCodec extends ChannelDuplexHandler {
7070
private FastBinaryMinHeap<EncapsulatedPacket> outgoingPackets;
7171
private long[] outgoingPacketNextWeights;
7272
private FastBinaryMinHeap<EncapsulatedPacket>[] orderingHeaps;
73-
private long currentPingTime = -1;
73+
long currentPingTime = -1;
7474
private long lastPingTime = -1;
7575
private long lastPongTime = -1;
7676
private IntObjectMap<RakDatagramPacket> sentDatagrams;
@@ -432,15 +432,19 @@ private void onTick() {
432432

433433
ChannelHandlerContext ctx = ctx();
434434

435-
if (this.currentPingTime + 2000L < curTime) {
435+
this.writePing(ctx, curTime);
436+
437+
this.internalFlush(ctx);
438+
}
439+
440+
void writePing(ChannelHandlerContext ctx, long curTime) {
441+
if (this.currentPingTime + 2000L < curTime && this.datagramWriteIndex > 1) {
436442
ByteBuf buffer = ctx.alloc().ioBuffer(9);
437443
buffer.writeByte(ID_CONNECTED_PING);
438444
buffer.writeLong(curTime);
439445
this.currentPingTime = curTime;
440446
this.write(ctx, new RakMessage(buffer, RakReliability.UNRELIABLE, RakPriority.IMMEDIATE), ctx.voidPromise());
441447
}
442-
443-
this.internalFlush(ctx);
444448
}
445449

446450
private void internalFlush(ChannelHandlerContext ctx) {
Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package org.cloudburstmc.netty.handler.codec.raknet.common;
22

3+
import io.netty.buffer.ByteBuf;
4+
import io.netty.channel.ChannelHandlerContext;
35
import org.cloudburstmc.netty.channel.raknet.*;
46
import org.cloudburstmc.netty.channel.raknet.packet.EncapsulatedPacket;
5-
import org.cloudburstmc.netty.channel.raknet.packet.RakDatagramPacket;
7+
import org.cloudburstmc.netty.channel.raknet.packet.RakMessage;
8+
9+
import static org.cloudburstmc.netty.channel.raknet.RakConstants.ID_CONNECTED_PING;
610

711
public class RakSessionCodecCompatible extends RakSessionCodec {
812
public static final String NAME = "rak-session-codec";
@@ -12,12 +16,18 @@ public RakSessionCodecCompatible(RakChannel channel) {
1216
}
1317

1418
@Override
15-
RakDatagramPacket createDatagramPacket() {
16-
return RakDatagramPacket.newInstance();
19+
EncapsulatedPacket createEncapsulatedPacket() {
20+
return EncapsulatedPacket.newInstance();
1721
}
1822

1923
@Override
20-
EncapsulatedPacket createEncapsulatedPacket() {
21-
return EncapsulatedPacket.newInstance();
24+
void writePing(ChannelHandlerContext ctx, long curTime) {
25+
if (this.currentPingTime + 2000L < curTime && this.datagramWriteIndex > 1) {
26+
ByteBuf buffer = ctx.alloc().ioBuffer(9);
27+
buffer.writeByte(ID_CONNECTED_PING);
28+
buffer.writeLong(System.nanoTime() / 1_000_000L);
29+
this.currentPingTime = curTime;
30+
this.write(ctx, new RakMessage(buffer, RakReliability.UNRELIABLE, RakPriority.IMMEDIATE), ctx.voidPromise());
31+
}
2232
}
2333
}

0 commit comments

Comments
 (0)