diff --git a/README.md b/README.md index 01d9c60..f5058db 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ Dont worry about privacy or security: all data is stored in your browser offline * Command history: Use up/down arrow keys to browse the command history, like in the real console. * Colors supported, for both Windows and Linux hosts. (Colors are represented different in each platform). * Real-time connected players, machine CPU and server RAM usage information. +* Capable of keep connected to more than one server to keep retrieving console log in the background for them. * English, Spanish and Russian (thanks to Stashenko) supported. -* Free and updated regularly. -* And many more! +* Free ,updated regularly, and many more! ![Screenshot](https://i.imgur.com/sN1sYju.png) diff --git a/client/README_AFTER_UPGRADE.txt b/client/README_AFTER_UPGRADE.txt new file mode 100644 index 0000000..ec447d0 --- /dev/null +++ b/client/README_AFTER_UPGRADE.txt @@ -0,0 +1,3 @@ +If you are having issues with client not connecting and throwing random errors after a upgrade, +please force client reload on your browser by pressing Ctrl+F5 to reload the whole page. +This issue happens sometimes due to browsers caching JavaScript code. \ No newline at end of file diff --git a/client/index.html b/client/index.html index 5277c14..d84868f 100644 --- a/client/index.html +++ b/client/index.html @@ -210,7 +210,7 @@ @@ -220,11 +220,11 @@ - - - - - - + + + + + + diff --git a/plugin.yml b/plugin.yml index 8f53e93..67fa3af 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,6 +1,10 @@ name: WebConsole main: com.mesacarlos.webconsole.WebConsole -version: 1.2 +version: 1.3 description: WebSockets-based web console author: Carlos Mesa -commands: \ No newline at end of file +commands: + WebConsole: + description: Shows version and active connections of WebConsole + permission: webconsole.webconsole + usage: /WebConsole \ No newline at end of file diff --git a/pom.xml b/pom.xml index c1dd5ac..74fe514 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 WebConsole WebConsole - 1.2 + 1.3 src diff --git a/src/com/mesacarlos/webconsole/WebConsole.java b/src/com/mesacarlos/webconsole/WebConsole.java index 82bd784..71efa8b 100644 --- a/src/com/mesacarlos/webconsole/WebConsole.java +++ b/src/com/mesacarlos/webconsole/WebConsole.java @@ -17,8 +17,9 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.java.JavaPlugin; import org.java_websocket.server.DefaultSSLWebSocketServerFactory; +import com.mesacarlos.webconsole.minecraft.WebConsoleCommand; import com.mesacarlos.webconsole.util.LogFilter; -import com.mesacarlos.webconsole.websockets.WSServer; +import com.mesacarlos.webconsole.websocket.WSServer; public class WebConsole extends JavaPlugin { FileConfiguration config = this.getConfig(); @@ -31,15 +32,20 @@ public class WebConsole extends JavaPlugin { public void onEnable() { createConfig(); + //Start WebSocket Server try { startWS(); } catch (Exception e) { - Bukkit.getLogger().warning("Error occured while starting WebSockets Server."); + Bukkit.getLogger().warning("Error occured while starting WebSocket Server."); e.printStackTrace(); } - + + //This filter is used to read the whole console. Filter f = new LogFilter(getWSServer()); ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addFilter(f); + + //Register /WebConsole command + getCommand("WebConsole").setExecutor(new WebConsoleCommand(this.getDescription().getVersion())); } @Override diff --git a/src/com/mesacarlos/webconsole/command/PlayersCommand.java b/src/com/mesacarlos/webconsole/command/PlayersCommand.java deleted file mode 100644 index 4d7b9cc..0000000 --- a/src/com/mesacarlos/webconsole/command/PlayersCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mesacarlos.webconsole.command; - -import org.bukkit.Bukkit; -import org.java_websocket.WebSocket; - -import com.mesacarlos.webconsole.json.Players; -import com.mesacarlos.webconsole.websockets.WSServer; - -public class PlayersCommand implements WSCommand{ - - @Override - public void execute(WSServer wsServer, WebSocket conn, String params) { - int connectedPlayers = Bukkit.getOnlinePlayers().size(); - int maxPlayers = Bukkit.getMaxPlayers(); - - wsServer.sendToClient(conn, new Players("Currently " + connectedPlayers + " connected players for a maximum of " + maxPlayers, connectedPlayers, maxPlayers)); - } - -} \ No newline at end of file diff --git a/src/com/mesacarlos/webconsole/minecraft/WebConsoleCommand.java b/src/com/mesacarlos/webconsole/minecraft/WebConsoleCommand.java new file mode 100644 index 0000000..bd5822b --- /dev/null +++ b/src/com/mesacarlos/webconsole/minecraft/WebConsoleCommand.java @@ -0,0 +1,42 @@ +package com.mesacarlos.webconsole.minecraft; + +import java.net.InetSocketAddress; +import java.util.ArrayList; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import com.mesacarlos.webconsole.util.LoginManager; + +public class WebConsoleCommand implements CommandExecutor { + private String version; + + public WebConsoleCommand(String version) { + this.version = version; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + StringBuilder msg = new StringBuilder(); + + msg.append("WebConsole version " + version + ".\n"); + ArrayList connections = LoginManager.getInstance().getLoggedInUsers(); + + if (connections.isEmpty()) { + msg.append("There are no logged in WebConsole connections now."); + } else { + msg.append("Connected to WebConsole from:\n"); + for (int i = 0; i < connections.size(); i++) { + InetSocketAddress connection = connections.get(i); + msg.append(connection.toString()); + if(i+1 < connections.size()) + msg.append("\n"); + } + } + + sender.sendMessage(msg.toString()); + return true; + } + +} \ No newline at end of file diff --git a/src/com/mesacarlos/webconsole/util/LogFilter.java b/src/com/mesacarlos/webconsole/util/LogFilter.java index 09e81db..2230f25 100644 --- a/src/com/mesacarlos/webconsole/util/LogFilter.java +++ b/src/com/mesacarlos/webconsole/util/LogFilter.java @@ -7,7 +7,7 @@ import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.message.Message; -import com.mesacarlos.webconsole.websockets.WSServer; +import com.mesacarlos.webconsole.websocket.WSServer; public class LogFilter implements Filter{ private WSServer wsServer; diff --git a/src/com/mesacarlos/webconsole/util/LoginManager.java b/src/com/mesacarlos/webconsole/util/LoginManager.java index 08c8354..3ff5c84 100644 --- a/src/com/mesacarlos/webconsole/util/LoginManager.java +++ b/src/com/mesacarlos/webconsole/util/LoginManager.java @@ -2,10 +2,9 @@ package com.mesacarlos.webconsole.util; import java.net.InetSocketAddress; import java.util.ArrayList; -import java.util.List; public class LoginManager { - private List loggedInUsers = new ArrayList(); + private ArrayList loggedInUsers = new ArrayList(); private static LoginManager instance; private LoginManager() {} @@ -27,4 +26,8 @@ public class LoginManager { public boolean isLoggedIn(InetSocketAddress address) { return loggedInUsers.contains(address); } + + public ArrayList getLoggedInUsers() { + return loggedInUsers; + } } \ No newline at end of file diff --git a/src/com/mesacarlos/webconsole/websockets/WSServer.java b/src/com/mesacarlos/webconsole/websocket/WSServer.java similarity index 84% rename from src/com/mesacarlos/webconsole/websockets/WSServer.java rename to src/com/mesacarlos/webconsole/websocket/WSServer.java index c276d4c..6cbdf10 100644 --- a/src/com/mesacarlos/webconsole/websockets/WSServer.java +++ b/src/com/mesacarlos/webconsole/websocket/WSServer.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.websockets; +package com.mesacarlos.webconsole.websocket; import java.net.InetSocketAddress; import java.util.Collection; @@ -10,14 +10,14 @@ import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import com.mesacarlos.webconsole.WebConsole; -import com.mesacarlos.webconsole.command.CommandFactory; -import com.mesacarlos.webconsole.command.WSCommand; -import com.mesacarlos.webconsole.json.ConsoleOutput; -import com.mesacarlos.webconsole.json.JSONOutput; -import com.mesacarlos.webconsole.json.LoginRequired; -import com.mesacarlos.webconsole.json.Processed; -import com.mesacarlos.webconsole.json.UnknownCommand; import com.mesacarlos.webconsole.util.LoginManager; +import com.mesacarlos.webconsole.websocket.command.CommandFactory; +import com.mesacarlos.webconsole.websocket.command.WSCommand; +import com.mesacarlos.webconsole.websocket.response.ConsoleOutput; +import com.mesacarlos.webconsole.websocket.response.JSONOutput; +import com.mesacarlos.webconsole.websocket.response.LoginRequired; +import com.mesacarlos.webconsole.websocket.response.Processed; +import com.mesacarlos.webconsole.websocket.response.UnknownCommand; public class WSServer extends WebSocketServer { private HashMap commands = CommandFactory.getCommandsHashMap(); diff --git a/src/com/mesacarlos/webconsole/command/CommandFactory.java b/src/com/mesacarlos/webconsole/websocket/command/CommandFactory.java similarity index 87% rename from src/com/mesacarlos/webconsole/command/CommandFactory.java rename to src/com/mesacarlos/webconsole/websocket/command/CommandFactory.java index 7cfb24d..85c04cc 100644 --- a/src/com/mesacarlos/webconsole/command/CommandFactory.java +++ b/src/com/mesacarlos/webconsole/websocket/command/CommandFactory.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.command; +package com.mesacarlos.webconsole.websocket.command; import java.util.HashMap; diff --git a/src/com/mesacarlos/webconsole/command/CpuUsageCommand.java b/src/com/mesacarlos/webconsole/websocket/command/CpuUsageCommand.java similarity index 86% rename from src/com/mesacarlos/webconsole/command/CpuUsageCommand.java rename to src/com/mesacarlos/webconsole/websocket/command/CpuUsageCommand.java index 80b6f8b..a373531 100644 --- a/src/com/mesacarlos/webconsole/command/CpuUsageCommand.java +++ b/src/com/mesacarlos/webconsole/websocket/command/CpuUsageCommand.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.command; +package com.mesacarlos.webconsole.websocket.command; import java.lang.management.ManagementFactory; @@ -9,8 +9,8 @@ import javax.management.ObjectName; import org.java_websocket.WebSocket; -import com.mesacarlos.webconsole.json.CpuUsage; -import com.mesacarlos.webconsole.websockets.WSServer; +import com.mesacarlos.webconsole.websocket.WSServer; +import com.mesacarlos.webconsole.websocket.response.CpuUsage; public class CpuUsageCommand implements WSCommand { diff --git a/src/com/mesacarlos/webconsole/command/ExecCommand.java b/src/com/mesacarlos/webconsole/websocket/command/ExecCommand.java similarity index 84% rename from src/com/mesacarlos/webconsole/command/ExecCommand.java rename to src/com/mesacarlos/webconsole/websocket/command/ExecCommand.java index a75c514..c993c7a 100644 --- a/src/com/mesacarlos/webconsole/command/ExecCommand.java +++ b/src/com/mesacarlos/webconsole/websocket/command/ExecCommand.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.command; +package com.mesacarlos.webconsole.websocket.command; import java.util.concurrent.ExecutionException; @@ -6,7 +6,7 @@ import org.bukkit.Bukkit; import org.bukkit.command.ConsoleCommandSender; import org.java_websocket.WebSocket; -import com.mesacarlos.webconsole.websockets.WSServer; +import com.mesacarlos.webconsole.websocket.WSServer; public class ExecCommand implements WSCommand { diff --git a/src/com/mesacarlos/webconsole/command/LogInCommand.java b/src/com/mesacarlos/webconsole/websocket/command/LogInCommand.java similarity index 79% rename from src/com/mesacarlos/webconsole/command/LogInCommand.java rename to src/com/mesacarlos/webconsole/websocket/command/LogInCommand.java index 49a38d1..4933a63 100644 --- a/src/com/mesacarlos/webconsole/command/LogInCommand.java +++ b/src/com/mesacarlos/webconsole/websocket/command/LogInCommand.java @@ -1,12 +1,12 @@ -package com.mesacarlos.webconsole.command; +package com.mesacarlos.webconsole.websocket.command; import org.bukkit.Bukkit; import org.java_websocket.WebSocket; -import com.mesacarlos.webconsole.json.LoginRequired; -import com.mesacarlos.webconsole.json.Processed; import com.mesacarlos.webconsole.util.LoginManager; -import com.mesacarlos.webconsole.websockets.WSServer; +import com.mesacarlos.webconsole.websocket.WSServer; +import com.mesacarlos.webconsole.websocket.response.LoginRequired; +import com.mesacarlos.webconsole.websocket.response.Processed; public class LogInCommand implements WSCommand { diff --git a/src/com/mesacarlos/webconsole/websocket/command/PlayersCommand.java b/src/com/mesacarlos/webconsole/websocket/command/PlayersCommand.java new file mode 100644 index 0000000..78d3389 --- /dev/null +++ b/src/com/mesacarlos/webconsole/websocket/command/PlayersCommand.java @@ -0,0 +1,27 @@ +package com.mesacarlos.webconsole.websocket.command; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.java_websocket.WebSocket; + +import com.mesacarlos.webconsole.websocket.WSServer; +import com.mesacarlos.webconsole.websocket.response.Players; + +public class PlayersCommand implements WSCommand{ + + @Override + public void execute(WSServer wsServer, WebSocket conn, String params) { + List connectedPlayersList = new ArrayList(); + for(Player player : Bukkit.getOnlinePlayers()) { + connectedPlayersList.add(player.getName()); + } + int connectedPlayers = Bukkit.getOnlinePlayers().size(); + int maxPlayers = Bukkit.getMaxPlayers(); + + wsServer.sendToClient(conn, new Players("Currently " + connectedPlayers + " connected players for a maximum of " + maxPlayers, connectedPlayers, maxPlayers, connectedPlayersList)); + } + +} \ No newline at end of file diff --git a/src/com/mesacarlos/webconsole/command/RamUsageCommand.java b/src/com/mesacarlos/webconsole/websocket/command/RamUsageCommand.java similarity index 71% rename from src/com/mesacarlos/webconsole/command/RamUsageCommand.java rename to src/com/mesacarlos/webconsole/websocket/command/RamUsageCommand.java index 2010823..1901e3d 100644 --- a/src/com/mesacarlos/webconsole/command/RamUsageCommand.java +++ b/src/com/mesacarlos/webconsole/websocket/command/RamUsageCommand.java @@ -1,9 +1,9 @@ -package com.mesacarlos.webconsole.command; +package com.mesacarlos.webconsole.websocket.command; import org.java_websocket.WebSocket; -import com.mesacarlos.webconsole.json.RamUsage; -import com.mesacarlos.webconsole.websockets.WSServer; +import com.mesacarlos.webconsole.websocket.WSServer; +import com.mesacarlos.webconsole.websocket.response.RamUsage; public class RamUsageCommand implements WSCommand { diff --git a/src/com/mesacarlos/webconsole/command/WSCommand.java b/src/com/mesacarlos/webconsole/websocket/command/WSCommand.java similarity index 54% rename from src/com/mesacarlos/webconsole/command/WSCommand.java rename to src/com/mesacarlos/webconsole/websocket/command/WSCommand.java index 4f4103d..f30bb6a 100644 --- a/src/com/mesacarlos/webconsole/command/WSCommand.java +++ b/src/com/mesacarlos/webconsole/websocket/command/WSCommand.java @@ -1,8 +1,8 @@ -package com.mesacarlos.webconsole.command; +package com.mesacarlos.webconsole.websocket.command; import org.java_websocket.WebSocket; -import com.mesacarlos.webconsole.websockets.WSServer; +import com.mesacarlos.webconsole.websocket.WSServer; public interface WSCommand { void execute(WSServer wsServer, WebSocket conn, String params); diff --git a/src/com/mesacarlos/webconsole/json/ConsoleOutput.java b/src/com/mesacarlos/webconsole/websocket/response/ConsoleOutput.java similarity index 87% rename from src/com/mesacarlos/webconsole/json/ConsoleOutput.java rename to src/com/mesacarlos/webconsole/websocket/response/ConsoleOutput.java index c668a5f..00234f6 100644 --- a/src/com/mesacarlos/webconsole/json/ConsoleOutput.java +++ b/src/com/mesacarlos/webconsole/websocket/response/ConsoleOutput.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.json; +package com.mesacarlos.webconsole.websocket.response; import com.google.gson.JsonObject; diff --git a/src/com/mesacarlos/webconsole/json/CpuUsage.java b/src/com/mesacarlos/webconsole/websocket/response/CpuUsage.java similarity index 89% rename from src/com/mesacarlos/webconsole/json/CpuUsage.java rename to src/com/mesacarlos/webconsole/websocket/response/CpuUsage.java index 858e33b..c8dd565 100644 --- a/src/com/mesacarlos/webconsole/json/CpuUsage.java +++ b/src/com/mesacarlos/webconsole/websocket/response/CpuUsage.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.json; +package com.mesacarlos.webconsole.websocket.response; import com.google.gson.JsonObject; diff --git a/src/com/mesacarlos/webconsole/json/JSONOutput.java b/src/com/mesacarlos/webconsole/websocket/response/JSONOutput.java similarity index 85% rename from src/com/mesacarlos/webconsole/json/JSONOutput.java rename to src/com/mesacarlos/webconsole/websocket/response/JSONOutput.java index dbb5910..ef85e34 100644 --- a/src/com/mesacarlos/webconsole/json/JSONOutput.java +++ b/src/com/mesacarlos/webconsole/websocket/response/JSONOutput.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.json; +package com.mesacarlos.webconsole.websocket.response; public interface JSONOutput { /** diff --git a/src/com/mesacarlos/webconsole/json/LoginRequired.java b/src/com/mesacarlos/webconsole/websocket/response/LoginRequired.java similarity index 87% rename from src/com/mesacarlos/webconsole/json/LoginRequired.java rename to src/com/mesacarlos/webconsole/websocket/response/LoginRequired.java index 1674ac2..0569b19 100644 --- a/src/com/mesacarlos/webconsole/json/LoginRequired.java +++ b/src/com/mesacarlos/webconsole/websocket/response/LoginRequired.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.json; +package com.mesacarlos.webconsole.websocket.response; import com.google.gson.JsonObject; diff --git a/src/com/mesacarlos/webconsole/json/Players.java b/src/com/mesacarlos/webconsole/websocket/response/Players.java similarity index 72% rename from src/com/mesacarlos/webconsole/json/Players.java rename to src/com/mesacarlos/webconsole/websocket/response/Players.java index da3eb22..3867e0e 100644 --- a/src/com/mesacarlos/webconsole/json/Players.java +++ b/src/com/mesacarlos/webconsole/websocket/response/Players.java @@ -1,16 +1,21 @@ -package com.mesacarlos.webconsole.json; +package com.mesacarlos.webconsole.websocket.response; +import java.util.List; + +import com.google.gson.Gson; import com.google.gson.JsonObject; public class Players implements JSONOutput{ private String message; private int connectedPlayers; private int maxPlayers; + private List connectedPlayersList; - public Players(String message, int connectedPlayers, int maxPlayers) { + public Players(String message, int connectedPlayers, int maxPlayers, List connectedPlayersList) { this.message = message; this.connectedPlayers = connectedPlayers; this.maxPlayers = maxPlayers; + this.connectedPlayersList = connectedPlayersList; } @Override @@ -38,6 +43,7 @@ public class Players implements JSONOutput{ object.addProperty("statusDescription", "Players"); object.addProperty("connectedPlayers", getConnectedPlayers()); object.addProperty("maxPlayers", getMaxPlayers()); + object.addProperty("players", new Gson().toJson(connectedPlayersList)); object.addProperty("message", getMessage()); return object.toString(); } diff --git a/src/com/mesacarlos/webconsole/json/Processed.java b/src/com/mesacarlos/webconsole/websocket/response/Processed.java similarity index 90% rename from src/com/mesacarlos/webconsole/json/Processed.java rename to src/com/mesacarlos/webconsole/websocket/response/Processed.java index 80095d5..f1cb1c7 100644 --- a/src/com/mesacarlos/webconsole/json/Processed.java +++ b/src/com/mesacarlos/webconsole/websocket/response/Processed.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.json; +package com.mesacarlos.webconsole.websocket.response; import com.google.gson.JsonObject; diff --git a/src/com/mesacarlos/webconsole/json/RamUsage.java b/src/com/mesacarlos/webconsole/websocket/response/RamUsage.java similarity index 90% rename from src/com/mesacarlos/webconsole/json/RamUsage.java rename to src/com/mesacarlos/webconsole/websocket/response/RamUsage.java index 283a33d..4c9f918 100644 --- a/src/com/mesacarlos/webconsole/json/RamUsage.java +++ b/src/com/mesacarlos/webconsole/websocket/response/RamUsage.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.json; +package com.mesacarlos.webconsole.websocket.response; import com.google.gson.JsonObject; diff --git a/src/com/mesacarlos/webconsole/json/UnknownCommand.java b/src/com/mesacarlos/webconsole/websocket/response/UnknownCommand.java similarity index 90% rename from src/com/mesacarlos/webconsole/json/UnknownCommand.java rename to src/com/mesacarlos/webconsole/websocket/response/UnknownCommand.java index 75a1288..cb8508d 100644 --- a/src/com/mesacarlos/webconsole/json/UnknownCommand.java +++ b/src/com/mesacarlos/webconsole/websocket/response/UnknownCommand.java @@ -1,4 +1,4 @@ -package com.mesacarlos.webconsole.json; +package com.mesacarlos.webconsole.websocket.response; import com.google.gson.JsonObject;