From: Debayan Sutradhar Date: Sat, 05 Jun 2021 22:00:25 +0530 Subject: Server now respects the delay on action clicked by client --- Server now respects the delay on action clicked by client --- --- 'a/src/main/java/com/stream_pi/server/connection/ClientConnection.java' +++ b/src/main/java/com/stream_pi/server/connection/ClientConnection.java @@ -895,51 +895,13 @@ public class ClientConnection extends Th public void onActionClicked(Message message) { - try - { - String[] r = message.getStringArrValue(); + String[] r = message.getStringArrValue(); - String profileID = r[0]; - String actionID = r[1]; - boolean toggle = r[2].equals("true"); + String profileID = r[0]; + String actionID = r[1]; + boolean toggle = r[2].equals("true"); - Action action = client.getProfileByID(profileID).getActionByID(actionID); - - if(action.getActionType() == ActionType.NORMAL || action.getActionType() == ActionType.TOGGLE) - { - if(action.isInvalid()) - { - throw new MinorException( - "The action isn't installed on the server." - ); - } - else - { - new Thread(new Task() { - @Override - protected Void call() - { - getLogger().info("action "+action.getID()+" clicked!"); - - if(action instanceof ToggleAction) - { - serverListener.onToggleActionClicked((ToggleAction) action, toggle, profileID, - getRemoteSocketAddress()); - } - else if (action instanceof NormalAction) - { - serverListener.onNormalActionClicked((NormalAction) action, profileID, - getRemoteSocketAddress()); - } - return null; - } - }).start(); - } - } - } catch (Exception e) { - e.printStackTrace(); - exceptionAndAlertHandler.handleMinorException(new MinorException(e.getMessage())); - } + serverListener.onActionClicked(getClient(), profileID, actionID, toggle); } public void setToggleStatus(boolean status, String profileID, String actionID) throws SevereException --- 'a/src/main/java/com/stream_pi/server/connection/ServerListener.java' +++ b/src/main/java/com/stream_pi/server/connection/ServerListener.java @@ -2,6 +2,7 @@ package com.stream_pi.server.connection; import com.stream_pi.action_api.externalplugin.NormalAction; import com.stream_pi.action_api.externalplugin.ToggleAction; +import com.stream_pi.server.client.Client; import com.stream_pi.server.window.dashboard.ClientAndProfileSelectorPane; import com.stream_pi.server.window.dashboard.DashboardBase; import com.stream_pi.server.window.settings.SettingsBase; @@ -12,8 +13,7 @@ import java.net.SocketAddress; public interface ServerListener { - void onNormalActionClicked(NormalAction action, String profileID, SocketAddress socketAddress); - void onToggleActionClicked(ToggleAction action, boolean toggle, String profileID, SocketAddress socketAddress); + void onActionClicked(Client client, String profileID, String actionID, boolean toggle); void clearTemp(); --- 'a/src/main/java/com/stream_pi/server/controller/Controller.java' +++ b/src/main/java/com/stream_pi/server/controller/Controller.java @@ -1,6 +1,7 @@ package com.stream_pi.server.controller; import com.stream_pi.action_api.action.Action; +import com.stream_pi.action_api.action.ActionType; import com.stream_pi.action_api.action.PropertySaver; import com.stream_pi.action_api.action.ServerConnection; import com.stream_pi.action_api.externalplugin.NormalAction; @@ -49,8 +50,11 @@ import java.awt.TrayIcon; import java.net.SocketAddress; import java.util.Objects; import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; import java.util.logging.Level; public class Controller extends Base implements PropertySaver, ServerConnection, ToggleExtras @@ -372,6 +376,52 @@ public class Controller extends Base imp } @Override + public void onActionClicked(Client client, String profileID, String actionID, boolean toggle) + { + try + { + Action action = client.getProfileByID(profileID).getActionByID(actionID); + + if(action.getActionType() == ActionType.NORMAL || action.getActionType() == ActionType.TOGGLE) + { + if(action.isInvalid()) + { + throw new MinorException( + "The action isn't installed on the server." + ); + } + else + { + new Timer().schedule( + new TimerTask() { + @Override + public void run() + { + getLogger().info("action "+action.getID()+" clicked!"); + + if(action instanceof ToggleAction) + { + onToggleActionClicked((ToggleAction) action, toggle, profileID, + client.getRemoteSocketAddress()); + } + else if (action instanceof NormalAction) + { + onNormalActionClicked((NormalAction) action, profileID, + client.getRemoteSocketAddress()); + } + } + }, action.getDelayBeforeExecuting() + ); + } + } + } + catch (Exception e) + { + e.printStackTrace(); + handleMinorException(new MinorException(e.getMessage())); + } + } + public synchronized void onNormalActionClicked(NormalAction action, String profileID, SocketAddress socketAddress) { try @@ -384,7 +434,6 @@ public class Controller extends Base imp } } - @Override public synchronized void onToggleActionClicked(ToggleAction action, boolean toggle, String profileID, SocketAddress socketAddress) { try