forked from KNEMC/KLALB
UI改进
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
package org.kne.cloud.network.klalb;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Type;
|
||||
import java.nio.channels.MulticastChannel;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.kne.cloud.network.DefaultMinecraftSocketBridgeFactory;
|
||||
import org.kne.cloud.network.DefaultSocketBridgeFactory;
|
||||
import org.kne.cloud.network.HostPortMap;
|
||||
import org.kne.cloud.network.MultipurposeSocketAddress;
|
||||
import org.kne.cloud.network.Proxy;
|
||||
import org.kne.cloud.network.SocketBridgeFactory;
|
||||
import org.kne.cloud.network.SocketToSocketProxy;
|
||||
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
public class SocketBridgeConfigItem extends KLALBConfigItem {
|
||||
private MultipurposeSocketAddress Listen;
|
||||
|
||||
private LinkedHashMap<String, String>Bridge=new LinkedHashMap<>();
|
||||
private HostPortMap Connect=new HostPortMap();
|
||||
|
||||
public SocketBridgeConfigItem( MultipurposeSocketAddress listen,
|
||||
LinkedHashMap<String, String> bridge, HostPortMap connect) {
|
||||
super("SocketBridge");
|
||||
Listen = listen;
|
||||
Bridge = bridge;
|
||||
Connect = connect;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SocketBridgeConfigItem [Listen=" + Listen + ", Bridge=" + Bridge + ", Connect=" + Connect + "]";
|
||||
}
|
||||
|
||||
|
||||
/*public static JsonDeserializer<SocketBridgeConfigItem> getSocketBridgeConfigItemJsonDeserializer(){
|
||||
return new JsonDeserializer<SocketBridgeConfigItem>() {
|
||||
|
||||
@Override
|
||||
public SocketBridgeConfigItem deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2)
|
||||
throws JsonParseException {
|
||||
if(arg0.isJsonObject()) {
|
||||
HostPortMap mapp=new HostPortMap();
|
||||
LinkedHashMap<String, SocketBridgeFactory>mapb=new LinkedHashMap<>();
|
||||
MultipurposeSocketAddress l=new MultipurposeSocketAddress(((JsonObject) arg0).get("Listen").getAsString());
|
||||
SocketBridgeFactory bdg=getDefaultBridgeFactory(((JsonObject)arg0).get("Bridge"),mapb);
|
||||
MultipurposeSocketAddress r=getDefaultConnect(((JsonObject)arg0).get("Connect"),mapp);
|
||||
return new SocketBridgeConfigItem(l,mapb,mapp);
|
||||
}else {
|
||||
throw new JsonParseException("not a object:"+arg0);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
public static JsonSerializer<SocketBridgeConfigItem> getSocketBridgeConfigItemJsonSerializer(){
|
||||
return new JsonSerializer<SocketBridgeConfigItem>() {
|
||||
|
||||
@Override
|
||||
public JsonElement serialize(SocketBridgeConfigItem arg0, Type arg1, JsonSerializationContext arg2) {
|
||||
return null;
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
public static void registerToGsonBuilder(GsonBuilder gsonBuilder) {
|
||||
gsonBuilder.registerTypeAdapter(SocketBridgeConfigItem.class, getSocketBridgeConfigItemJsonDeserializer());
|
||||
gsonBuilder.registerTypeAdapter(SocketBridgeConfigItem.class, getSocketBridgeConfigItemJsonSerializer());
|
||||
}*/
|
||||
public Proxy createProxy(KLALBController controller) throws IOException {
|
||||
HostPortMap mapp=new HostPortMap();
|
||||
LinkedHashMap<String, SocketBridgeFactory>mapb=new LinkedHashMap<>();
|
||||
MultipurposeSocketAddress l=Listen;
|
||||
SocketBridgeFactory bdg=getDefaultBridgeFactory(Bridge,mapb,controller);
|
||||
MultipurposeSocketAddress r=getDefaultConnect(Connect,mapp);
|
||||
return new SocketToSocketProxy(l ,new MultipurposeSocketAddress("0.0.0.0:0"), r,mapp,bdg,mapb);
|
||||
}
|
||||
private MultipurposeSocketAddress getDefaultConnect(HostPortMap connect2, LinkedHashMap<String, MultipurposeSocketAddress> mapp) {
|
||||
connect2.entrySet().forEach((en)->{
|
||||
mapp.put(en.getKey(), en.getValue());
|
||||
});
|
||||
return mapp.get("DEFAULT");
|
||||
}
|
||||
private SocketBridgeFactory getDefaultBridgeFactory(LinkedHashMap<String, String> bridge2, LinkedHashMap<String, SocketBridgeFactory> mapp, KLALBController controller) {
|
||||
bridge2.entrySet().forEach((en)->{
|
||||
mapp.put(en.getKey(), getFactoryByJobj(en.getValue(), controller));
|
||||
});
|
||||
return mapp.get("DEFAULT");
|
||||
}private SocketBridgeFactory getFactoryByJobj(String string,KLALBController controller) {
|
||||
if(string.startsWith("SocketBridge")) {
|
||||
return new DefaultSocketBridgeFactory();
|
||||
}else if(string.startsWith("MinecraftSocketBridge")) {
|
||||
return new DefaultMinecraftSocketBridgeFactory(controller.getSelf().getAddress(), Integer.parseInt(string.substring(21)));
|
||||
}
|
||||
throw new IllegalArgumentException("unknown SocketBridge type:"+string);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user