Remove cache-update bungee messages, always use the player in the context to send bungee messages, minor codestyle changes

This commit is contained in:
Gabriele C
2022-08-18 01:48:34 +02:00
parent fd0a0a1155
commit 7c8bbe6294
16 changed files with 112 additions and 186 deletions
@@ -1,6 +1,5 @@
package fr.xephi.authme.service;
import com.google.common.collect.Iterables;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.initialization.SettingsDependent;
import fr.xephi.authme.settings.Settings;
@@ -299,15 +298,13 @@ public class BukkitService implements SettingsDependent {
}
/**
* Send the specified message to bungeecord using the first available player connection.
* Send the specified bytes to bungeecord using the specified player connection.
*
* @param player the player
* @param bytes the message
*/
public void sendBungeeMessage(byte[] bytes) {
Player player = Iterables.getFirst(getOnlinePlayers(), null);
if (player != null) {
player.sendPluginMessage(authMe, "BungeeCord", bytes);
}
public void sendBungeeMessage(Player player, byte[] bytes) {
player.sendPluginMessage(authMe, "BungeeCord", bytes);
}
/**
@@ -5,7 +5,6 @@ import com.google.common.io.ByteStreams;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.data.ProxySessionManager;
import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.initialization.SettingsDependent;
import fr.xephi.authme.output.ConsoleLoggerFactory;
import fr.xephi.authme.process.Management;
@@ -27,29 +26,27 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent
private final BukkitService bukkitService;
private final ProxySessionManager proxySessionManager;
private final Management management;
private final DataSource dataSource;
private boolean isEnabled;
@Inject
BungeeReceiver(AuthMe plugin, BukkitService bukkitService, ProxySessionManager proxySessionManager,
Management management, DataSource dataSource, Settings settings) {
Management management, Settings settings) {
this.plugin = plugin;
this.bukkitService = bukkitService;
this.proxySessionManager = proxySessionManager;
this.management = management;
this.dataSource = dataSource;
reload(settings);
}
@Override
public void reload(final Settings settings) {
public void reload(Settings settings) {
this.isEnabled = settings.getProperty(HooksSettings.BUNGEECORD);
if (this.isEnabled) {
this.isEnabled = bukkitService.isBungeeCordConfiguredForSpigot().orElse(false);
}
if (this.isEnabled) {
final Messenger messenger = plugin.getServer().getMessenger();
Messenger messenger = plugin.getServer().getMessenger();
if (!messenger.isIncomingChannelRegistered(plugin, "BungeeCord")) {
messenger.registerIncomingPluginChannel(plugin, "BungeeCord", this);
}
@@ -61,23 +58,23 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent
*
* @param in the input to handle
*/
private void handleBroadcast(final ByteArrayDataInput in) {
private void handleBroadcast(ByteArrayDataInput in) {
// Read data byte array
final short dataLength = in.readShort();
final byte[] dataBytes = new byte[dataLength];
short dataLength = in.readShort();
byte[] dataBytes = new byte[dataLength];
in.readFully(dataBytes);
final ByteArrayDataInput dataIn = ByteStreams.newDataInput(dataBytes);
ByteArrayDataInput dataIn = ByteStreams.newDataInput(dataBytes);
// Parse type
final String typeId = dataIn.readUTF();
final Optional<MessageType> type = MessageType.fromId(typeId);
String typeId = dataIn.readUTF();
Optional<MessageType> type = MessageType.fromId(typeId);
if (!type.isPresent()) {
logger.debug("Received unsupported forwarded bungeecord message type! ({0})", typeId);
return;
}
// Parse argument
final String argument;
String argument;
try {
argument = dataIn.readUTF();
} catch (IllegalStateException e) {
@@ -88,14 +85,9 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent
// Handle type
switch (type.get()) {
case UNREGISTER:
dataSource.invalidateCache(argument);
break;
case REFRESH_PASSWORD:
case REFRESH_QUITLOC:
case REFRESH_EMAIL:
case REFRESH:
dataSource.refreshCache(argument);
case LOGIN:
case LOGOUT:
// TODO: unused
break;
default:
}
@@ -108,15 +100,15 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent
*/
private void handle(ByteArrayDataInput in) {
// Parse type
final String typeId = in.readUTF();
final Optional<MessageType> type = MessageType.fromId(typeId);
String typeId = in.readUTF();
Optional<MessageType> type = MessageType.fromId(typeId);
if (!type.isPresent()) {
logger.debug("Received unsupported bungeecord message type! ({0})", typeId);
return;
}
// Parse argument
final String argument;
String argument;
try {
argument = in.readUTF();
} catch (IllegalStateException e) {
@@ -135,15 +127,15 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent
}
@Override
public void onPluginMessageReceived(final String channel, final Player player, final byte[] data) {
public void onPluginMessageReceived(String channel, Player player, byte[] data) {
if (!isEnabled) {
return;
}
final ByteArrayDataInput in = ByteStreams.newDataInput(data);
ByteArrayDataInput in = ByteStreams.newDataInput(data);
// Check subchannel
final String subChannel = in.readUTF();
String subChannel = in.readUTF();
if ("AuthMe.v2.Broadcast".equals(subChannel)) {
handleBroadcast(in);
} else if ("AuthMe.v2".equals(subChannel)) {
@@ -151,7 +143,7 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent
}
}
private void performLogin(final String name) {
private void performLogin(String name) {
Player player = bukkitService.getPlayerExact(name);
if (player != null && player.isOnline()) {
management.forceLogin(player, true);
@@ -4,7 +4,6 @@ import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.initialization.SettingsDependent;
import fr.xephi.authme.output.ConsoleLoggerFactory;
import fr.xephi.authme.service.BukkitService;
@@ -20,7 +19,6 @@ public class BungeeSender implements SettingsDependent {
private final ConsoleLogger logger = ConsoleLoggerFactory.get(BungeeSender.class);
private final AuthMe plugin;
private final BukkitService bukkitService;
private final DataSource dataSource;
private boolean isEnabled;
private String destinationServerOnLogin;
@@ -29,21 +27,19 @@ public class BungeeSender implements SettingsDependent {
* Constructor.
*/
@Inject
BungeeSender(final AuthMe plugin, final BukkitService bukkitService, final DataSource dataSource,
final Settings settings) {
BungeeSender(AuthMe plugin, BukkitService bukkitService, Settings settings) {
this.plugin = plugin;
this.bukkitService = bukkitService;
this.dataSource = dataSource;
reload(settings);
}
@Override
public void reload(final Settings settings) {
public void reload(Settings settings) {
this.isEnabled = settings.getProperty(HooksSettings.BUNGEECORD);
this.destinationServerOnLogin = settings.getProperty(HooksSettings.BUNGEECORD_SERVER);
if (this.isEnabled) {
final Messenger messenger = plugin.getServer().getMessenger();
Messenger messenger = plugin.getServer().getMessenger();
if (!messenger.isOutgoingChannelRegistered(plugin, "BungeeCord")) {
messenger.registerOutgoingPluginChannel(plugin, "BungeeCord");
}
@@ -54,27 +50,27 @@ public class BungeeSender implements SettingsDependent {
return isEnabled;
}
private void sendBungeecordMessage(final String... data) {
final ByteArrayDataOutput out = ByteStreams.newDataOutput();
for (final String element : data) {
private void sendBungeecordMessage(Player player, String... data) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
for (String element : data) {
out.writeUTF(element);
}
bukkitService.sendBungeeMessage(out.toByteArray());
bukkitService.sendBungeeMessage(player, out.toByteArray());
}
private void sendForwardedBungeecordMessage(final String subChannel, final String... data) {
final ByteArrayDataOutput out = ByteStreams.newDataOutput();
private void sendForwardedBungeecordMessage(Player player, String subChannel, String... data) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("Forward");
out.writeUTF("ONLINE");
out.writeUTF(subChannel);
final ByteArrayDataOutput dataOut = ByteStreams.newDataOutput();
for (final String element : data) {
ByteArrayDataOutput dataOut = ByteStreams.newDataOutput();
for (String element : data) {
dataOut.writeUTF(element);
}
final byte[] dataBytes = dataOut.toByteArray();
byte[] dataBytes = dataOut.toByteArray();
out.writeShort(dataBytes.length);
out.write(dataBytes);
bukkitService.sendBungeeMessage(out.toByteArray());
bukkitService.sendBungeeMessage(player, out.toByteArray());
}
/**
@@ -83,33 +79,32 @@ public class BungeeSender implements SettingsDependent {
*
* @param player The player to send.
*/
public void connectPlayerOnLogin(final Player player) {
if (isEnabled && !destinationServerOnLogin.isEmpty()) {
bukkitService.scheduleSyncDelayedTask(() ->
sendBungeecordMessage("ConnectOther", player.getName(), destinationServerOnLogin), 5L);
public void connectPlayerOnLogin(Player player) {
if (!isEnabled || destinationServerOnLogin.isEmpty()) {
return;
}
bukkitService.scheduleSyncDelayedTask(() ->
sendBungeecordMessage(player, "Connect", destinationServerOnLogin), 5L);
}
/**
* Sends a message to the AuthMe plugin messaging channel, if enabled.
*
* @param player The player related to the message
* @param type The message type, See {@link MessageType}
* @param playerName the player related to the message
*/
public void sendAuthMeBungeecordMessage(final MessageType type, final String playerName) {
if (isEnabled) {
if (!plugin.isEnabled()) {
logger.debug("Tried to send a " + type + " bungeecord message but the plugin was disabled!");
return;
}
if (type.isRequiresCaching() && !dataSource.isCached()) {
return;
}
if (type.isBroadcast()) {
sendForwardedBungeecordMessage("AuthMe.v2.Broadcast", type.getId(), playerName.toLowerCase());
} else {
sendBungeecordMessage("AuthMe.v2", type.getId(), playerName.toLowerCase());
}
public void sendAuthMeBungeecordMessage(Player player, MessageType type) {
if (!isEnabled) {
return;
}
if (!plugin.isEnabled()) {
logger.debug("Tried to send a " + type + " bungeecord message but the plugin was disabled!");
return;
}
if (type.isBroadcast()) {
sendForwardedBungeecordMessage(player, "AuthMe.v2.Broadcast", type.getId(), player.getName().toLowerCase());
} else {
sendBungeecordMessage(player, "AuthMe.v2", type.getId(), player.getName().toLowerCase());
}
}
@@ -3,29 +3,16 @@ package fr.xephi.authme.service.bungeecord;
import java.util.Optional;
public enum MessageType {
REFRESH_PASSWORD("refresh.password", true, true),
REFRESH_SESSION("refresh.session", true, true),
REFRESH_QUITLOC("refresh.quitloc", true, true),
REFRESH_EMAIL("refresh.email", true, true),
REFRESH("refresh", true, true),
REGISTER("register", true),
UNREGISTER("unregister", true),
LOGIN("login", true),
LOGOUT("logout", true),
PERFORM_LOGIN("perform.login", false);
private final String id;
private final boolean broadcast;
private final boolean requiresCaching;
MessageType(final String id, final boolean broadcast, final boolean requiresCaching) {
MessageType(String id, boolean broadcast) {
this.id = id;
this.broadcast = broadcast;
this.requiresCaching = requiresCaching;
}
MessageType(final String id, final boolean broadcast) {
this(id, broadcast, false);
}
public String getId() {
@@ -36,10 +23,6 @@ public enum MessageType {
return broadcast;
}
public boolean isRequiresCaching() {
return requiresCaching;
}
/**
* Returns the MessageType with the given ID.
*
@@ -47,8 +30,8 @@ public enum MessageType {
*
* @return the MessageType with the given id, empty if invalid.
*/
public static Optional<MessageType> fromId(final String id) {
for (final MessageType current : values()) {
public static Optional<MessageType> fromId(String id) {
for (MessageType current : values()) {
if (current.getId().equals(id)) {
return Optional.of(current);
}