client/server separation

This commit is contained in:
Anuken
2020-05-03 21:45:46 -04:00
parent bdb1e29c85
commit 834c15a808
4 changed files with 37 additions and 10 deletions

View File

@@ -1,6 +1,7 @@
package mindustry.core;
import arc.*;
import arc.func.*;
import arc.math.*;
import arc.struct.*;
import arc.util.*;
@@ -49,6 +50,8 @@ public class NetClient implements ApplicationListener{
/** Byte stream for reading in snapshots. */
private ReusableByteInStream byteStream = new ReusableByteInStream();
private DataInputStream dataStream = new DataInputStream(byteStream);
/** Packet handlers for custom types of messages. */
private ObjectMap<String, Array<Cons<String>>> customPacketHandlers = new ObjectMap<>();
public NetClient(){
@@ -126,6 +129,28 @@ public class NetClient implements ApplicationListener{
});
}
public void addPacketHandler(String type, Cons<String> handler){
customPacketHandlers.getOr(type, Array::new).add(handler);
}
public Array<Cons<String>> getPacketHandlers(String type){
return customPacketHandlers.getOr(type, Array::new);
}
@Remote(targets = Loc.server, variants = Variant.both)
public static void clientPacketReliable(String type, String contents){
if(netClient.customPacketHandlers.containsKey(type)){
for(Cons<String> c : netClient.customPacketHandlers.get(type)){
c.get(contents);
}
}
}
@Remote(targets = Loc.server, variants = Variant.both, unreliable = true)
public static void clientPacketUnreliable(String type, String contents){
clientPacketReliable(type, contents);
}
//called on all clients
@Remote(targets = Loc.server, variants = Variant.both)
public static void sendMessage(String message, String sender, Playerc playersender){

View File

@@ -74,7 +74,7 @@ public class NetServer implements ApplicationListener{
/** Data stream for writing player sync data to. */
private DataOutputStream dataStream = new DataOutputStream(syncStream);
/** Packet handlers for custom types of messages. */
private ObjectMap<String, Array<Cons<String>>> customPacketHandlers = new ObjectMap<>();
private ObjectMap<String, Array<Cons2<Playerc, String>>> customPacketHandlers = new ObjectMap<>();
public NetServer(){
@@ -474,11 +474,11 @@ public class NetServer implements ApplicationListener{
Log.debug("Packed @ compressed bytes of world data.", stream.size());
}
public void addPacketHandler(String type, Cons<String> handler){
public void addPacketHandler(String type, Cons2<Playerc, String> handler){
customPacketHandlers.getOr(type, Array::new).add(handler);
}
public Array<Cons<String>> getPacketHandlers(String type){
public Array<Cons2<Playerc, String>> getPacketHandlers(String type){
return customPacketHandlers.getOr(type, Array::new);
}
@@ -503,18 +503,18 @@ public class NetServer implements ApplicationListener{
player.con().hasDisconnected = true;
}
@Remote(targets = Loc.both, variants = Variant.both)
public static void packetReliable(String type, String contents){
@Remote(targets = Loc.client)
public static void serverPacketReliable(Playerc player, String type, String contents){
if(netServer.customPacketHandlers.containsKey(type)){
for(Cons<String> c : netServer.customPacketHandlers.get(type)){
c.get(contents);
for(Cons2<Playerc, String> c : netServer.customPacketHandlers.get(type)){
c.get(player, contents);
}
}
}
@Remote(targets = Loc.both, variants = Variant.both, unreliable = true)
public static void packetUnreliable(String type, String contents){
packetReliable(type, contents);
@Remote(targets = Loc.client, unreliable = true)
public static void serverPacketUnreliable(Playerc player, String type, String contents){
serverPacketReliable(player, type, contents);
}
@Remote(targets = Loc.client, unreliable = true)