From 7b41d65fa6d3ad5364b986dbabab085455f77627 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 23 Aug 2019 16:13:46 -0400 Subject: [PATCH] Fixed issues with multithreaded serializer access --- .../src/io/anuke/mindustry/desktop/DesktopPlatform.java | 1 - net/src/io/anuke/mindustry/net/MClient.java | 9 ++++++--- net/src/io/anuke/mindustry/net/MServer.java | 7 ++++++- net/src/io/anuke/mindustry/net/PacketSerializer.java | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java index 6692ec6486..6ae3809a12 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java @@ -73,7 +73,6 @@ public class DesktopPlatform extends Platform{ @Override public void updateRPC(){ if(!useDiscord) return; - Log.info("Updating discord RPC status."); DiscordRichPresence presence = new DiscordRichPresence(); diff --git a/net/src/io/anuke/mindustry/net/MClient.java b/net/src/io/anuke/mindustry/net/MClient.java index a7517f666f..b9aca40e87 100644 --- a/net/src/io/anuke/mindustry/net/MClient.java +++ b/net/src/io/anuke/mindustry/net/MClient.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.net; import io.anuke.arc.*; import io.anuke.arc.function.*; import io.anuke.arc.util.async.*; +import io.anuke.arc.util.pooling.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.net.Net.*; import io.anuke.mindustry.net.Packets.*; @@ -23,7 +24,7 @@ public class MClient implements ClientProvider, ApplicationListener{ } public void connect(String ip, int port, Runnable success) throws IOException{ - socket = new MSocket(InetAddress.getByName(ip), port, new PacketSerializer()); + socket = new MSocket(InetAddress.getByName(ip), port, PacketSerializer::new); socket.addDcListener((sock, reason) -> Core.app.post(() -> Net.handleClientReceived(new Disconnect()))); socket.connectAsync(null, 2000, response -> { if(response.getType() == ResponseType.ACCEPTED){ @@ -43,14 +44,14 @@ public class MClient implements ClientProvider, ApplicationListener{ public void update(){ if(socket == null) return; - socket.update((sock, object) -> Core.app.post(() -> { + socket.update((sock, object) -> { try{ Net.handleClientReceived(object); }catch(Exception e){ Net.showError(e); netClient.disconnectQuietly(); } - })); + }); } @Override @@ -69,6 +70,8 @@ public class MClient implements ClientProvider, ApplicationListener{ }else{ socket.sendUnreliable(object); } + + Pools.free(object); } public int getPing(){ diff --git a/net/src/io/anuke/mindustry/net/MServer.java b/net/src/io/anuke/mindustry/net/MServer.java index ca7b4461ec..80c21cd285 100644 --- a/net/src/io/anuke/mindustry/net/MServer.java +++ b/net/src/io/anuke/mindustry/net/MServer.java @@ -39,6 +39,8 @@ public class MServer implements ServerProvider, ApplicationListener{ @Override public void host(int port) throws IOException{ + close(); + socket = new MServerSocket(port, con -> { MSocket sock = con.accept(null); @@ -78,7 +80,10 @@ public class MServer implements ServerProvider, ApplicationListener{ @Override public void close(){ - if(socket != null) socket.close(); + if(socket != null){ + socket.close(); + socket = null; + } } @Override diff --git a/net/src/io/anuke/mindustry/net/PacketSerializer.java b/net/src/io/anuke/mindustry/net/PacketSerializer.java index b0e19c1b25..ad3c8f6e27 100644 --- a/net/src/io/anuke/mindustry/net/PacketSerializer.java +++ b/net/src/io/anuke/mindustry/net/PacketSerializer.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.net; -import io.anuke.arc.function.Supplier; +import io.anuke.arc.function.*; import io.anuke.arc.net.*; import io.anuke.arc.net.FrameworkMessage.*; import io.anuke.arc.util.pooling.*;