Refactoring of functional package

This commit is contained in:
Anuken
2019-10-29 15:57:25 -04:00
parent f0fa643930
commit 0722ad2f4c
86 changed files with 456 additions and 396 deletions
@@ -2,7 +2,7 @@ package io.anuke.mindustry.net;
import io.anuke.arc.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.function.*;
import io.anuke.arc.func.*;
import io.anuke.arc.net.*;
import io.anuke.arc.net.FrameworkMessage.*;
import io.anuke.arc.util.*;
@@ -21,7 +21,7 @@ import static io.anuke.mindustry.Vars.*;
public class ArcNetImpl implements NetProvider{
final Client client;
final Supplier<DatagramPacket> packetSupplier = () -> new DatagramPacket(new byte[256], 256);
final Prov<DatagramPacket> packetSupplier = () -> new DatagramPacket(new byte[256], 256);
final Server server;
final CopyOnWriteArrayList<ArcConnection> connections = new CopyOnWriteArrayList<>();
@@ -183,7 +183,7 @@ public class ArcNetImpl implements NetProvider{
}
@Override
public void pingHost(String address, int port, Consumer<Host> valid, Consumer<Exception> invalid){
public void pingHost(String address, int port, Cons<Host> valid, Cons<Exception> invalid){
Threads.daemon(() -> {
try{
DatagramSocket socket = new DatagramSocket();
@@ -196,15 +196,15 @@ public class ArcNetImpl implements NetProvider{
ByteBuffer buffer = ByteBuffer.wrap(packet.getData());
Host host = NetworkIO.readServerData(packet.getAddress().getHostAddress(), buffer);
Core.app.post(() -> valid.accept(host));
Core.app.post(() -> valid.get(host));
}catch(Exception e){
Core.app.post(() -> invalid.accept(e));
Core.app.post(() -> invalid.get(e));
}
});
}
@Override
public void discoverServers(Consumer<Host> callback, Runnable done){
public void discoverServers(Cons<Host> callback, Runnable done){
Array<InetAddress> foundAddresses = new Array<>();
client.discoverHosts(port, multicastGroup, multicastPort, 3000, packet -> {
Core.app.post(() -> {
@@ -214,7 +214,7 @@ public class ArcNetImpl implements NetProvider{
}
ByteBuffer buffer = ByteBuffer.wrap(packet.getData());
Host host = NetworkIO.readServerData(packet.getAddress().getHostAddress(), buffer);
callback.accept(host);
callback.get(host);
foundAddresses.add(packet.getAddress());
}catch(Exception e){
//don't crash when there's an error pinging a a server or parsing data
@@ -369,7 +369,7 @@ public class ArcNetImpl implements NetProvider{
if(id == -2){
return readFramework(byteBuffer);
}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, (Prov<Packet>)Registrator.getByID(id).constructor);
packet.read(byteBuffer);
return packet;
}
@@ -4,6 +4,7 @@ import io.anuke.arc.*;
import io.anuke.arc.Net.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.files.*;
import io.anuke.arc.func.*;
import io.anuke.arc.function.*;
import io.anuke.arc.util.*;
import io.anuke.arc.util.io.*;
@@ -21,7 +22,7 @@ import static io.anuke.mindustry.Vars.net;
public class CrashSender{
public static void send(Throwable exception, Consumer<File> writeListener){
public static void send(Throwable exception, Cons<File> writeListener){
try{
exception.printStackTrace();
@@ -54,7 +55,7 @@ public class CrashSender{
File file = new File(OS.getAppDataDirectoryString(Vars.appName), "crashes/crash-report-" + new SimpleDateFormat("MM_dd_yyyy_HH_mm_ss").format(new Date()) + ".txt");
new FileHandle(OS.getAppDataDirectoryString(Vars.appName)).child("crashes").mkdirs();
new FileHandle(file).writeString(parseException(exception));
writeListener.accept(file);
writeListener.get(file);
}catch(Throwable e){
e.printStackTrace();
Log.err("Failed to save local crash report.");
@@ -130,7 +131,7 @@ public class CrashSender{
}
}
private static void httpPost(String url, String content, Consumer<HttpResponse> success, Consumer<Throwable> failure){
private static void httpPost(String url, String content, Cons<HttpResponse> success, Cons<Throwable> failure){
new NetJavaImpl().http(new HttpRequest().method(HttpMethod.POST).content(content).url(url), success, failure);
}
+12 -11
View File
@@ -2,6 +2,7 @@ package io.anuke.mindustry.net;
import io.anuke.arc.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.func.*;
import io.anuke.arc.function.*;
import io.anuke.arc.util.*;
import io.anuke.arc.util.ArcAnnotate.*;
@@ -25,8 +26,8 @@ public class Net{
StreamBuilder currentStream;
private final Array<Object> packetQueue = new Array<>();
private final ObjectMap<Class<?>, Consumer> clientListeners = new ObjectMap<>();
private final ObjectMap<Class<?>, BiConsumer<NetConnection, Object>> serverListeners = new ObjectMap<>();
private final ObjectMap<Class<?>, Cons> clientListeners = new ObjectMap<>();
private final ObjectMap<Class<?>, Cons2<NetConnection, Object>> serverListeners = new ObjectMap<>();
private final IntMap<StreamBuilder> streams = new IntMap<>();
private final NetProvider provider;
@@ -170,7 +171,7 @@ public class Net{
* Starts discovering servers on a different thread.
* Callback is run on the main libGDX thread.
*/
public void discoverServers(Consumer<Host> cons, Runnable done){
public void discoverServers(Cons<Host> cons, Runnable done){
provider.discoverServers(cons, done);
}
@@ -208,15 +209,15 @@ public class Net{
/**
* Registers a client listener for when an object is recieved.
*/
public <T> void handleClient(Class<T> type, Consumer<T> listener){
public <T> void handleClient(Class<T> type, Cons<T> listener){
clientListeners.put(type, listener);
}
/**
* Registers a server listener for when an object is recieved.
*/
public <T> void handleServer(Class<T> type, BiConsumer<NetConnection, T> listener){
serverListeners.put(type, (BiConsumer<NetConnection, Object>)listener);
public <T> void handleServer(Class<T> type, Cons2<NetConnection, T> listener){
serverListeners.put(type, (Cons2<NetConnection, Object>)listener);
}
/**
@@ -244,7 +245,7 @@ public class Net{
if(clientLoaded || ((object instanceof Packet) && ((Packet)object).isImportant())){
if(clientListeners.get(object.getClass()) != null)
clientListeners.get(object.getClass()).accept(object);
clientListeners.get(object.getClass()).get(object);
Pools.free(object);
}else if(!((object instanceof Packet) && ((Packet)object).isUnimportant())){
packetQueue.add(object);
@@ -263,7 +264,7 @@ public class Net{
if(serverListeners.get(object.getClass()) != null){
if(serverListeners.get(object.getClass()) != null)
serverListeners.get(object.getClass()).accept(connection, object);
serverListeners.get(object.getClass()).get(connection, object);
Pools.free(object);
}else{
Log.err("Unhandled packet type: '{0}'!", object.getClass());
@@ -273,7 +274,7 @@ public class Net{
/**
* Pings a host in an new thread. If an error occured, failed() should be called with the exception.
*/
public void pingHost(String address, int port, Consumer<Host> valid, Consumer<Exception> failed){
public void pingHost(String address, int port, Cons<Host> valid, Cons<Exception> failed){
provider.pingHost(address, port, valid, failed);
}
@@ -324,10 +325,10 @@ public class Net{
* Callback should be run on the main thread.
* @param done is the callback that should run after discovery.
*/
void discoverServers(Consumer<Host> callback, Runnable done);
void discoverServers(Cons<Host> callback, Runnable done);
/** Ping a host. If an error occured, failed() should be called with the exception. */
void pingHost(String address, int port, Consumer<Host> valid, Consumer<Exception> failed);
void pingHost(String address, int port, Cons<Host> valid, Cons<Exception> failed);
/** Host a server at specified port. */
void hostServer(int port) throws IOException;
@@ -1,7 +1,7 @@
package io.anuke.mindustry.net;
import io.anuke.arc.collection.ObjectIntMap;
import io.anuke.arc.function.Supplier;
import io.anuke.arc.func.Prov;
import io.anuke.mindustry.net.Packets.*;
public class Registrator{
@@ -35,9 +35,9 @@ public class Registrator{
public static class ClassEntry{
public final Class<?> type;
public final Supplier<?> constructor;
public final Prov<?> constructor;
public <T extends Packet> ClassEntry(Class<T> type, Supplier<T> constructor){
public <T extends Packet> ClassEntry(Class<T> type, Prov<T> constructor){
this.type = type;
this.constructor = constructor;
}