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="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"

View File

@@ -41,6 +41,7 @@ project(":desktop") {
compile "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
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"
compile "com.badlogicgames.gdx:gdx-ai:$aiVersion"
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{
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);
}
}

View File

@@ -6,19 +6,19 @@ import java.net.URI;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
import com.badlogic.gdx.utils.Array;
import com.esotericsoftware.kryonet.Client;
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.io.PlatformFunction;
import io.anuke.ucore.UCore;
import io.anuke.ucore.scene.ui.TextField;
import io.anuke.ucore.scene.ui.layout.Unit;
public class DesktopLauncher {
@@ -60,6 +60,31 @@ public class DesktopLauncher {
};
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);
}