Fixed port bug, possible random disconnect fix

This commit is contained in:
Anuken
2018-03-15 12:53:47 -04:00
parent 95db857fb5
commit ae89a004a6
6 changed files with 47 additions and 43 deletions

View File

@ -70,6 +70,7 @@ text.joingame.byip=Join by IP...
text.joingame.title=Join Game text.joingame.title=Join Game
text.joingame.ip=IP: text.joingame.ip=IP:
text.disconnect=Disconnected. text.disconnect=Disconnected.
text.disconnect.data=Failed to load world data!
text.connecting=[accent]Connecting... text.connecting=[accent]Connecting...
text.connecting.data=[accent]Loading world data... text.connecting.data=[accent]Loading world data...
text.connectfail=[crimson]Failed to connect to server: [orange]{0} text.connectfail=[crimson]Failed to connect to server: [orange]{0}

View File

@ -1,5 +1,5 @@
#Autogenerated file. Do not modify. #Autogenerated file. Do not modify.
#Thu Mar 15 12:29:06 EDT 2018 #Thu Mar 15 12:52:13 EDT 2018
version=release version=release
androidBuildCode=388 androidBuildCode=388
name=Mindustry name=Mindustry

View File

@ -40,10 +40,10 @@ public class NetClient extends Module {
private Timer timer = new Timer(5); private Timer timer = new Timer(5);
private boolean connecting = false; private boolean connecting = false;
private boolean gotData = false;
private boolean kicked = false; private boolean kicked = false;
private IntSet recieved = new IntSet(); private IntSet recieved = new IntSet();
private IntMap<Entity> recent = new IntMap<>(); private IntMap<Entity> recent = new IntMap<>();
private float timeoutTime = 0f; //data timeout counter
public NetClient(){ public NetClient(){
@ -53,8 +53,8 @@ public class NetClient extends Module {
Net.setClientLoaded(false); Net.setClientLoaded(false);
recieved.clear(); recieved.clear();
recent.clear(); recent.clear();
timeoutTime = 0f;
connecting = true; connecting = true;
gotData = false;
kicked = false; kicked = false;
ui.chatfrag.clearMessages(); ui.chatfrag.clearMessages();
@ -77,14 +77,6 @@ public class NetClient extends Module {
} }
Net.send(c, SendMode.tcp); Net.send(c, SendMode.tcp);
Timers.runTask(dataTimeout, () -> {
if (!gotData) {
Log.err("Failed to load data!");
ui.loadfrag.hide();
Net.disconnect();
}
});
}); });
Net.handleClient(Disconnect.class, packet -> { Net.handleClient(Disconnect.class, packet -> {
@ -105,8 +97,6 @@ public class NetClient extends Module {
NetworkIO.loadWorld(data.stream); NetworkIO.loadWorld(data.stream);
player.set(world.getSpawnX(), world.getSpawnY()); player.set(world.getSpawnX(), world.getSpawnY());
gotData = true;
finishConnecting(); finishConnecting();
}); });
@ -123,7 +113,7 @@ public class NetClient extends Module {
}); });
Net.handleClient(SyncPacket.class, packet -> { Net.handleClient(SyncPacket.class, packet -> {
if (!gotData) return; if (connecting) return;
int players = 0; int players = 0;
int enemies = 0; int enemies = 0;
@ -180,9 +170,8 @@ public class NetClient extends Module {
} }
}); });
Net.handleClient(BreakPacket.class, (packet) -> { Net.handleClient(BreakPacket.class, (packet) ->
Placement.breakBlock(packet.x, packet.y, true, Timers.get("breakblocksound", 10)); Placement.breakBlock(packet.x, packet.y, true, Timers.get("breakblocksound", 10)));
});
Net.handleClient(EntitySpawnPacket.class, packet -> { Net.handleClient(EntitySpawnPacket.class, packet -> {
EntityGroup group = packet.group; EntityGroup group = packet.group;
@ -246,7 +235,7 @@ public class NetClient extends Module {
kicked = true; kicked = true;
Net.disconnect(); Net.disconnect();
state.set(State.menu); state.set(State.menu);
ui.showError("$text.server.kicked." + packet.reason.name()); if(!packet.reason.quiet) ui.showError("$text.server.kicked." + packet.reason.name());
ui.loadfrag.hide(); ui.loadfrag.hide();
}); });
@ -316,16 +305,22 @@ public class NetClient extends Module {
if(!Net.client()) return; if(!Net.client()) return;
if(!state.is(State.menu)){ if(!state.is(State.menu)){
if(gotData) sync(); if(!connecting) sync();
}else if(!connecting){ }else if(!connecting){
Net.disconnect(); Net.disconnect();
}else{ //...must be connecting
timeoutTime += Timers.delta();
if(timeoutTime > dataTimeout){
Log.err("Failed to load data!");
ui.loadfrag.hide();
kicked = true;
ui.showError("$text.disconnect.data");
Net.disconnect();
timeoutTime = 0f;
}
} }
} }
public boolean hasData(){
return gotData;
}
public boolean isConnecting(){ public boolean isConnecting(){
return connecting; return connecting;
} }

View File

@ -377,7 +377,14 @@ public class Packets {
} }
public enum KickReason{ public enum KickReason{
kick, invalidPassword, clientOutdated, serverOutdated, banned kick, invalidPassword, clientOutdated, serverOutdated, banned, gameover(true);
public final boolean quiet;
KickReason(){ quiet = false; }
KickReason(boolean quiet){
this.quiet = quiet;
}
} }
public static class UpgradePacket implements Packet{ public static class UpgradePacket implements Packet{

View File

@ -130,8 +130,7 @@ public class DebugFragment implements Fragment {
Net.client() ? Net.client() ?
"chat.open: " + ui.chatfrag.chatOpen() + "\n" + "chat.open: " + ui.chatfrag.chatOpen() + "\n" +
"chat.messages: " + ui.chatfrag.getMessagesSize() + "\n" + "chat.messages: " + ui.chatfrag.getMessagesSize() + "\n" +
"client.connecting: " + netClient.isConnecting() + "\n" + "client.connecting: " + netClient.isConnecting() + "\n" : "",
"client.hasdata: " + netClient.hasData() : "",
"players: " + playerGroup.size(), "players: " + playerGroup.size(),
"enemies: " + enemyGroup.size(), "enemies: " + enemyGroup.size(),
"tiles: " + tileGroup.size(), "tiles: " + tileGroup.size(),

View File

@ -11,6 +11,7 @@ import io.anuke.mindustry.game.GameMode;
import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.io.SaveIO;
import io.anuke.mindustry.io.Version; import io.anuke.mindustry.io.Version;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.net.NetConnection;
import io.anuke.mindustry.net.NetEvents; import io.anuke.mindustry.net.NetEvents;
import io.anuke.mindustry.net.Packets.ChatPacket; import io.anuke.mindustry.net.Packets.ChatPacket;
import io.anuke.mindustry.net.Packets.KickReason; import io.anuke.mindustry.net.Packets.KickReason;
@ -75,25 +76,26 @@ public class ServerControl extends Module {
Events.on(GameOverEvent.class, () -> { Events.on(GameOverEvent.class, () -> {
info("Game over!"); info("Game over!");
Timers.runTask(10f, () -> { for(NetConnection connection : Net.getConnections()){
Net.kickConnection(connection.id, KickReason.gameover);
}
if (mode != ShuffleMode.off) {
Array<Map> maps = mode == ShuffleMode.both ? world.maps().getAllMaps() :
mode == ShuffleMode.normal ? world.maps().getDefaultMaps() : world.maps().getCustomMaps();
Map previous = world.getMap();
Map map = previous;
while (map == previous || !map.visible) map = maps.random();
info("Selected next map to be {0}.", map.name);
state.set(State.playing);
logic.reset();
world.loadMap(map);
}else{
state.set(State.menu); state.set(State.menu);
Net.closeServer(); Net.closeServer();
}
if (mode != ShuffleMode.off) {
Array<Map> maps = mode == ShuffleMode.both ? world.maps().getAllMaps() :
mode == ShuffleMode.normal ? world.maps().getDefaultMaps() : world.maps().getCustomMaps();
Map previous = world.getMap();
Map map = previous;
while (map == previous || !map.visible) map = maps.random();
info("Selected next map to be {0}.", map.name);
state.set(State.playing);
logic.reset();
world.loadMap(map);
host();
}
});
}); });
info("&lcServer loaded. Type &ly'help'&lc for help."); info("&lcServer loaded. Type &ly'help'&lc for help.");