From 41c1b120e9056172aaee70df4e91131cc7ed46ca Mon Sep 17 00:00:00 2001
From: fpeterfalvi <fpeterfalvi@gmail.com>
Date: Tue, 1 May 2018 11:36:17 +0200
Subject: [PATCH] Writing observer name and connecting to server in Swing.

---
 KvizObserver/pom.xml                 |   4 +-
 KvizObserver/src/main/java/Main.java | 152 +++++++++++++++++++++++----
 2 files changed, 134 insertions(+), 22 deletions(-)

diff --git a/KvizObserver/pom.xml b/KvizObserver/pom.xml
index 5fbe70a..b6fbe3e 100644
--- a/KvizObserver/pom.xml
+++ b/KvizObserver/pom.xml
@@ -80,8 +80,8 @@ The project was originally started in December 2002 by Arthur van Hoff at Strang
 				<artifactId>maven-compiler-plugin</artifactId>
 				<version>3.3</version>
 				<configuration>
-					<source>${jvm.version}</source>
-					<target>${jvm.version}</target>
+					<source>1.9</source>
+					<target>1.9</target>
 				</configuration>
 			</plugin>
 			<plugin>
diff --git a/KvizObserver/src/main/java/Main.java b/KvizObserver/src/main/java/Main.java
index 0d0612f..46b73f5 100644
--- a/KvizObserver/src/main/java/Main.java
+++ b/KvizObserver/src/main/java/Main.java
@@ -1,3 +1,6 @@
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -15,7 +18,8 @@ import javax.jmdns.JmDNS;
 import javax.jmdns.ServiceEvent;
 import javax.jmdns.ServiceInfo;
 import javax.jmdns.ServiceListener;
-import javax.swing.SwingWorker;
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
 
 import model.ServerModel;
 
@@ -42,6 +46,9 @@ public class Main {
     
     private static PrintWriter out = null;
 
+    private static JFrame frame;
+    private static JPanel mainPanel;
+    private static JPanel serverListPanel;
 
     private static class SampleListener implements ServiceListener {
         @Override
@@ -101,31 +108,58 @@ public class Main {
     }
 
     public static void main(String[] args) throws InterruptedException {
-        try {
-            servers = new ArrayList<ServerModel>();
 
-            threads = new ArrayList<Thread>();
-            
-            System.out.println("Set The ObserverName:");
-            Scanner s = new Scanner(System.in);
-            CLIENT_NAME = s.nextLine();
+        servers = new ArrayList<ServerModel>();
+        threads = new ArrayList<Thread>();
+
+        frame = new JFrame("KvizObserver");
+        mainPanel = new JPanel(new CardLayout());
+
+        JPanel observerNamePanel = new JPanel();
+        observerNamePanel.setLayout(new BoxLayout(observerNamePanel, BoxLayout.Y_AXIS));
+        JLabel observerNameLabel = new JLabel("Observer name:");
+        observerNamePanel.add(observerNameLabel);
+        JTextField observerNameTextField = new JTextField();
+        observerNamePanel.add(observerNameTextField);
+        JButton startSearchingButton = new JButton("Start searching servers");
+        startSearchingButton.addActionListener(new StartSearchingButtonListener(observerNameTextField));
+        observerNamePanel.add(startSearchingButton);
+        mainPanel.add(observerNamePanel, "OBSERVER_NAME_PANEL");
+
+        serverListPanel = new JPanel();
+        serverListPanel.setLayout(new BoxLayout(serverListPanel, BoxLayout.Y_AXIS));
+        mainPanel.add(serverListPanel, "SERVER_LIST_PANEL");
+
+        frame.add(mainPanel, BorderLayout.NORTH);
+        frame.setPreferredSize(new Dimension(300, 200));
+        frame.pack();
+        frame.setLocationRelativeTo(null);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.setVisible(true);
+
+        //try {
+
+
+            //System.out.println("Set The ObserverName:");
+            //Scanner s = new Scanner(System.in);
+            //CLIENT_NAME = s.nextLine();
 
             
             // Create a JmDNS instance
-            JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost());
+            //JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost());
             
             
 
             // Add a service listener
-            jmdns.addServiceListener("_http._tcp.local.", new SampleListener());
+            //jmdns.addServiceListener("_http._tcp.local.", new SampleListener());
 
             // Wait a bit
-            Thread.sleep(3000);
+            //Thread.sleep(3000);
             
-            String msg = "";
+            //String msg = "";
             
             
-            s = new Scanner(System.in);
+            /*Scanner s = new Scanner(System.in);
             System.out.println("Type 'Connect' to Connect:");
             msg = s.nextLine();
             if(msg.equals("Connect"))
@@ -137,18 +171,95 @@ public class Main {
             if(msg.equals("Disconnect"))
             {
                 onDisconnect();
-            }
-        } catch (UnknownHostException e) {
+            }*/
+        /*} catch (UnknownHostException e) {
             System.out.println(e.getMessage());
         } catch (IOException e) {
-            System.out.println(e.getMessage());
-        }
+            System.out.println(e.getMessage());*/
+        //}
         
+    }
 
-            
-        
+    final static class StartSearchingButtonListener implements ActionListener {
+        private JTextField tf;
+        public StartSearchingButtonListener(JTextField tf) {
+            this.tf = tf;
+        }
+        public void actionPerformed(ActionEvent ae) {
+            CLIENT_NAME = tf.getText();
+            CardLayout cl = (CardLayout)(mainPanel.getLayout());
+            cl.show(mainPanel, "SERVER_LIST_PANEL");
+
+            try {
+                // Create a JmDNS instance
+                JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost());
+
+                // Add a service listener
+                jmdns.addServiceListener("_http._tcp.local.", new SampleListener());
+            } catch (UnknownHostException e) {
+                System.out.println(e.getMessage());
+            } catch (IOException e) {
+                System.out.println(e.getMessage());
+            }
+
+        }
     }
-    
+
+    private static void addServerToServerListPanel(ServerModel serverModel) {
+        JPanel serverPanel = new JPanel();
+        serverPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+        JLabel serverName = new JLabel(serverModel.getHostName());
+        serverPanel.add(serverName);
+        serverPanel.add(Box.createRigidArea(new Dimension(5,0)));
+        JButton connectButton = new JButton("Connect");
+        serverPanel.add(connectButton);
+        serverPanel.add(Box.createRigidArea(new Dimension(5,0)));
+        JButton disconnectButton = new JButton("Disconnect");
+        disconnectButton.setEnabled(false);
+        serverPanel.add(disconnectButton);
+        connectButton.addActionListener(new ConnectButtonListener(serverModel, connectButton, disconnectButton));
+        disconnectButton.addActionListener(new DisconnectButtonListener(serverModel, connectButton, disconnectButton));
+        serverListPanel.add(serverPanel);
+        serverListPanel.revalidate();
+        serverListPanel.repaint();
+    }
+
+    final static class ConnectButtonListener implements ActionListener {
+        private ServerModel sm;
+        private JButton connectButton;
+        private JButton disconnectButton;
+
+        public ConnectButtonListener(ServerModel sm, JButton connectButton, JButton disconnectButton) {
+            this.sm = sm;
+            this.connectButton = connectButton;
+            this.disconnectButton = disconnectButton;
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            onConnect(servers.indexOf(sm));
+            connectButton.setEnabled(false);
+            disconnectButton.setEnabled(true);
+        }
+    }
+
+    final static class DisconnectButtonListener implements ActionListener {
+        private ServerModel sm;
+        private JButton connectButton;
+        private JButton disconnectButton;
+
+        public DisconnectButtonListener(ServerModel sm, JButton connectButton, JButton disconnectButton) {
+            this.sm = sm;
+            this.connectButton = connectButton;
+            this.disconnectButton = disconnectButton;
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            onDisconnect();
+            disconnectButton.setEnabled(false);
+            connectButton.setEnabled(true);
+        }
+    }
+
     class CommunicationThread implements Runnable {
 
         private ServerModel serverModel;
@@ -191,6 +302,7 @@ public class Main {
                                     serverModel.setHostName(params[1]);
                                     //Kiirni
                                     System.out.println("Server Add: " + serverModel.getHostName());
+                                    addServerToServerListPanel(serverModel);
                                     //
                                     break;
                                 case "ConnectionLost":
-- 
GitLab