Net cleanup

This commit is contained in:
Anuken
2019-04-17 23:45:42 -04:00
parent 01e1438382
commit 5035559b08
3 changed files with 53 additions and 69 deletions

View File

@@ -281,12 +281,11 @@ public class ArcNetServer implements ServerProvider{
} }
}catch(Exception e){ }catch(Exception e){
Log.err(e); Log.err(e);
Log.info("Disconnecting invalid client!"); Log.info("Error sending packet. Disconnecting invalid client!");
connection.close(); connection.close();
KryoConnection k = getByKryoID(connection.getID()); KryoConnection k = getByKryoID(connection.getID());
if(k != null) connections.remove(k); if(k != null) connections.remove(k);
Log.info("Connection removed {0}", k);
} }
} }

View File

@@ -1,63 +0,0 @@
package io.anuke.mindustry.net;
import io.anuke.arc.net.FrameworkMessage;
import io.anuke.arc.net.FrameworkMessage.*;
import java.nio.ByteBuffer;
public class FrameworkSerializer{
public static void write(ByteBuffer buffer, FrameworkMessage message){
if(message instanceof Ping){
Ping p = (Ping)message;
buffer.put((byte)0);
buffer.putInt(p.id);
buffer.put(p.isReply ? 1 : (byte)0);
}else if(message instanceof DiscoverHost){
buffer.put((byte)1);
}else if(message instanceof KeepAlive){
buffer.put((byte)2);
}else if(message instanceof RegisterUDP){
RegisterUDP p = (RegisterUDP)message;
buffer.put((byte)3);
buffer.putInt(p.connectionID);
}else if(message instanceof RegisterTCP){
RegisterTCP p = (RegisterTCP)message;
buffer.put((byte)4);
buffer.putInt(p.connectionID);
}
}
public static FrameworkMessage read(ByteBuffer buffer){
byte id = buffer.get();
if(id == 0){
Ping p = new Ping();
p.id = buffer.getInt();
p.isReply = buffer.get() == 1;
return p;
}else if(id == 1){
return new DiscoverHost();
}else if(id == 2){
return new KeepAlive();
}else if(id == 3){
RegisterUDP p = new RegisterUDP();
p.connectionID = buffer.getInt();
return p;
}else if(id == 4){
RegisterTCP p = new RegisterTCP();
p.connectionID = buffer.getInt();
return p;
}else{
throw new RuntimeException("Unknown framework message!");
}
}
}

View File

@@ -1,8 +1,9 @@
package io.anuke.mindustry.net; package io.anuke.mindustry.net;
import io.anuke.arc.net.FrameworkMessage;
import io.anuke.arc.net.NetSerializer;
import io.anuke.arc.function.Supplier; import io.anuke.arc.function.Supplier;
import io.anuke.arc.net.FrameworkMessage;
import io.anuke.arc.net.FrameworkMessage.*;
import io.anuke.arc.net.NetSerializer;
import io.anuke.arc.util.pooling.Pools; import io.anuke.arc.util.pooling.Pools;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -14,7 +15,7 @@ public class PacketSerializer implements NetSerializer{
public void write(ByteBuffer byteBuffer, Object o){ public void write(ByteBuffer byteBuffer, Object o){
if(o instanceof FrameworkMessage){ if(o instanceof FrameworkMessage){
byteBuffer.put((byte)-2); //code for framework message byteBuffer.put((byte)-2); //code for framework message
FrameworkSerializer.write(byteBuffer, (FrameworkMessage)o); writeFramework(byteBuffer, (FrameworkMessage)o);
}else{ }else{
if(!(o instanceof Packet)) if(!(o instanceof Packet))
throw new RuntimeException("All sent objects must implement be Packets! Class: " + o.getClass()); throw new RuntimeException("All sent objects must implement be Packets! Class: " + o.getClass());
@@ -30,11 +31,58 @@ public class PacketSerializer implements NetSerializer{
public Object read(ByteBuffer byteBuffer){ public Object read(ByteBuffer byteBuffer){
byte id = byteBuffer.get(); byte id = byteBuffer.get();
if(id == -2){ if(id == -2){
return FrameworkSerializer.read(byteBuffer); return readFramework(byteBuffer);
}else{ }else{
Packet packet = Pools.obtain((Class<Packet>)Registrator.getByID(id).type, (Supplier<Packet>)Registrator.getByID(id).constructor); Packet packet = Pools.obtain((Class<Packet>)Registrator.getByID(id).type, (Supplier<Packet>)Registrator.getByID(id).constructor);
packet.read(byteBuffer); packet.read(byteBuffer);
return packet; return packet;
} }
} }
public static void writeFramework(ByteBuffer buffer, FrameworkMessage message){
if(message instanceof Ping){
Ping p = (Ping)message;
buffer.put((byte)0);
buffer.putInt(p.id);
buffer.put(p.isReply ? 1 : (byte)0);
}else if(message instanceof DiscoverHost){
buffer.put((byte)1);
}else if(message instanceof KeepAlive){
buffer.put((byte)2);
}else if(message instanceof RegisterUDP){
RegisterUDP p = (RegisterUDP)message;
buffer.put((byte)3);
buffer.putInt(p.connectionID);
}else if(message instanceof RegisterTCP){
RegisterTCP p = (RegisterTCP)message;
buffer.put((byte)4);
buffer.putInt(p.connectionID);
}
}
public static FrameworkMessage readFramework(ByteBuffer buffer){
byte id = buffer.get();
if(id == 0){
Ping p = new Ping();
p.id = buffer.getInt();
p.isReply = buffer.get() == 1;
return p;
}else if(id == 1){
return new DiscoverHost();
}else if(id == 2){
return new KeepAlive();
}else if(id == 3){
RegisterUDP p = new RegisterUDP();
p.connectionID = buffer.getInt();
return p;
}else if(id == 4){
RegisterTCP p = new RegisterTCP();
p.connectionID = buffer.getInt();
return p;
}else{
throw new RuntimeException("Unknown framework message!");
}
}
} }