From e0ef521824bb1950c14a87833a57c73ed4fef2f5 Mon Sep 17 00:00:00 2001 From: NovaFox161 Date: Wed, 12 Sep 2018 23:00:00 -0500 Subject: [PATCH] Server/Client communication is working!! DisCal v3 hype!! --- .../discal/client/DisCalClient.java | 3 ++- .../discal/CrossTalkEventListener.java | 6 +++--- .../discal/client/service/KeepAliveHandler.java | 17 +++++++++++++---- .../object/network/discal/ConnectedClient.java | 8 ++++---- .../core/object/network/discal/NetworkInfo.java | 4 ++++ .../discal/server/DisCalServer.java | 5 +++-- .../server/listeners/CrossTalkListener.java | 16 ++++++++++------ .../network/discord/DiscordLoginHandler.java | 7 ++++--- server/src/main/resources/templates/status.html | 6 +++--- 9 files changed, 46 insertions(+), 26 deletions(-) diff --git a/client/src/main/java/org/dreamexposure/discal/client/DisCalClient.java b/client/src/main/java/org/dreamexposure/discal/client/DisCalClient.java index 852ad9d0..2e61c777 100644 --- a/client/src/main/java/org/dreamexposure/discal/client/DisCalClient.java +++ b/client/src/main/java/org/dreamexposure/discal/client/DisCalClient.java @@ -40,7 +40,8 @@ public class DisCalClient { dispatcher.registerListener(new ReadyEventListener()); //Register discal events - EventManager.get().registerEventListener(new CrossTalkEventListener()); + EventManager.get().init(); + EventManager.get().getEventBus().register(new CrossTalkEventListener()); //Login client.login(); diff --git a/client/src/main/java/org/dreamexposure/discal/client/listeners/discal/CrossTalkEventListener.java b/client/src/main/java/org/dreamexposure/discal/client/listeners/discal/CrossTalkEventListener.java index 0446c1b9..d79d42bb 100644 --- a/client/src/main/java/org/dreamexposure/discal/client/listeners/discal/CrossTalkEventListener.java +++ b/client/src/main/java/org/dreamexposure/discal/client/listeners/discal/CrossTalkEventListener.java @@ -1,5 +1,6 @@ package org.dreamexposure.discal.client.listeners.discal; +import com.google.common.eventbus.Subscribe; import org.dreamexposure.discal.client.DisCalClient; import org.dreamexposure.discal.client.message.MessageManager; import org.dreamexposure.discal.core.database.DatabaseManager; @@ -10,7 +11,6 @@ import org.dreamexposure.discal.core.object.GuildSettings; import org.dreamexposure.discal.core.object.web.WebGuild; import org.dreamexposure.discal.core.utils.GuildUtils; import org.dreamexposure.discal.core.utils.PermissionChecker; -import org.dreamexposure.novautils.event.EventListener; import org.dreamexposure.novautils.events.network.crosstalk.CrossTalkReceiveEvent; import org.dreamexposure.novautils.network.crosstalk.ClientSocketHandler; import org.json.JSONArray; @@ -29,8 +29,8 @@ import java.util.List; * Contact: nova@dreamexposure.org */ @SuppressWarnings({"ConstantConditions", "IfCanBeSwitch"}) -public class CrossTalkEventListener implements EventListener { - @SuppressWarnings("unused") +public class CrossTalkEventListener { + @Subscribe public void handle(CrossTalkReceiveEvent event) { IGuild g = null; //Check if this even applies to us! diff --git a/client/src/main/java/org/dreamexposure/discal/client/service/KeepAliveHandler.java b/client/src/main/java/org/dreamexposure/discal/client/service/KeepAliveHandler.java index 1a6350cb..3628cc1c 100644 --- a/client/src/main/java/org/dreamexposure/discal/client/service/KeepAliveHandler.java +++ b/client/src/main/java/org/dreamexposure/discal/client/service/KeepAliveHandler.java @@ -1,8 +1,11 @@ package org.dreamexposure.discal.client.service; import org.dreamexposure.discal.client.DisCalClient; +import org.dreamexposure.discal.core.logger.Logger; import org.dreamexposure.discal.core.object.BotSettings; import org.dreamexposure.novautils.network.crosstalk.ClientSocketHandler; +import org.joda.time.Interval; +import org.joda.time.Period; import org.json.JSONObject; import java.lang.management.ManagementFactory; @@ -28,10 +31,12 @@ public class KeepAliveHandler { data.put("Reason", "Keep-Alive"); data.put("Server-Count", DisCalClient.getClient().getGuilds().size()); data.put("Mem-Used", usedMemory()); - data.put("Uptime", getUptime()); + data.put("Uptime", humanReadableUptime()); //TODO: Add announcement count!!! ClientSocketHandler.sendToServer(Integer.valueOf(BotSettings.SHARD_INDEX.get()), data); + + Logger.getLogger().debug("Sent keep alive to server."); } }, seconds * 1000, seconds * 1000); } @@ -39,11 +44,15 @@ public class KeepAliveHandler { private static double usedMemory() { long totalMemory = Runtime.getRuntime().totalMemory(); long freeMemory = Runtime.getRuntime().freeMemory(); - return (double) (totalMemory - freeMemory) / (double) (1024 * 1024); + double a = (totalMemory - freeMemory) / (double) (1024 * 1024); + return (double) Math.round(a * 100) / 100; } - private static long getUptime() { + private static String humanReadableUptime() { RuntimeMXBean mxBean = ManagementFactory.getRuntimeMXBean(); - return mxBean.getUptime(); + Interval interval = new Interval(mxBean.getStartTime(), System.currentTimeMillis()); + Period period = interval.toPeriod(); + + return String.format("%d year(s), %d month(s), %d day(s), %d hour(s), %d minute(s), %d second(s)%n", period.getYears(), period.getMonths(), period.getDays(), period.getHours(), period.getMinutes(), period.getSeconds()); } } \ No newline at end of file diff --git a/core/src/main/java/org/dreamexposure/discal/core/object/network/discal/ConnectedClient.java b/core/src/main/java/org/dreamexposure/discal/core/object/network/discal/ConnectedClient.java index 45e16c8b..b6f6eddc 100644 --- a/core/src/main/java/org/dreamexposure/discal/core/object/network/discal/ConnectedClient.java +++ b/core/src/main/java/org/dreamexposure/discal/core/object/network/discal/ConnectedClient.java @@ -15,7 +15,7 @@ public class ConnectedClient { private int connectedServers; private long lastKeepAlive; - private long uptime; + private String uptime; private double memUsed; public ConnectedClient(int _clientIndex, String _clientHostname, int _clientPort) { @@ -26,7 +26,7 @@ public class ConnectedClient { connectedServers = 0; lastKeepAlive = System.currentTimeMillis(); - uptime = 0; + uptime = "ERROR"; memUsed = 0; } @@ -51,7 +51,7 @@ public class ConnectedClient { return lastKeepAlive; } - public long getUptime() { + public String getUptime() { return uptime; } @@ -68,7 +68,7 @@ public class ConnectedClient { lastKeepAlive = _lastKeepAlive; } - public void setUptime(long _uptime) { + public void setUptime(String _uptime) { uptime = _uptime; } diff --git a/core/src/main/java/org/dreamexposure/discal/core/object/network/discal/NetworkInfo.java b/core/src/main/java/org/dreamexposure/discal/core/object/network/discal/NetworkInfo.java index fb5a9f7a..679f613e 100644 --- a/core/src/main/java/org/dreamexposure/discal/core/object/network/discal/NetworkInfo.java +++ b/core/src/main/java/org/dreamexposure/discal/core/object/network/discal/NetworkInfo.java @@ -44,5 +44,9 @@ public class NetworkInfo { return count; } + public int getClientCount() { + return clients.size(); + } + //Setters } \ No newline at end of file diff --git a/server/src/main/java/org/dreamexposure/discal/server/DisCalServer.java b/server/src/main/java/org/dreamexposure/discal/server/DisCalServer.java index 1637650a..14a6604b 100644 --- a/server/src/main/java/org/dreamexposure/discal/server/DisCalServer.java +++ b/server/src/main/java/org/dreamexposure/discal/server/DisCalServer.java @@ -33,8 +33,9 @@ public class DisCalServer { //Init logger Logger.getLogger().init(); - //Register DisCal events and listeners - EventManager.get().registerEventListener(new CrossTalkListener()); + //Register DisCal events + EventManager.get().init(); + EventManager.get().getEventBus().register(new CrossTalkListener()); //Connect to MySQL DatabaseManager.getManager().connectToMySQL(); diff --git a/server/src/main/java/org/dreamexposure/discal/server/listeners/CrossTalkListener.java b/server/src/main/java/org/dreamexposure/discal/server/listeners/CrossTalkListener.java index 54b1cf4b..d8f128f3 100644 --- a/server/src/main/java/org/dreamexposure/discal/server/listeners/CrossTalkListener.java +++ b/server/src/main/java/org/dreamexposure/discal/server/listeners/CrossTalkListener.java @@ -1,8 +1,9 @@ package org.dreamexposure.discal.server.listeners; +import com.google.common.eventbus.Subscribe; +import org.dreamexposure.discal.core.logger.Logger; import org.dreamexposure.discal.core.object.network.discal.ConnectedClient; import org.dreamexposure.discal.server.DisCalServer; -import org.dreamexposure.novautils.event.EventListener; import org.dreamexposure.novautils.events.network.crosstalk.CrossTalkReceiveEvent; /** @@ -13,26 +14,29 @@ import org.dreamexposure.novautils.events.network.crosstalk.CrossTalkReceiveEven * Company Website: https://www.dreamexposure.org * Contact: nova@dreamexposure.org */ -@SuppressWarnings("Duplicates") -public class CrossTalkListener implements EventListener { - public void handle(CrossTalkReceiveEvent event) { +@SuppressWarnings({"Duplicates", "UnstableApiUsage"}) +public class CrossTalkListener { + @Subscribe + public static void handle(CrossTalkReceiveEvent event) { //Handle keep alive... if (event.getData().has("Reason") && event.getData().getString("Reason").equalsIgnoreCase("Keep-Alive")) { + Logger.getLogger().debug("Received Keep Alive for Client: " + event.getClientIndex()); if (DisCalServer.getNetworkInfo().clientExists(event.getClientIndex())) { //In network, update info... ConnectedClient cc = DisCalServer.getNetworkInfo().getClient(event.getClientIndex()); cc.setLastKeepAlive(System.currentTimeMillis()); cc.setConnectedServers(event.getData().getInt("Server-Count")); - cc.setUptime(event.getData().getLong("Uptime")); + cc.setUptime(event.getData().getString("Uptime")); cc.setMemUsed(event.getData().getDouble("Mem-Used")); + } else { //Not in network, add info... ConnectedClient cc = new ConnectedClient(event.getClientIndex(), event.getClientIp(), event.getClientPort()); cc.setLastKeepAlive(System.currentTimeMillis()); cc.setConnectedServers(event.getData().getInt("Server-Count")); - cc.setUptime(event.getData().getLong("Uptime")); + cc.setUptime(event.getData().getString("Uptime")); cc.setMemUsed(event.getData().getDouble("Mem-Used")); DisCalServer.getNetworkInfo().getClients().add(cc); diff --git a/server/src/main/java/org/dreamexposure/discal/server/network/discord/DiscordLoginHandler.java b/server/src/main/java/org/dreamexposure/discal/server/network/discord/DiscordLoginHandler.java index 5656d7ac..8c61b923 100644 --- a/server/src/main/java/org/dreamexposure/discal/server/network/discord/DiscordLoginHandler.java +++ b/server/src/main/java/org/dreamexposure/discal/server/network/discord/DiscordLoginHandler.java @@ -10,9 +10,10 @@ import org.dreamexposure.discal.core.enums.network.CrossTalkReason; import org.dreamexposure.discal.core.enums.network.DisCalRealm; import org.dreamexposure.discal.core.logger.Logger; import org.dreamexposure.discal.core.object.BotSettings; +import org.dreamexposure.discal.core.object.network.discal.ConnectedClient; import org.dreamexposure.discal.core.object.web.WebGuild; +import org.dreamexposure.discal.server.DisCalServer; import org.dreamexposure.discal.server.handler.DiscordAccountHandler; -import org.dreamexposure.novautils.network.crosstalk.ClientSocketData; import org.dreamexposure.novautils.network.crosstalk.ServerSocketHandler; import org.json.JSONArray; import org.json.JSONException; @@ -86,14 +87,14 @@ public class DiscordLoginHandler { //Get guilds... List guilds = new ArrayList<>(); - for (ClientSocketData csd : ServerSocketHandler.getClients()) { + for (ConnectedClient csd : DisCalServer.getNetworkInfo().getClients()) { JSONObject requestData = new JSONObject(); requestData.put("Reason", CrossTalkReason.GET.name()); requestData.put("Realm", DisCalRealm.WEBSITE_DASHBOARD_DEFAULTS); requestData.put("Member-Id", m.get("id") + ""); - JSONObject responseData = ServerSocketHandler.sendAndReceive(requestData, csd.getIp(), csd.getPort()); + JSONObject responseData = ServerSocketHandler.sendAndReceive(requestData, csd.getClientHostname(), csd.getClientPort()); JSONArray guildsData = responseData.getJSONArray("Guilds"); for (int i = 0; i < responseData.getInt("Guild-Count"); i++) { diff --git a/server/src/main/resources/templates/status.html b/server/src/main/resources/templates/status.html index 36c3c292..cf3ae63f 100644 --- a/server/src/main/resources/templates/status.html +++ b/server/src/main/resources/templates/status.html @@ -61,7 +61,7 @@

DisCal Network and Services Status

Server

-

+

Uptime: Not yet tracked

Total Guilds: not yet tracked

Total Calendars: not yet tracked

@@ -84,10 +84,10 @@

-

+

Announcements: Not Yet Tracked

-

Uptime: To be Displayed

+

Announcement Service: Not yet tracked

Creator Cleaner Service: Not yet tracked