diff --git a/java/resource/M.png b/java/resource/M.png new file mode 100644 index 0000000..28fdd38 Binary files /dev/null and b/java/resource/M.png differ diff --git a/java/resource/kop.png b/java/resource/kop.png deleted file mode 100644 index 54fa21d..0000000 Binary files a/java/resource/kop.png and /dev/null differ diff --git a/java/src/mimis/Client.java b/java/src/mimis/Client.java index b458197..56b24c5 100644 --- a/java/src/mimis/Client.java +++ b/java/src/mimis/Client.java @@ -10,13 +10,14 @@ import mimis.device.wiimote.WiimoteDevice; import mimis.event.EventRouter; import mimis.event.router.GlobalRouter; import mimis.exception.event.router.GlobalRouterException; +import mimis.exception.worker.ActivateException; +import mimis.util.swing.Dialog; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - public class Client { - protected Log log = LogFactory.getLog(getClass()); + protected static Log log = LogFactory.getLog(Client.class); public static final String IP = "127.0.0.1"; public static final int PORT = 6789; @@ -43,10 +44,20 @@ public class Client { public void start() { log.debug("Client"); Mimis mimis = new Mimis(eventRouter, deviceArray); - mimis.start(); + try { + mimis.activate(); + } catch (ActivateException e) { + log.fatal(e); + } } public static void main(String[] args) { - new Main().start(); + try { + String ip = Dialog.question("Server IP:", IP); + int port = Integer.valueOf(Dialog.question("Server Port:", PORT)); + new Client(ip, port).start(); + } catch (GlobalRouterException e) { + log.fatal(e); + } } } diff --git a/java/src/mimis/GUI.java b/java/src/mimis/GUI.java index 59494bb..2552fef 100644 --- a/java/src/mimis/GUI.java +++ b/java/src/mimis/GUI.java @@ -24,14 +24,14 @@ public class GUI extends JFrame { protected static final String TITLE = "MIMIS Manager"; protected static final String APPLICATION_TITLE = "Applications"; protected static final String DEVICE_TITLE = "Devices"; - + protected Mimis mimis; protected TextArea textArea; public GUI(Mimis mimis, Manager applicationManager, Manager deviceManager) { super(TITLE); this.mimis = mimis; - setIconImage(Swing.getImage("kop.png")); + setIconImage(Swing.getImage(Mimis.ICON)); createFrame(applicationManager, deviceManager); } diff --git a/java/src/mimis/Mimis.java b/java/src/mimis/Mimis.java index 3305a87..8bc9db7 100644 --- a/java/src/mimis/Mimis.java +++ b/java/src/mimis/Mimis.java @@ -15,6 +15,7 @@ import org.apache.commons.logging.LogFactory; public class Mimis extends EventHandler { protected Log log = LogFactory.getLog(getClass()); + public static final String ICON = "M.png"; protected ArrayCycle applicationCycle; protected Device[] deviceArray; diff --git a/java/src/mimis/device/network/NetworkDevice.java b/java/src/mimis/device/network/NetworkDevice.java index 19a0def..5a4a999 100644 --- a/java/src/mimis/device/network/NetworkDevice.java +++ b/java/src/mimis/device/network/NetworkDevice.java @@ -73,10 +73,12 @@ public class NetworkDevice extends Device { Socket socket = serverSocket.accept(); Client client = new Client(socket); client.start(); - log.trace("Client connected"); - } catch (IOException e) {} + log.debug("Client connected"); + } catch (IOException e) { + log.error(e); + } } - + public void stop() throws DeactivateException { super.stop(); for (Client client : clientList) { @@ -116,7 +118,9 @@ public class NetworkDevice extends Device { public void stop() { try { - disconnect(); + objectInputStream.close(); + objectOutputStream.close(); + socket.close(); } catch (IOException e) { log.error(e); } finally { @@ -127,11 +131,5 @@ public class NetworkDevice extends Device { public void send(Object object) throws IOException { objectOutputStream.writeObject(object); } - - public void disconnect() throws IOException { - objectInputStream.close(); - objectOutputStream.close(); - socket.close(); - } } } diff --git a/java/src/mimis/device/panel/Panel.java b/java/src/mimis/device/panel/Panel.java index dcbb8cd..48c9f5a 100644 --- a/java/src/mimis/device/panel/Panel.java +++ b/java/src/mimis/device/panel/Panel.java @@ -8,6 +8,7 @@ import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.WindowConstants; +import mimis.Mimis; import mimis.exception.worker.DeactivateException; import mimis.util.Swing; import mimis.util.swing.HoldButton; @@ -42,7 +43,7 @@ public class Panel extends JFrame implements HoldButtonListener { Panel(PanelDevice panelDevice) { super(TITLE); this.panelDevice = panelDevice; - setIconImage(Swing.getImage("kop.png")); + setIconImage(Swing.getImage(Mimis.ICON)); createControls(); layoutControls(); pack(); diff --git a/java/src/mimis/event/router/GlobalRouter.java b/java/src/mimis/event/router/GlobalRouter.java index 9cae43e..a885de2 100644 --- a/java/src/mimis/event/router/GlobalRouter.java +++ b/java/src/mimis/event/router/GlobalRouter.java @@ -4,55 +4,96 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; -import java.net.UnknownHostException; import mimis.Event; import mimis.Worker; import mimis.event.EventRouter; import mimis.event.Feedback; -import mimis.exception.event.router.GlobalRouterException; +import mimis.exception.worker.ActivateException; +import mimis.exception.worker.DeactivateException; public class GlobalRouter extends EventRouter { - protected Socket socket; - protected ObjectOutputStream objectOutputStream; - protected ObjectInputStream objectInputStream; + protected String ip; + protected int port; + protected Client client; - public GlobalRouter(String ip, int port) throws GlobalRouterException { + public GlobalRouter(String ip, int port) { + this.ip = ip; + this.port = port; + } + + public void activate() throws ActivateException { try { - socket = new Socket(ip, port); - objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); - objectInputStream = new ObjectInputStream(socket.getInputStream()); - new Worker() { - public void work() { - try { - Object object; - do { - object = objectInputStream.readObject(); - if (object instanceof Feedback) { - add((Feedback) object); - } - } while (object != null); - } catch (IOException e) { - log.error(e); - } catch (ClassNotFoundException e) { - log.error(e); - } - } - }; - return; - } catch (UnknownHostException e) { - log.error(e); + client = new Client(ip, port); } catch (IOException e) { log.error(e); + throw new ActivateException(); } - throw new GlobalRouterException(); + super.activate(); + } + + public boolean active() { + if (active && client.active()) { + active = false; + } + return active; + } + + public void deactivate() throws DeactivateException { + client.stop(); } public void event(Event event) { try { - objectOutputStream.writeObject(event); + client.send(event); } catch (IOException e) { log.error(e); } } + + class Client extends Worker { + protected Socket socket; + protected ObjectInputStream objectInputStream; + protected ObjectOutputStream objectOutputStream; + + public Client(String ip, int port) throws IOException { + socket = new Socket(ip, port); + objectInputStream = new ObjectInputStream(socket.getInputStream()); + objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); + } + + public void work() { + try { + Object object; + do { + object = objectInputStream.readObject(); + if (object instanceof Feedback) { + add((Feedback) object); + } + } while (object != null); + } catch (IOException e) { + log.error(e); + } catch (ClassNotFoundException e) { + log.error(e); + } + } + + public boolean active() { + return active = socket.isConnected(); + } + + public void stop() { + try { + objectInputStream.close(); + objectOutputStream.close(); + socket.close(); + } catch (IOException e) { + log.error(e); + } + } + + public void send(Object object) throws IOException { + objectOutputStream.writeObject(object); + } + } } diff --git a/java/src/mimis/util/Swing.java b/java/src/mimis/util/Swing.java index 0c837b1..a99b5ee 100644 --- a/java/src/mimis/util/Swing.java +++ b/java/src/mimis/util/Swing.java @@ -20,7 +20,7 @@ public class Swing { } public static Image getImage(String name) { - return toolkit.getImage((getResource(name))); + return toolkit.getImage(getResource(name)); } public static ImageIcon getImageIcon(String name) { diff --git a/java/src/mimis/util/swing/Dialog.java b/java/src/mimis/util/swing/Dialog.java new file mode 100644 index 0000000..e499b9f --- /dev/null +++ b/java/src/mimis/util/swing/Dialog.java @@ -0,0 +1,18 @@ +package mimis.util.swing; + +import javax.swing.JOptionPane; + +public class Dialog { + public static final String TITLE = "MIMIS Dialog"; + + public static String question(String message, Object initial) { + return question(TITLE, message, initial); + } + + public static String question(String title, String message, Object initial) { + return (String) JOptionPane.showInputDialog( + null, message, title, + JOptionPane.QUESTION_MESSAGE, + null, null, initial); + } +}