diff --git a/src/net/ash/HIDToVPADNetworkClient/controller/Controller.java b/src/net/ash/HIDToVPADNetworkClient/controller/Controller.java index f0f86f7..0094883 100644 --- a/src/net/ash/HIDToVPADNetworkClient/controller/Controller.java +++ b/src/net/ash/HIDToVPADNetworkClient/controller/Controller.java @@ -48,6 +48,7 @@ public abstract class Controller implements Runnable { private Object rumbleLock = new Object(); private boolean rumble = false; + private boolean hasConfig = true; // Let's be optimistic public Controller(ControllerType type, String identifier) throws ControllerInitializationFailedException { this.type = type; @@ -206,4 +207,12 @@ public abstract class Controller implements Runnable { } public abstract String getInfoText(); + + public boolean hasConfig() { + return this.hasConfig; + } + + public void setHasConfig(boolean b) { + this.hasConfig = b; + } } \ No newline at end of file diff --git a/src/net/ash/HIDToVPADNetworkClient/gui/GuiControllerListItem.java b/src/net/ash/HIDToVPADNetworkClient/gui/GuiControllerListItem.java index 40c04d0..98edf88 100644 --- a/src/net/ash/HIDToVPADNetworkClient/gui/GuiControllerListItem.java +++ b/src/net/ash/HIDToVPADNetworkClient/gui/GuiControllerListItem.java @@ -33,6 +33,7 @@ import javax.swing.Timer; import lombok.Getter; import net.ash.HIDToVPADNetworkClient.controller.Controller; import net.ash.HIDToVPADNetworkClient.network.NetworkManager; +import net.ash.HIDToVPADNetworkClient.util.Utilities; public class GuiControllerListItem extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; @@ -40,6 +41,9 @@ public class GuiControllerListItem extends JPanel implements ActionListener { @Getter private final Controller controller; private JCheckBox checkbox; + private boolean clicked = false; + private boolean hasConfigCache = true; + public GuiControllerListItem(Controller data) { super(new BorderLayout()); @@ -57,6 +61,11 @@ public class GuiControllerListItem extends JPanel implements ActionListener { int delay = 100; // milliseconds ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { + if (hasConfigCache != controller.hasConfig()) { + hasConfigCache = controller.hasConfig(); + checkIfDisplayNoConfigMessage(); + } + checkbox.setEnabled(NetworkManager.getInstance().isConnected()); checkbox.setSelected(controller.isActive()); } @@ -68,8 +77,15 @@ public class GuiControllerListItem extends JPanel implements ActionListener { return controller.getInfoText(); } + private void checkIfDisplayNoConfigMessage() { + if (hasConfigCache == false) { + Utilities.messageBox("No configuration for this controller found on the console."); + } + } + @Override public void actionPerformed(ActionEvent e) { + checkIfDisplayNoConfigMessage(); boolean selected = ((JCheckBox) e.getSource()).isSelected(); controller.setActive(selected); checkbox.setSelected(controller.isActive()); diff --git a/src/net/ash/HIDToVPADNetworkClient/manager/ActiveControllerManager.java b/src/net/ash/HIDToVPADNetworkClient/manager/ActiveControllerManager.java index 6cd4703..c197ed5 100644 --- a/src/net/ash/HIDToVPADNetworkClient/manager/ActiveControllerManager.java +++ b/src/net/ash/HIDToVPADNetworkClient/manager/ActiveControllerManager.java @@ -103,7 +103,7 @@ public class ActiveControllerManager implements Runnable { synchronized (activeControllers) { for (Controller c : toRemove) { NetworkManager.getInstance().removeHIDDevice(activeControllers.get(c)); - //c.destroyDriver(); Removing it from the list doesn't require to close the connection. + // c.destroyDriver(); Removing it from the list doesn't require to close the connection. activeControllers.remove(c); } } diff --git a/src/net/ash/HIDToVPADNetworkClient/manager/ControllerManager.java b/src/net/ash/HIDToVPADNetworkClient/manager/ControllerManager.java index 35ddb20..cb7b76a 100644 --- a/src/net/ash/HIDToVPADNetworkClient/manager/ControllerManager.java +++ b/src/net/ash/HIDToVPADNetworkClient/manager/ControllerManager.java @@ -133,7 +133,7 @@ public class ControllerManager { public static List getAttachedControllers() { return new ArrayList(attachedControllers.values()); } - + private static Map detectHIDDevices() { Map connectedDevices = new HashMap(); diff --git a/src/net/ash/HIDToVPADNetworkClient/network/NetworkManager.java b/src/net/ash/HIDToVPADNetworkClient/network/NetworkManager.java index 4318f5d..b67f59f 100644 --- a/src/net/ash/HIDToVPADNetworkClient/network/NetworkManager.java +++ b/src/net/ash/HIDToVPADNetworkClient/network/NetworkManager.java @@ -29,6 +29,8 @@ import java.util.List; import lombok.Getter; import lombok.Synchronized; import lombok.extern.java.Log; +import net.ash.HIDToVPADNetworkClient.controller.Controller; +import net.ash.HIDToVPADNetworkClient.manager.ActiveControllerManager; import net.ash.HIDToVPADNetworkClient.network.commands.AttachCommand; import net.ash.HIDToVPADNetworkClient.network.commands.DetachCommand; import net.ash.HIDToVPADNetworkClient.network.commands.DeviceCommand; @@ -206,13 +208,20 @@ public class NetworkManager implements Runnable { try { configFound = recvTCPByte(); } catch (IOException e1) { - e1.printStackTrace(); + log.info("Failed to get byte."); + disconnect(); + return false; } if (configFound == Protocol.TCP_CMD_ATTACH_CONFIG_FOUND) { // log.info("Config on the console found!"); } else if (configFound == Protocol.TCP_CMD_ATTACH_CONFIG_NOT_FOUND) { log.info("NO CONFIG FOUND."); - return false; + Controller c = ActiveControllerManager.getInstance().getControllerByHIDHandle(command.getSender().getHidHandle()); + if (c != null) { + c.setHasConfig(false); + c.setActive(false); + } + return true; } else if (configFound == 0) { log.info("Failed to get byte."); disconnect(); diff --git a/src/net/ash/HIDToVPADNetworkClient/network/Protocol.java b/src/net/ash/HIDToVPADNetworkClient/network/Protocol.java index 0d6ff50..ea34c51 100644 --- a/src/net/ash/HIDToVPADNetworkClient/network/Protocol.java +++ b/src/net/ash/HIDToVPADNetworkClient/network/Protocol.java @@ -58,9 +58,9 @@ public class Protocol { } public enum HandshakeReturnCode { - GOOD_HANDSHAKE,BAD_HANDSHAKE + GOOD_HANDSHAKE, BAD_HANDSHAKE } - + public static byte[] getRawAttachDataToSend(AttachCommand command) throws IOException { return ByteBuffer.allocate(9).put(Protocol.TCP_CMD_ATTACH).putInt(command.getHandle()).putShort(command.getVid()).putShort(command.getPid()).array(); } @@ -99,5 +99,5 @@ public class Protocol { return bos.toByteArray(); } - + } diff --git a/src/net/ash/HIDToVPADNetworkClient/network/TCPClient.java b/src/net/ash/HIDToVPADNetworkClient/network/TCPClient.java index 8430c3a..df4b9e6 100644 --- a/src/net/ash/HIDToVPADNetworkClient/network/TCPClient.java +++ b/src/net/ash/HIDToVPADNetworkClient/network/TCPClient.java @@ -55,20 +55,20 @@ public class TCPClient { sock.connect(new InetSocketAddress(ip, Protocol.TCP_PORT), 2000); in = new DataInputStream(sock.getInputStream()); out = new DataOutputStream(sock.getOutputStream()); - - HandshakeReturnCode resultHandshake = HandshakeReturnCode.GOOD_HANDSHAKE; - if (recvByte() != Protocol.TCP_HANDSHAKE) resultHandshake = HandshakeReturnCode.BAD_HANDSHAKE; - + + HandshakeReturnCode resultHandshake = HandshakeReturnCode.GOOD_HANDSHAKE; + if (recvByte() != Protocol.TCP_HANDSHAKE) resultHandshake = HandshakeReturnCode.BAD_HANDSHAKE; + if (resultHandshake == HandshakeReturnCode.GOOD_HANDSHAKE) { ActiveControllerManager.getInstance().attachAllActiveControllers(); this.ip = ip; shouldRetry = 0; - }else{ + } else { log.info("[TCP] Handshaking failed"); throw new Exception(); } } - + public synchronized boolean abort() { try { shouldRetry = Settings.MAXIMUM_TRIES_FOR_RECONNECTING; @@ -104,12 +104,7 @@ public class TCPClient { } public synchronized byte recvByte() throws IOException { - try { - return in.readByte(); - } catch (IOException e) { - log.info(e.getMessage()); - throw e; - } + return in.readByte(); } public synchronized short recvShort() throws IOException { diff --git a/src/net/ash/HIDToVPADNetworkClient/util/PureJavaHidApiManager.java b/src/net/ash/HIDToVPADNetworkClient/util/PureJavaHidApiManager.java index 5f3a84b..f92dad9 100644 --- a/src/net/ash/HIDToVPADNetworkClient/util/PureJavaHidApiManager.java +++ b/src/net/ash/HIDToVPADNetworkClient/util/PureJavaHidApiManager.java @@ -58,10 +58,10 @@ public class PureJavaHidApiManager { if (Settings.isMacOSX()) real_path = real_path.substring(0, 13); - if (real_path.equals(expected_path)){ + if (real_path.equals(expected_path)) { return PureJavaHidApi.openDevice(info); } - + return null; } diff --git a/src/net/ash/HIDToVPADNetworkClient/util/Utilities.java b/src/net/ash/HIDToVPADNetworkClient/util/Utilities.java index 3dd1a39..8ede2c4 100644 --- a/src/net/ash/HIDToVPADNetworkClient/util/Utilities.java +++ b/src/net/ash/HIDToVPADNetworkClient/util/Utilities.java @@ -21,6 +21,9 @@ *******************************************************************************/ package net.ash.HIDToVPADNetworkClient.util; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + public class Utilities { private Utilities() { @@ -76,4 +79,8 @@ public class Utilities { public static short signedShortToByte(short value) { return signedShortToByte((int) value); } + + public static void messageBox(String string) { + JOptionPane.showMessageDialog(new JFrame(), string); + } }