summaryrefslogtreecommitdiff
path: root/src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java
diff options
context:
space:
mode:
authorKeuin <[email protected]>2021-12-17 23:55:44 +0800
committerKeuin <[email protected]>2021-12-17 23:55:44 +0800
commit12ddbba66e6f2585e59d05d1782c0e8ce9fe6146 (patch)
tree0d98ee95c01c8509160658080523e351357d4a9b /src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java
parent7fc64f506ea7ebc68fcb0a9e98351deed7c1d212 (diff)
Use the latest Velocity API.
Implement API server for online players and server status. Implement core message routing abstraction and concrete BungeeCross, Velocity, Telegram endpoint impl. Load config from config file "crosslink/config.json". Test core components. Proxy API related stuff are not tested. Add README in English and Chinese. TODO: Add config hot reloading. More configurable system. PSMB endpoint impl.
Diffstat (limited to 'src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java')
-rw-r--r--src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java b/src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java
new file mode 100644
index 0000000..957927e
--- /dev/null
+++ b/src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java
@@ -0,0 +1,57 @@
+package com.keuin.crosslink.plugin.bungee;
+
+import com.google.inject.Inject;
+import com.keuin.crosslink.config.GlobalConfigManager;
+import com.keuin.crosslink.data.PlayerInfo;
+import com.keuin.crosslink.data.ServerInfo;
+import com.keuin.crosslink.messaging.endpoint.IEndpoint;
+import com.keuin.crosslink.messaging.endpoint.local.BungeeServerChatEndpoint;
+import com.keuin.crosslink.plugin.bungee.checker.BungeeServerStatusChecker;
+import com.keuin.crosslink.plugin.common.ICoreAccessor;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+public class BungeeAccessor implements ICoreAccessor {
+
+ private final BungeeMainWrapper plugin;
+
+ @Inject
+ public BungeeAccessor(BungeeMainWrapper plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public List<PlayerInfo> getOnlinePlayers() {
+ var players = plugin.getProxy().getPlayers();
+ return players.stream().map(PlayerInfo::fromBungeePlayer).toList();
+ }
+
+ @Override
+ public List<PlayerInfo> getOnlinePlayers(String serverName) {
+ Objects.requireNonNull(serverName);
+ return getOnlinePlayers().stream().filter((player) -> serverName.equals(player.serverName())).toList();
+ }
+
+ @Override
+ public void getServerInfo(Consumer<List<ServerInfo>> callback) {
+ var checker = new BungeeServerStatusChecker(
+ plugin.getProxy().getServers().values(),
+ plugin,
+ GlobalConfigManager.getInstance().getConfig().pingTimeoutMillis()
+ );
+ checker.ping((infoMap) -> callback.accept(infoMap.entrySet().stream().map(
+ (ent) -> new ServerInfo(ent.getKey().getName(), ent.getValue())
+ ).toList()));
+ }
+
+ @Override
+ public Set<IEndpoint> getServerEndpoints() {
+ return plugin.getProxy().getServers().values().stream()
+ .map((si) -> new BungeeServerChatEndpoint(si, plugin.getProxy(), plugin))
+ .collect(Collectors.toUnmodifiableSet());
+ }
+}