feat(bungee): communication between servers

This commit is contained in:
aro 2022-12-06 14:43:47 +01:00
parent 573463d7f3
commit d31831c5ee
3 changed files with 17 additions and 10 deletions

View file

@ -2,20 +2,25 @@ package net.artelnatif.nicko.bungee.event;
import net.artelnatif.nicko.bungee.NickoBungee; import net.artelnatif.nicko.bungee.NickoBungee;
import net.artelnatif.nicko.bungee.pluginchannel.PluginMessageUtils; import net.artelnatif.nicko.bungee.pluginchannel.PluginMessageUtils;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server; import net.md_5.bungee.api.connection.Server;
import net.md_5.bungee.api.event.ServerSwitchEvent; import net.md_5.bungee.api.event.ServerSwitchEvent;
import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventHandler;
import java.util.ArrayList;
public class ServerSwitchListener implements Listener { public class ServerSwitchListener implements Listener {
@EventHandler @EventHandler
public void onSwitch(ServerSwitchEvent event) { public void onSwitch(ServerSwitchEvent event) {
final ServerInfo from = event.getFrom();
final ProxiedPlayer player = event.getPlayer(); final ProxiedPlayer player = event.getPlayer();
final Server to = player.getServer(); final Server server = player.getServer();
System.out.println("NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE = " + NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE); System.out.println("NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE = " + NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE);
PluginMessageUtils.sendMessage(from, NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE, player.getUniqueId().toString());
final ArrayList<String> payload = new ArrayList<>();
payload.add(player.getUniqueId().toString());
payload.add("otherdata");
PluginMessageUtils.sendMessage(server.getInfo(), NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE, payload);
} }
} }

View file

@ -4,16 +4,17 @@ import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
import java.util.ArrayList;
public class PluginMessageUtils { public class PluginMessageUtils {
public static void sendMessage(final ServerInfo info, final String channel, final String... data) { public static void sendMessage(final ServerInfo info, final String channel, final ArrayList<String> payload) {
if (info == null) { return; } if (info == null) { return; }
final ByteArrayDataOutput output = ByteStreams.newDataOutput(); final ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF(channel); output.writeInt(payload.size());
for (String elt : data) { for (String elt : payload) {
output.writeUTF(elt); output.writeUTF(elt);
} }
System.out.printf("(%s) PluginMessage <-> %s", info.getSocketAddress().toString(), output);
info.sendData(channel, output.toByteArray(), true); info.sendData(channel, output.toByteArray(), true);
} }
} }

View file

@ -9,7 +9,7 @@ import org.bukkit.plugin.messaging.PluginMessageListener;
import java.util.ArrayList; import java.util.ArrayList;
public class UpdateMessageHandler implements PluginMessageListener { public class PluginMessageHandler implements PluginMessageListener {
@Override @Override
public void onPluginMessageReceived(String channel, Player player, byte[] message) { public void onPluginMessageReceived(String channel, Player player, byte[] message) {
if (!channel.equals(NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE)) { if (!channel.equals(NickoBungee.NICKO_PLUGIN_CHANNEL_UPDATE)) {
@ -21,7 +21,8 @@ public class UpdateMessageHandler implements PluginMessageListener {
final int payloadSize = in.readInt(); final int payloadSize = in.readInt();
if (payloadSize == 0 || payloadSize > 4) { if (payloadSize == 0 || payloadSize > 4) {
NickoBukkit.getInstance().getLogger().severe("Prevented error by skipping malformed payload of size " + payloadSize + "."); NickoBukkit.getInstance().getLogger().severe("Prevented error by skipping malformed payload of size " + payloadSize + "!" +
"This should not have happened, open an issue on the repository at https://atnrch.xyz/git/aro/Nicko !");
return; return;
} }