mirror of
https://github.com/GeyserMC/GeyserConnect.git
synced 2025-06-26 14:15:22 +02:00
Fix sessions still being held by Geyser when they are TransferPacket'ed to a bedrock server
This commit is contained in:
parent
2d6117ac8c
commit
c35bd6d56a
2 changed files with 13 additions and 12 deletions
|
@ -68,10 +68,10 @@ public class PacketHandler extends UpstreamPacketHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisconnect(String reason) {
|
public void onDisconnect(String reason) {
|
||||||
if (session.getAuthData() != null) {
|
// The user has disconnected without having connected to an actual server. If they have connected to
|
||||||
geyserConnect.logger().info(Utils.displayName(session) + " has disconnected (" + reason + ")");
|
// a server (transfer packet or geyser proxy), then the original packet handler has been restored.
|
||||||
ServerManager.unloadServers(session);
|
ServerManager.unloadServers(session);
|
||||||
}
|
originalPacketHandler.onDisconnect(reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -155,12 +155,12 @@ public class PacketHandler extends UpstreamPacketHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PacketSignal handle(ResourcePackClientResponsePacket packet) {
|
public PacketSignal handle(ResourcePackClientResponsePacket packet) {
|
||||||
return originalPacketHandler.handle(packet);
|
return originalPacketHandler.handle(packet); // relies on state in the original handler
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PacketSignal handle(ResourcePackChunkRequestPacket packet) {
|
public PacketSignal handle(ResourcePackChunkRequestPacket packet) {
|
||||||
return originalPacketHandler.handle(packet);
|
return originalPacketHandler.handle(packet); // relies on state in the original handler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,6 +84,13 @@ public class Utils {
|
||||||
GeyserConnect.instance().logger().info("Sending " + Utils.displayName(session) + " to " + server.title());
|
GeyserConnect.instance().logger().info("Sending " + Utils.displayName(session) + " to " + server.title());
|
||||||
GeyserConnect.instance().logger().debug(server.toString());
|
GeyserConnect.instance().logger().debug(server.toString());
|
||||||
|
|
||||||
|
// Save the player's servers since we are changing packet handlers
|
||||||
|
// (and they are going to disconnect if it is a bedrock server)
|
||||||
|
ServerManager.unloadServers(session);
|
||||||
|
|
||||||
|
// Restore the original packet handler
|
||||||
|
session.getUpstream().getSession().setPacketHandler(originalPacketHandler);
|
||||||
|
|
||||||
if (server.bedrock()) {
|
if (server.bedrock()) {
|
||||||
// Send them to the bedrock server
|
// Send them to the bedrock server
|
||||||
TransferPacket transferPacket = new TransferPacket();
|
TransferPacket transferPacket = new TransferPacket();
|
||||||
|
@ -91,12 +98,6 @@ public class Utils {
|
||||||
transferPacket.setPort(server.port());
|
transferPacket.setPort(server.port());
|
||||||
session.sendUpstreamPacket(transferPacket);
|
session.sendUpstreamPacket(transferPacket);
|
||||||
} else {
|
} else {
|
||||||
// Save the players servers since we are changing packet handlers
|
|
||||||
ServerManager.unloadServers(session);
|
|
||||||
|
|
||||||
// Restore the original packet handler
|
|
||||||
session.getUpstream().getSession().setPacketHandler(originalPacketHandler);
|
|
||||||
|
|
||||||
// Set the remote server and un-initialize the session
|
// Set the remote server and un-initialize the session
|
||||||
session.remoteServer(server);
|
session.remoteServer(server);
|
||||||
session.getUpstream().setInitialized(false);
|
session.getUpstream().setInitialized(false);
|
||||||
|
|
Loading…
Add table
Reference in a new issue