Now detects when server switch is possible
This commit is contained in:
parent
621ad9222b
commit
8a00f85993
|
|
@ -12,6 +12,7 @@ import com.velocitypowered.api.proxy.server.RegisteredServer;
|
|||
|
||||
import org.adde0109.ambassador.Forge.ForgeConnection;
|
||||
import org.adde0109.ambassador.Forge.ForgeHandshakeHandler;
|
||||
import org.adde0109.ambassador.Forge.ForgeServerConnection;
|
||||
import org.checkerframework.checker.index.qual.PolyUpperBound;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
|
|
@ -52,11 +53,31 @@ public class Ambassador {
|
|||
|
||||
@Subscribe
|
||||
public void onServerPreConnectEvent(ServerPreConnectEvent event, Continuation continuation) {
|
||||
ForgeConnection forgeConnection = forgeHandshakeHandler.getForgeConnection(event.getPlayer());
|
||||
if (forgeConnection != null) {
|
||||
|
||||
Optional<ForgeConnection> forgeConnection = forgeHandshakeHandler.getForgeConnection(event.getPlayer());
|
||||
Optional<ForgeServerConnection> forgeServerConnectionOptional = forgeHandshakeHandler.getForgeServerConnection(event.getOriginalServer());
|
||||
if (forgeConnection.isPresent()) {
|
||||
ForgeServerConnection forgeServerConnection;
|
||||
if (forgeServerConnectionOptional.isEmpty()) {
|
||||
forgeServerConnection = new ForgeServerConnection(event.getOriginalServer(), logger);
|
||||
} else {
|
||||
forgeServerConnection = forgeServerConnectionOptional.get();
|
||||
}
|
||||
forgeServerConnection.getHandshake().whenComplete((msg, ex) -> {
|
||||
if (ex != null) {
|
||||
continuation.resume();
|
||||
} else {
|
||||
if (Arrays.equals(msg.modListPacket,forgeConnection.get().getTransmittedHandshake().modListPacket)) {
|
||||
continuation.resume();
|
||||
} else {
|
||||
event.setResult(ServerPreConnectEvent.ServerResult.denied());
|
||||
logger.warn("Resync needed");
|
||||
continuation.resume();
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
continuation.resume();
|
||||
}
|
||||
continuation.resume();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ public class ForgeConnection {
|
|||
future.complete(null);
|
||||
}
|
||||
});
|
||||
forgeConnection.transmittedHandshake = msg;
|
||||
}
|
||||
//Write
|
||||
continuation.resume();
|
||||
|
|
@ -73,4 +74,8 @@ public class ForgeConnection {
|
|||
return connection;
|
||||
}
|
||||
|
||||
public ForgeHandshakeUtils.CachedServerHandshake getTransmittedHandshake() {
|
||||
return transmittedHandshake;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import com.velocitypowered.api.proxy.server.RegisteredServer;
|
|||
import java.net.InetSocketAddress;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import org.adde0109.ambassador.AmbassadorConfig;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
|
|
@ -20,9 +21,9 @@ public class ForgeHandshakeHandler {
|
|||
private final ProxyServer server;
|
||||
private final Logger logger;
|
||||
|
||||
public Map<RegisteredServer, ForgeServerConnection>
|
||||
private Map<RegisteredServer, ForgeServerConnection>
|
||||
forgeServerConnectionMap = new HashMap<RegisteredServer,ForgeServerConnection>();
|
||||
public Map<InetSocketAddress,ForgeConnection> incomingForgeConnections = new HashMap<InetSocketAddress,ForgeConnection>();
|
||||
private Map<InetSocketAddress,ForgeConnection> incomingForgeConnections = new HashMap<InetSocketAddress,ForgeConnection>();
|
||||
|
||||
|
||||
public ForgeHandshakeHandler(AmbassadorConfig config, ProxyServer server, Logger logger) {
|
||||
|
|
@ -65,13 +66,17 @@ public class ForgeHandshakeHandler {
|
|||
}
|
||||
}
|
||||
|
||||
public ForgeConnection getForgeConnection(Player player) {
|
||||
public Optional<ForgeConnection> getForgeConnection(Player player) {
|
||||
return getForgeConnection(player.getRemoteAddress());
|
||||
}
|
||||
|
||||
private ForgeConnection getForgeConnection(InetSocketAddress socketAddress) {
|
||||
private Optional<ForgeConnection> getForgeConnection(InetSocketAddress socketAddress) {
|
||||
incomingForgeConnections.values().removeIf((c) -> !c.getConnection().isActive());
|
||||
return incomingForgeConnections.get(socketAddress);
|
||||
return Optional.ofNullable(incomingForgeConnections.get(socketAddress));
|
||||
}
|
||||
|
||||
public Optional<ForgeServerConnection> getForgeServerConnection(RegisteredServer registeredServer) {
|
||||
return Optional.ofNullable(forgeServerConnectionMap.get(registeredServer));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user