Added basic Kryonet support

This commit is contained in:
Anuken
2017-12-30 11:43:47 -05:00
parent 94f968bdc2
commit f6e9710b33
4 changed files with 70 additions and 17 deletions

View File

@@ -11,35 +11,50 @@ import io.anuke.ucore.function.Consumer;
public class Net{
private static boolean server;
private static boolean active;
private static ObjectMap<Class<?>, Consumer<?>> listeners = new ObjectMap<>();
private static NetProvider provider;
private static ObjectMap<Class<?>, Consumer> listeners = new ObjectMap<>();
private static ClientProvider clientProvider;
private static ServerProvider serverProvider;
/**Connect to an address.*/
public static void connect(String ip, String port) throws IOException{
provider.connect(ip, port);
clientProvider.connect(ip, port);
}
/**Host a server at an address*/
public static void host(String port) throws IOException{
serverProvider.host(port);
}
/**Send an object to all connected clients.*/
/**Send an object to all connected clients, or to the server if this is a client.*/
public static void send(Object object){
provider.send(object);
if(server){
serverProvider.send(object);
}else {
clientProvider.send(object);
}
}
/**Sets the net provider, e.g. what handles sending, recieving and connecting.*/
public static void setProvider(NetProvider provider){
Net.provider = provider;
/**Sets the net clientProvider, e.g. what handles sending, recieving and connecting to a server.*/
public static void setClientProvider(ClientProvider provider){
Net.clientProvider = provider;
}
/**Sets the net serverProvider, e.g. what handles hosting a server.*/
public static void setServerProvider(ServerProvider provider){
Net.serverProvider = provider;
}
/**Registers a listener for when an object is recieved.*/
/**Registers a client listener for when an object is recieved.*/
public static <T> void handle(Class<T> type, Consumer<T> listener){
listeners.put(type, listener);
}
/**Call to handle a packet being recieved.*/
/**Call to handle a packet being recieved (for the client).*/
public static void handleNetReceived(Object object){
if(listeners.get(object.getClass()) != null){
listeners.get(object.getClass()).accept(object);
}else{
Gdx.app.error("Net", "Unhandled packet type: '" + object.getClass() + "'!");
Gdx.app.error("Mindustry::Net", "Unhandled packet type: '" + object.getClass() + "'!");
}
}
@@ -52,9 +67,20 @@ public class Net{
public static boolean server(){
return server;
}
public static void registerClasses(Class<?>... classes){
clientProvider.register(classes);
}
public static interface NetProvider{
public static interface ClientProvider {
public void connect(String ip, String port) throws IOException;
public void send(Object object);
public void register(Class<?>... types);
}
public static interface ServerProvider {
public void host(String port) throws IOException;
public void send(Object object);
public void register(Class<?>... types);
}
}