diff --git a/pitiupi/src/pitiupi/GUI/Login.java b/pitiupi/src/pitiupi/GUI/Login.java index 4c9c61c..3b3765e 100644 --- a/pitiupi/src/pitiupi/GUI/Login.java +++ b/pitiupi/src/pitiupi/GUI/Login.java @@ -22,6 +22,7 @@ import javax.swing.JTextField; /** * * @author flavio + * @author tony */ public final class Login extends JDialog { @@ -82,10 +83,17 @@ public final class Login extends JDialog { this.add(topPanel); this.add(buttonPanel, BorderLayout.SOUTH); + okButton.addActionListener((ActionEvent e) -> { + try { + portField.commitEdit(); + } catch (java.text.ParseException ex) { + return; + } Login.this.setVisible(false); }); + cancelButton.addActionListener((ActionEvent e) -> { System.exit(0); }); diff --git a/pitiupi/src/pitiupi/GUI/MainWindow.java b/pitiupi/src/pitiupi/GUI/MainWindow.java index 009f66d..73cb955 100644 --- a/pitiupi/src/pitiupi/GUI/MainWindow.java +++ b/pitiupi/src/pitiupi/GUI/MainWindow.java @@ -32,8 +32,8 @@ public class MainWindow extends javax.swing.JFrame { private Socket socket; - private final String userName; - private final int port; + private String userName; + private int port; private PluginLoader pluginManager; private final List plugins; @@ -111,4 +111,28 @@ public class MainWindow extends javax.swing.JFrame { public List getPlugins() { return plugins; } + + public void setUserName(String userName) { + this.userName = userName; + updateStatus(); + } + + public void setPort(int port) { + this.port = port; + reconnect(); + updateStatus(); + } + + private void updateStatus() { + this.status.setText("Connected on port " + this.port + " name " + this.userName); + } + + private void reconnect() { + if (this.socket != null) { + this.socket.close(); + } + this.socket = new Socket(this); + this.socket.start(); + } + } diff --git a/pitiupi/src/pitiupi/GUI/MenuBar.java b/pitiupi/src/pitiupi/GUI/MenuBar.java index 2a7e1b1..64fc6c7 100644 --- a/pitiupi/src/pitiupi/GUI/MenuBar.java +++ b/pitiupi/src/pitiupi/GUI/MenuBar.java @@ -11,6 +11,8 @@ import javax.swing.JMenuBar; /** * * @author flavio + * @author tony + * */ public class MenuBar extends JMenuBar { @@ -56,9 +58,14 @@ public class MenuBar extends JMenuBar { mainWindow.exit(); } - private void setupMenuActionPerformed(java.awt.event.ActionEvent evt) { + + private void setupMenuActionPerformed(java.awt.event.ActionEvent evt) { Login login = new Login(); login.setVisible(true); + + mainWindow.setUserName(login.getName()); + mainWindow.setPort(login.getPort()); + login.dispose(); } diff --git a/pitiupi/src/pitiupi/Main.java b/pitiupi/src/pitiupi/Main.java index 297b61a..deb38d1 100644 --- a/pitiupi/src/pitiupi/Main.java +++ b/pitiupi/src/pitiupi/Main.java @@ -12,6 +12,7 @@ import java.util.logging.Logger; /** * * @author flavio + * @author tony */ public class Main { @@ -40,16 +41,17 @@ public class Main { } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(pitiupi.GUI.MainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } - // - /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { + pitiupi.GUI.Login login = new pitiupi.GUI.Login(); + login.setVisible(true); + pitiupi.GUI.MainWindow main; - main = new pitiupi.GUI.MainWindow(System.getProperty("user.name"), 8000); + main = new pitiupi.GUI.MainWindow(login.getName(), login.getPort()); main.setVisible(true); - } + } }); } diff --git a/pitiupi/src/pitiupi/net/Socket.java b/pitiupi/src/pitiupi/net/Socket.java index 0a99fde..ad26059 100644 --- a/pitiupi/src/pitiupi/net/Socket.java +++ b/pitiupi/src/pitiupi/net/Socket.java @@ -29,6 +29,7 @@ public class Socket extends Thread { private MulticastSocket multicastSocket; private InetAddress address; private MainWindow main; + private volatile boolean running = true; public final static String INET_ADDR = "224.0.0.3"; public Socket(MainWindow main) { @@ -56,24 +57,43 @@ public class Socket extends Thread { multicastSocket.send(msgPacket); } + public void close() { + running = false; + if (multicastSocket != null) { + try { + multicastSocket.leaveGroup(address); + } catch (IOException ex) { + + } + multicastSocket.close(); + } + } + public void receive() throws UnknownHostException, IOException, ClassNotFoundException { byte[] buf = new byte[256000]; - while (true) { + while (running) { DatagramPacket msgPacket = new DatagramPacket(buf, buf.length); - multicastSocket.receive(msgPacket); - + try { + multicastSocket.receive(msgPacket); + } catch (IOException ex) { + if (!running) { + break; + } + throw ex; + } HeartbeatMessage heartbeat = tryParseHeartbeat(msgPacket.getData()); if (heartbeat != null) { main.getHeartbeatManager().receiveHeartbeat(heartbeat, msgPacket.getAddress()); continue; } - for (Plugin plugin : main.getPlugins()) { System.out.println(msgPacket.getAddress().toString()); plugin.receiveMessage(msgPacket.getData()); } } } + + private HeartbeatMessage tryParseHeartbeat(byte[] data) { try {