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

@@ -7,7 +7,7 @@
<uses-permission android:name="com.android.vending.BILLING" /> <uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application <application
android:allowBackup="true" android:allowBackup="true"

View File

@@ -41,6 +41,7 @@ project(":desktop") {
compile "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion" compile "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
compile "com.badlogicgames.gdx:gdx-controllers-lwjgl3:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers-lwjgl3:$gdxVersion"
compile "com.esotericsoftware:kryonet:2.22.0-RC1"
} }
} }
@@ -77,6 +78,7 @@ project(":android") {
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
compile "com.badlogicgames.gdx:gdx-ai:$aiVersion" compile "com.badlogicgames.gdx:gdx-ai:$aiVersion"
compile "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion"
compile "com.esotericsoftware:kryonet:2.22.0-RC1"
} }
} }

View File

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

View File

@@ -6,19 +6,19 @@ import java.net.URI;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import com.esotericsoftware.kryonet.Client;
import io.anuke.mindustry.Mindustry; import io.anuke.mindustry.Mindustry;
import io.anuke.mindustry.Net;
import io.anuke.mindustry.Net.ClientProvider;
import io.anuke.mindustry.Vars; import io.anuke.mindustry.Vars;
import io.anuke.mindustry.io.PlatformFunction; import io.anuke.mindustry.io.PlatformFunction;
import io.anuke.ucore.UCore;
import io.anuke.ucore.scene.ui.TextField; import io.anuke.ucore.scene.ui.TextField;
import io.anuke.ucore.scene.ui.layout.Unit;
public class DesktopLauncher { public class DesktopLauncher {
@@ -61,6 +61,31 @@ public class DesktopLauncher {
Mindustry.args = Array.with(arg); Mindustry.args = Array.with(arg);
Net.setClientProvider(new ClientProvider() {
Client client;
{
client = new Client();
}
@Override
public void connect(String ip, String port) throws IOException {
}
@Override
public void send(Object object) {
}
@Override
public void register(Class<?>... types) {
for(Class<?> c : types){
client.getKryo().register(c);
}
}
});
new Lwjgl3Application(new Mindustry(), config); new Lwjgl3Application(new Mindustry(), config);
} }
} }