Fixed issues with multithreaded serializer access
This commit is contained in:
@@ -73,7 +73,6 @@ public class DesktopPlatform extends Platform{
|
|||||||
@Override
|
@Override
|
||||||
public void updateRPC(){
|
public void updateRPC(){
|
||||||
if(!useDiscord) return;
|
if(!useDiscord) return;
|
||||||
Log.info("Updating discord RPC status.");
|
|
||||||
|
|
||||||
DiscordRichPresence presence = new DiscordRichPresence();
|
DiscordRichPresence presence = new DiscordRichPresence();
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package io.anuke.mindustry.net;
|
|||||||
import io.anuke.arc.*;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.function.*;
|
import io.anuke.arc.function.*;
|
||||||
import io.anuke.arc.util.async.*;
|
import io.anuke.arc.util.async.*;
|
||||||
|
import io.anuke.arc.util.pooling.*;
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.net.Net.*;
|
import io.anuke.mindustry.net.Net.*;
|
||||||
import io.anuke.mindustry.net.Packets.*;
|
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{
|
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.addDcListener((sock, reason) -> Core.app.post(() -> Net.handleClientReceived(new Disconnect())));
|
||||||
socket.connectAsync(null, 2000, response -> {
|
socket.connectAsync(null, 2000, response -> {
|
||||||
if(response.getType() == ResponseType.ACCEPTED){
|
if(response.getType() == ResponseType.ACCEPTED){
|
||||||
@@ -43,14 +44,14 @@ public class MClient implements ClientProvider, ApplicationListener{
|
|||||||
public void update(){
|
public void update(){
|
||||||
if(socket == null) return;
|
if(socket == null) return;
|
||||||
|
|
||||||
socket.update((sock, object) -> Core.app.post(() -> {
|
socket.update((sock, object) -> {
|
||||||
try{
|
try{
|
||||||
Net.handleClientReceived(object);
|
Net.handleClientReceived(object);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
Net.showError(e);
|
Net.showError(e);
|
||||||
netClient.disconnectQuietly();
|
netClient.disconnectQuietly();
|
||||||
}
|
}
|
||||||
}));
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -69,6 +70,8 @@ public class MClient implements ClientProvider, ApplicationListener{
|
|||||||
}else{
|
}else{
|
||||||
socket.sendUnreliable(object);
|
socket.sendUnreliable(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Pools.free(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPing(){
|
public int getPing(){
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ public class MServer implements ServerProvider, ApplicationListener{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void host(int port) throws IOException{
|
public void host(int port) throws IOException{
|
||||||
|
close();
|
||||||
|
|
||||||
socket = new MServerSocket(port, con -> {
|
socket = new MServerSocket(port, con -> {
|
||||||
MSocket sock = con.accept(null);
|
MSocket sock = con.accept(null);
|
||||||
|
|
||||||
@@ -78,7 +80,10 @@ public class MServer implements ServerProvider, ApplicationListener{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close(){
|
public void close(){
|
||||||
if(socket != null) socket.close();
|
if(socket != null){
|
||||||
|
socket.close();
|
||||||
|
socket = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package io.anuke.mindustry.net;
|
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.*;
|
||||||
import io.anuke.arc.net.FrameworkMessage.*;
|
import io.anuke.arc.net.FrameworkMessage.*;
|
||||||
import io.anuke.arc.util.pooling.*;
|
import io.anuke.arc.util.pooling.*;
|
||||||
|
|||||||
Reference in New Issue
Block a user