From 01e1438382e1f128c2d1f656a1490040fa92fb88 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 17 Apr 2019 21:59:26 -0400 Subject: [PATCH] Switched to ArcNet networking extension --- .../io/anuke/mindustry/AndroidLauncher.java | 8 +-- build.gradle | 3 +- .../mindustry/desktop/DesktopLauncher.java | 8 +-- ios/src/io/anuke/mindustry/IOSLauncher.java | 8 +-- .../net/ArcNetClient.java} | 33 ++++------ .../net/ArcNetServer.java} | 26 +++----- .../net/FrameworkSerializer.java | 10 +-- .../net/PacketSerializer.java} | 25 ++----- net/src/io/anuke/net/KryoCore.java | 66 ------------------- .../mindustry/server/ServerLauncher.java | 8 +-- settings.gradle | 2 +- 11 files changed, 46 insertions(+), 151 deletions(-) rename net/src/io/anuke/{net/KryoClient.java => mindustry/net/ArcNetClient.java} (88%) rename net/src/io/anuke/{net/KryoServer.java => mindustry/net/ArcNetServer.java} (92%) rename net/src/io/anuke/{ => mindustry}/net/FrameworkSerializer.java (87%) rename net/src/io/anuke/{net/ByteSerializer.java => mindustry/net/PacketSerializer.java} (68%) delete mode 100644 net/src/io/anuke/net/KryoCore.java diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 087f392f7d..7571b3f746 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -23,8 +23,8 @@ import io.anuke.mindustry.game.Saves.SaveSlot; import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.ui.dialogs.FileChooser; -import io.anuke.net.KryoClient; -import io.anuke.net.KryoServer; +import io.anuke.mindustry.net.ArcNetClient; +import io.anuke.mindustry.net.ArcNetServer; import java.io.*; import java.util.ArrayList; @@ -111,8 +111,8 @@ public class AndroidLauncher extends AndroidApplication{ } config.hideStatusBar = true; - Net.setClientProvider(new KryoClient()); - Net.setServerProvider(new KryoServer()); + Net.setClientProvider(new ArcNetClient()); + Net.setServerProvider(new ArcNetServer()); initialize(new Mindustry(), config); checkFiles(getIntent()); } diff --git a/build.gradle b/build.gradle index 1b5a1b72e7..0745b916c7 100644 --- a/build.gradle +++ b/build.gradle @@ -202,7 +202,7 @@ project(":core"){ compile arcModule("arc-core") compile arcModule("extensions:freetype") - //compile arcModule("extensions:postprocessing") + compile arcModule("extensions:arcnet") if(localArc() && debugged()) compile arcModule("extensions:recorder") compileOnly project(":annotations") @@ -259,7 +259,6 @@ project(":net"){ dependencies{ compile project(":core") compile "org.lz4:lz4-java:1.4.1" - compile 'com.github.Anuken:kryonet:a64d2280880e80566ca1bdaffa55de43e51cad38' compile 'com.github.Anuken:WaifUPnP:05eb46bc577fd7674596946ba288c96c0cedd893' } } diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java index 3ebae9529f..7dfc9ce5f6 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java @@ -10,8 +10,8 @@ import io.anuke.mindustry.Mindustry; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.net.Net; -import io.anuke.net.KryoClient; -import io.anuke.net.KryoServer; +import io.anuke.mindustry.net.ArcNetClient; +import io.anuke.mindustry.net.ArcNetServer; public class DesktopLauncher extends Lwjgl3Application{ @@ -45,8 +45,8 @@ public class DesktopLauncher extends Lwjgl3Application{ Platform.instance = new DesktopPlatform(arg); - Net.setClientProvider(new KryoClient()); - Net.setServerProvider(new KryoServer()); + Net.setClientProvider(new ArcNetClient()); + Net.setServerProvider(new ArcNetServer()); new DesktopLauncher(new Mindustry(), config); }catch(Throwable e){ CrashHandler.handle(e); diff --git a/ios/src/io/anuke/mindustry/IOSLauncher.java b/ios/src/io/anuke/mindustry/IOSLauncher.java index 3f795ee768..7f9e9f43e2 100644 --- a/ios/src/io/anuke/mindustry/IOSLauncher.java +++ b/ios/src/io/anuke/mindustry/IOSLauncher.java @@ -10,8 +10,8 @@ import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.game.Saves.SaveSlot; import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.net.Net; -import io.anuke.net.KryoClient; -import io.anuke.net.KryoServer; +import io.anuke.mindustry.net.ArcNetClient; +import io.anuke.mindustry.net.ArcNetServer; import org.robovm.apple.foundation.NSAutoreleasePool; import org.robovm.apple.foundation.NSURL; import org.robovm.apple.uikit.*; @@ -27,8 +27,8 @@ public class IOSLauncher extends IOSApplication.Delegate{ @Override protected IOSApplication createApplication(){ - Net.setClientProvider(new KryoClient()); - Net.setServerProvider(new KryoServer()); + Net.setClientProvider(new ArcNetClient()); + Net.setServerProvider(new ArcNetServer()); if(UIDevice.getCurrentDevice().getUserInterfaceIdiom() == UIUserInterfaceIdiom.Pad){ Unit.dp.addition = 0.5f; diff --git a/net/src/io/anuke/net/KryoClient.java b/net/src/io/anuke/mindustry/net/ArcNetClient.java similarity index 88% rename from net/src/io/anuke/net/KryoClient.java rename to net/src/io/anuke/mindustry/net/ArcNetClient.java index 2c24b2e687..3e267b8703 100644 --- a/net/src/io/anuke/net/KryoClient.java +++ b/net/src/io/anuke/mindustry/net/ArcNetClient.java @@ -1,11 +1,10 @@ -package io.anuke.net; +package io.anuke.mindustry.net; -import com.esotericsoftware.kryonet.*; import io.anuke.arc.Core; import io.anuke.arc.collection.Array; import io.anuke.arc.function.Consumer; +import io.anuke.arc.net.*; import io.anuke.arc.util.pooling.Pools; -import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.Net.ClientProvider; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Packets.Connect; @@ -21,24 +20,22 @@ import java.nio.channels.ClosedSelectorException; import static io.anuke.mindustry.Vars.netClient; import static io.anuke.mindustry.Vars.port; -public class KryoClient implements ClientProvider{ +public class ArcNetClient implements ClientProvider{ final Client client; final Array foundAddresses = new Array<>(); final ClientDiscoveryHandler handler; final LZ4FastDecompressor decompressor = LZ4Factory.fastestInstance().fastDecompressor(); Consumer lastCallback; - public KryoClient(){ - KryoCore.init(); - + public ArcNetClient(){ handler = new ClientDiscoveryHandler(){ @Override - public DatagramPacket onRequestNewDatagramPacket(){ + public DatagramPacket newDatagramPacket(){ return new DatagramPacket(new byte[128], 128); } @Override - public void onDiscoveredHost(DatagramPacket datagramPacket){ + public void discoveredHost(DatagramPacket datagramPacket){ ByteBuffer buffer = ByteBuffer.wrap(datagramPacket.getData()); Host host = NetworkIO.readServerData(datagramPacket.getAddress().getHostAddress(), buffer); for(InetAddress address : foundAddresses){ @@ -51,15 +48,15 @@ public class KryoClient implements ClientProvider{ } @Override - public void onFinally(){ + public void finish(){ } }; - client = new Client(8192, 4096, connection -> new ByteSerializer()); + client = new Client(8192, 4096, new PacketSerializer()); client.setDiscoveryHandler(handler); - Listener listener = new Listener(){ + NetListener listener = new NetListener(){ @Override public void connected(Connection connection){ Connect c = new Connect(); @@ -95,11 +92,7 @@ public class KryoClient implements ClientProvider{ } }; - if(KryoCore.fakeLag){ - client.addListener(new Listener.LagListener(KryoCore.fakeLagMin, KryoCore.fakeLagMax, listener)); - }else{ - client.addListener(listener); - } + client.addListener(listener); } private static boolean isLocal(InetAddress addr){ @@ -133,7 +126,7 @@ public class KryoClient implements ClientProvider{ }catch(Exception e){ if(!(e instanceof ClosedSelectorException)) handleException(e); } - }, "Kryonet Client"); + }, "Net Client"); updateThread.setDaemon(true); updateThread.start(); @@ -188,7 +181,7 @@ public class KryoClient implements ClientProvider{ lastCallback = valid; - DatagramPacket packet = handler.onRequestNewDatagramPacket(); + DatagramPacket packet = handler.newDatagramPacket(); socket.receive(packet); @@ -231,7 +224,7 @@ public class KryoClient implements ClientProvider{ } private void handleException(Exception e){ - if(e instanceof KryoNetException){ + if(e instanceof ArcNetException){ Core.app.post(() -> Net.showError(new IOException("mismatch"))); }else{ Core.app.post(() -> Net.showError(e)); diff --git a/net/src/io/anuke/net/KryoServer.java b/net/src/io/anuke/mindustry/net/ArcNetServer.java similarity index 92% rename from net/src/io/anuke/net/KryoServer.java rename to net/src/io/anuke/mindustry/net/ArcNetServer.java index 5304913a6d..d54feaeee4 100644 --- a/net/src/io/anuke/net/KryoServer.java +++ b/net/src/io/anuke/mindustry/net/ArcNetServer.java @@ -1,15 +1,12 @@ -package io.anuke.net; +package io.anuke.mindustry.net; import com.dosse.upnp.UPnP; -import com.esotericsoftware.kryonet.*; -import com.esotericsoftware.kryonet.Listener.LagListener; -import com.esotericsoftware.kryonet.util.InputStreamSender; import io.anuke.arc.Core; import io.anuke.arc.collection.Array; +import io.anuke.arc.net.*; import io.anuke.arc.util.Log; import io.anuke.arc.util.Time; import io.anuke.mindustry.Vars; -import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Net.ServerProvider; import io.anuke.mindustry.net.Packets.*; @@ -22,7 +19,7 @@ import java.nio.channels.ClosedSelectorException; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; -public class KryoServer implements ServerProvider{ +public class ArcNetServer implements ServerProvider{ final Server server; final CopyOnWriteArrayList connections = new CopyOnWriteArrayList<>(); final CopyOnWriteArraySet missing = new CopyOnWriteArraySet<>(); @@ -32,18 +29,15 @@ public class KryoServer implements ServerProvider{ int lastconnection = 0; - public KryoServer(){ - KryoCore.init(); - - server = new Server(4096 * 2, 4096, connection -> new ByteSerializer()); + public ArcNetServer(){ + server = new Server(4096 * 2, 4096, new PacketSerializer()); server.setDiscoveryHandler((datagramChannel, fromAddress) -> { ByteBuffer buffer = NetworkIO.writeServerData(); buffer.position(0); datagramChannel.send(buffer, fromAddress); - return true; }); - Listener listener = new Listener(){ + NetListener listener = new NetListener(){ @Override public void connected(Connection connection){ @@ -92,11 +86,7 @@ public class KryoServer implements ServerProvider{ } }; - if(KryoCore.fakeLag){ - server.addListener(new LagListener(KryoCore.fakeLagMin, KryoCore.fakeLagMax, listener)); - }else{ - server.addListener(listener); - } + server.addListener(listener); } @Override @@ -150,7 +140,7 @@ public class KryoServer implements ServerProvider{ }catch(Throwable e){ if(!(e instanceof ClosedSelectorException)) handleException(e); } - }, "Kryonet Server"); + }, "Net Server"); serverThread.setDaemon(true); serverThread.start(); } diff --git a/net/src/io/anuke/net/FrameworkSerializer.java b/net/src/io/anuke/mindustry/net/FrameworkSerializer.java similarity index 87% rename from net/src/io/anuke/net/FrameworkSerializer.java rename to net/src/io/anuke/mindustry/net/FrameworkSerializer.java index 9e7b472e37..beebe568f0 100644 --- a/net/src/io/anuke/net/FrameworkSerializer.java +++ b/net/src/io/anuke/mindustry/net/FrameworkSerializer.java @@ -1,7 +1,7 @@ -package io.anuke.net; +package io.anuke.mindustry.net; -import com.esotericsoftware.kryonet.FrameworkMessage; -import com.esotericsoftware.kryonet.FrameworkMessage.*; +import io.anuke.arc.net.FrameworkMessage; +import io.anuke.arc.net.FrameworkMessage.*; import java.nio.ByteBuffer; @@ -15,12 +15,8 @@ public class FrameworkSerializer{ buffer.putInt(p.id); buffer.put(p.isReply ? 1 : (byte)0); }else if(message instanceof DiscoverHost){ - DiscoverHost p = (DiscoverHost)message; - buffer.put((byte)1); }else if(message instanceof KeepAlive){ - KeepAlive p = (KeepAlive)message; - buffer.put((byte)2); }else if(message instanceof RegisterUDP){ RegisterUDP p = (RegisterUDP)message; diff --git a/net/src/io/anuke/net/ByteSerializer.java b/net/src/io/anuke/mindustry/net/PacketSerializer.java similarity index 68% rename from net/src/io/anuke/net/ByteSerializer.java rename to net/src/io/anuke/mindustry/net/PacketSerializer.java index 4d01745afe..9466daa3d7 100644 --- a/net/src/io/anuke/net/ByteSerializer.java +++ b/net/src/io/anuke/mindustry/net/PacketSerializer.java @@ -1,16 +1,14 @@ -package io.anuke.net; +package io.anuke.mindustry.net; -import com.esotericsoftware.kryonet.FrameworkMessage; -import com.esotericsoftware.kryonet.serialization.Serialization; +import io.anuke.arc.net.FrameworkMessage; +import io.anuke.arc.net.NetSerializer; import io.anuke.arc.function.Supplier; import io.anuke.arc.util.pooling.Pools; -import io.anuke.mindustry.net.Packet; -import io.anuke.mindustry.net.Registrator; import java.nio.ByteBuffer; @SuppressWarnings("unchecked") -public class ByteSerializer implements Serialization{ +public class PacketSerializer implements NetSerializer{ @Override public void write(ByteBuffer byteBuffer, Object o){ @@ -39,19 +37,4 @@ public class ByteSerializer implements Serialization{ return packet; } } - - @Override - public int getLengthLength(){ - return 2; - } - - @Override - public void writeLength(ByteBuffer byteBuffer, int i){ - byteBuffer.putShort((short)i); - } - - @Override - public int readLength(ByteBuffer byteBuffer){ - return byteBuffer.getShort(); - } } diff --git a/net/src/io/anuke/net/KryoCore.java b/net/src/io/anuke/net/KryoCore.java deleted file mode 100644 index 3e4be3ab3f..0000000000 --- a/net/src/io/anuke/net/KryoCore.java +++ /dev/null @@ -1,66 +0,0 @@ -package io.anuke.net; - -import com.esotericsoftware.kryonet.util.Log; -import com.esotericsoftware.kryonet.util.Log.Logger; -import io.anuke.arc.util.ColorCodes; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.concurrent.ScheduledExecutorService; - -import static io.anuke.mindustry.Vars.headless; - -/** Utilities and configs for kryo module. */ -public class KryoCore{ - public static boolean fakeLag = false; - public static final int fakeLagMax = 500; - public static final int fakeLagMin = 0; - public static final float fakeLagDrop = 0.1f; - public static final float fakeLagDuplicate = 0.1f; - - public static boolean lastUDP; - - private static ScheduledExecutorService threadPool; - - public static void init(){ - Log.set(fakeLag ? Log.LEVEL_DEBUG : Log.LEVEL_WARN); - - Log.setLogger(new Logger(){ - public void log(int level, String category, String message, Throwable ex){ - if(fakeLag){ - if(message.contains("UDP")){ - lastUDP = true; - }else if(message.contains("TCP")){ - lastUDP = false; - } - return; - } - - StringBuilder builder = new StringBuilder(256); - - if(headless) - builder.append(ColorCodes.BLUE); - - builder.append("Net Error: "); - - builder.append(message); - - if(ex != null){ - StringWriter writer = new StringWriter(256); - ex.printStackTrace(new PrintWriter(writer)); - builder.append('\n'); - builder.append(writer.toString().trim()); - } - - if(headless) - builder.append(ColorCodes.RESET); - - io.anuke.arc.util.Log.info("&b" + builder.toString()); - } - }); - } - - private static int calculateLag(){ - return fakeLagMin + (int)(Math.random() * (fakeLagMax - fakeLagMin)); - } -} diff --git a/server/src/io/anuke/mindustry/server/ServerLauncher.java b/server/src/io/anuke/mindustry/server/ServerLauncher.java index 63f6e0797e..818545e9ce 100644 --- a/server/src/io/anuke/mindustry/server/ServerLauncher.java +++ b/server/src/io/anuke/mindustry/server/ServerLauncher.java @@ -5,8 +5,8 @@ import io.anuke.arc.ApplicationListener; import io.anuke.arc.backends.headless.HeadlessApplication; import io.anuke.arc.backends.headless.HeadlessApplicationConfiguration; import io.anuke.mindustry.net.Net; -import io.anuke.net.KryoClient; -import io.anuke.net.KryoServer; +import io.anuke.mindustry.net.ArcNetClient; +import io.anuke.mindustry.net.ArcNetServer; public class ServerLauncher extends HeadlessApplication{ @@ -17,8 +17,8 @@ public class ServerLauncher extends HeadlessApplication{ public static void main(String[] args){ try{ - Net.setClientProvider(new KryoClient()); - Net.setServerProvider(new KryoServer()); + Net.setClientProvider(new ArcNetClient()); + Net.setServerProvider(new ArcNetServer()); HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration(); new ServerLauncher(new MindustryServer(args), config); diff --git a/settings.gradle b/settings.gradle index dd3c19e139..384df3c359 100644 --- a/settings.gradle +++ b/settings.gradle @@ -26,7 +26,7 @@ if(!hasProperty("release")){ use(':Arc:extensions', '../Arc/extensions') use(':Arc:extensions:freetype', '../Arc/extensions/freetype') use(':Arc:extensions:recorder', '../Arc/extensions/recorder') - //use(':Arc:extensions:postprocessing', '../Arc/extensions/postprocessing') + use(':Arc:extensions:arcnet', '../Arc/extensions/arcnet') use(':Arc:backends', '../Arc/backends') use(':Arc:backends:backend-lwjgl3', '../Arc/backends/backend-lwjgl3') use(':Arc:backends:backend-android', '../Arc/backends/backend-android')