Improved accuracy of ping calculation #77

This commit is contained in:
Collin Smith 2020-06-07 15:55:28 -07:00
parent cdc73e12d6
commit 3390b544a6
5 changed files with 55 additions and 42 deletions

View File

@ -15,20 +15,24 @@ public final class Ping extends Table {
public Ping __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
public int tickCount() { int o = __offset(4); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
public long time() { int o = __offset(6); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
public long sendTime() { int o = __offset(6); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
public long processTime() { int o = __offset(8); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
public static int createPing(FlatBufferBuilder builder,
int tickCount,
long time) {
builder.startObject(2);
Ping.addTime(builder, time);
long sendTime,
long processTime) {
builder.startObject(3);
Ping.addProcessTime(builder, processTime);
Ping.addSendTime(builder, sendTime);
Ping.addTickCount(builder, tickCount);
return Ping.endPing(builder);
}
public static void startPing(FlatBufferBuilder builder) { builder.startObject(2); }
public static void startPing(FlatBufferBuilder builder) { builder.startObject(3); }
public static void addTickCount(FlatBufferBuilder builder, int tickCount) { builder.addInt(0, tickCount, 0); }
public static void addTime(FlatBufferBuilder builder, long time) { builder.addLong(1, time, 0L); }
public static void addSendTime(FlatBufferBuilder builder, long sendTime) { builder.addLong(1, sendTime, 0L); }
public static void addProcessTime(FlatBufferBuilder builder, long processTime) { builder.addLong(2, processTime, 0L); }
public static int endPing(FlatBufferBuilder builder) {
int o = builder.endObject();
return o;

View File

@ -1,22 +1,23 @@
package com.riiablo.engine.client;
import com.google.flatbuffers.FlatBufferBuilder;
import java.io.OutputStream;
import java.nio.channels.Channels;
import java.nio.channels.WritableByteChannel;
import com.artemis.annotations.All;
import com.artemis.annotations.Wire;
import com.artemis.systems.IntervalSystem;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.net.Socket;
import com.badlogic.gdx.utils.TimeUtils;
import com.riiablo.Riiablo;
import com.riiablo.net.packet.d2gs.D2GS;
import com.riiablo.net.packet.d2gs.D2GSData;
import com.riiablo.net.packet.d2gs.Ping;
import java.io.OutputStream;
import java.nio.channels.Channels;
import java.nio.channels.WritableByteChannel;
@All
public class Pinger extends IntervalSystem {
private static final String TAG = "Pinger";
@ -40,7 +41,7 @@ public class Pinger extends IntervalSystem {
@Override
protected void processSystem() {
FlatBufferBuilder builder = new FlatBufferBuilder(0);
int dataOffset = Ping.createPing(builder, tick++, TimeUtils.millis());
int dataOffset = Ping.createPing(builder, tick++, TimeUtils.millis(), 0);
int root = D2GS.createD2GS(builder, D2GSData.Ping, dataOffset);
D2GS.finishSizePrefixedD2GSBuffer(builder, root);
@ -54,6 +55,6 @@ public class Pinger extends IntervalSystem {
}
public void Ping(Ping packet) {
Riiablo.ping = TimeUtils.timeSinceMillis(packet.time());
Riiablo.ping = TimeUtils.millis() - packet.sendTime() - packet.processTime();
}
}

View File

@ -23,7 +23,8 @@ table Disconnect {
table Ping {
// request
tickCount:int32;
time:int64;
sendTime:int64;
processTime:int64;
// response
}

View File

@ -1,12 +1,34 @@
package com.riiablo.server.d2gs;
import com.google.flatbuffers.FlatBufferBuilder;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.lang3.ArrayUtils;
import com.artemis.ComponentMapper;
import com.artemis.World;
import com.artemis.WorldConfiguration;
import com.artemis.WorldConfigurationBuilder;
import com.artemis.utils.BitVector;
import net.mostlyoriginal.api.event.common.EventSystem;
import com.badlogic.gdx.Application;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
@ -22,6 +44,7 @@ import com.badlogic.gdx.net.Socket;
import com.badlogic.gdx.utils.GdxRuntimeException;
import com.badlogic.gdx.utils.IntIntMap;
import com.badlogic.gdx.utils.TimeUtils;
import com.riiablo.COFs;
import com.riiablo.Files;
import com.riiablo.Riiablo;
@ -64,6 +87,7 @@ import com.riiablo.net.packet.d2gs.CursorToStore;
import com.riiablo.net.packet.d2gs.D2GSData;
import com.riiablo.net.packet.d2gs.Disconnect;
import com.riiablo.net.packet.d2gs.GroundToCursor;
import com.riiablo.net.packet.d2gs.Ping;
import com.riiablo.net.packet.d2gs.StoreToCursor;
import com.riiablo.net.packet.d2gs.SwapBeltItem;
import com.riiablo.net.packet.d2gs.SwapBodyItem;
@ -71,30 +95,6 @@ import com.riiablo.net.packet.d2gs.SwapStoreItem;
import com.riiablo.save.CharData;
import com.riiablo.util.DebugUtils;
import net.mostlyoriginal.api.event.common.EventSystem;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.lang3.ArrayUtils;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
public class D2GS extends ApplicationAdapter {
private static final String TAG = "D2GS";
@ -535,9 +535,13 @@ public class D2GS extends ApplicationAdapter {
}
private void Ping(Packet packet) {
// Ping ping = (Ping) packet.data.data(new Ping());
packet.id = (1 << packet.id);
outPackets.offer(packet);
Ping ping = (Ping) packet.data.data(new Ping());
FlatBufferBuilder builder = new FlatBufferBuilder(0);
int dataOffset = Ping.createPing(builder, ping.tickCount(), ping.sendTime(), TimeUtils.millis() - packet.time);
int root = com.riiablo.net.packet.d2gs.D2GS.createD2GS(builder, D2GSData.Ping, dataOffset);
com.riiablo.net.packet.d2gs.D2GS.finishSizePrefixedD2GSBuffer(builder, root);
Packet response = Packet.obtain(1 << packet.id, builder.dataBuffer());
outPackets.offer(response);
}
private void Synchronize(Packet packet) {

View File

@ -1,19 +1,22 @@
package com.riiablo.server.d2gs;
import com.google.flatbuffers.ByteBufferUtil;
import java.nio.ByteBuffer;
import com.badlogic.gdx.utils.TimeUtils;
import com.riiablo.net.packet.d2gs.D2GS;
import java.nio.ByteBuffer;
public class Packet {
public int id;
public long time;
public ByteBuffer buffer;
public D2GS data;
public static Packet obtain(int id, ByteBuffer buffer) {
Packet packet = new Packet();
packet.id = id;
packet.time = TimeUtils.millis();
packet.buffer = buffer;
packet.data = D2GS.getRootAsD2GS(ByteBufferUtil.removeSizePrefix(buffer));
return packet;