diff options
author | Keuin <[email protected]> | 2021-12-17 23:55:44 +0800 |
---|---|---|
committer | Keuin <[email protected]> | 2021-12-17 23:55:44 +0800 |
commit | 12ddbba66e6f2585e59d05d1782c0e8ce9fe6146 (patch) | |
tree | 0d98ee95c01c8509160658080523e351357d4a9b /src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java | |
parent | 7fc64f506ea7ebc68fcb0a9e98351deed7c1d212 (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.java | 57 |
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()); + } +} |