diff --git a/core/gen/com/riiablo/net/packet/d2gs/Ping.java b/core/gen/com/riiablo/net/packet/d2gs/Ping.java index 3021ae87..1bf7cf17 100644 --- a/core/gen/com/riiablo/net/packet/d2gs/Ping.java +++ b/core/gen/com/riiablo/net/packet/d2gs/Ping.java @@ -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; diff --git a/core/src/com/riiablo/engine/client/Pinger.java b/core/src/com/riiablo/engine/client/Pinger.java index e1d07249..aaa02d51 100644 --- a/core/src/com/riiablo/engine/client/Pinger.java +++ b/core/src/com/riiablo/engine/client/Pinger.java @@ -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(); } } diff --git a/core/src/com/riiablo/net/d2gs/Networking.fbs b/core/src/com/riiablo/net/d2gs/Networking.fbs index 1c213b4d..9c37bbde 100644 --- a/core/src/com/riiablo/net/d2gs/Networking.fbs +++ b/core/src/com/riiablo/net/d2gs/Networking.fbs @@ -23,7 +23,8 @@ table Disconnect { table Ping { // request tickCount:int32; - time:int64; + sendTime:int64; + processTime:int64; // response } \ No newline at end of file diff --git a/server/d2gs/src/com/riiablo/server/d2gs/D2GS.java b/server/d2gs/src/com/riiablo/server/d2gs/D2GS.java index 8c466b5b..3831351a 100644 --- a/server/d2gs/src/com/riiablo/server/d2gs/D2GS.java +++ b/server/d2gs/src/com/riiablo/server/d2gs/D2GS.java @@ -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) { diff --git a/server/d2gs/src/com/riiablo/server/d2gs/Packet.java b/server/d2gs/src/com/riiablo/server/d2gs/Packet.java index fa7a3a6d..a1d12489 100644 --- a/server/d2gs/src/com/riiablo/server/d2gs/Packet.java +++ b/server/d2gs/src/com/riiablo/server/d2gs/Packet.java @@ -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;