diff --git a/.vscode/launch.json b/.vscode/launch.json index e881968..fd70916 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,6 +6,13 @@ "configurations": [ { "type": "java", + "name": "WebSocketServer", + "request": "launch", + "mainClass": "info.istlab.ServerTester.WebSocketServer", + "projectName": "KisoServerTester" + }, + { + "type": "java", "name": "App", "request": "launch", "mainClass": "info.istlab.ServerTester.App", diff --git a/pom.xml b/pom.xml index f70b6b1..d8345f0 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,5 @@ - 4.0.0 info.istlab.ServerTester @@ -32,9 +33,9 @@ @@ -79,4 +80,4 @@ - + \ No newline at end of file diff --git a/src/main/java/info/istlab/ServerTester/App.java b/src/main/java/info/istlab/ServerTester/App.java index ad8f13e..b1df7db 100644 --- a/src/main/java/info/istlab/ServerTester/App.java +++ b/src/main/java/info/istlab/ServerTester/App.java @@ -37,7 +37,5 @@ WhiteBoardServer wb = new WhiteBoardServer(11111, "0.0.0.0"); myhost.addPanel(new ServerPanel(wb, myhost)); - - new UDPServer().start(); } } diff --git a/src/main/java/info/istlab/ServerTester/Host.java b/src/main/java/info/istlab/ServerTester/Host.java index 6c4d322..6b0b48c 100644 --- a/src/main/java/info/istlab/ServerTester/Host.java +++ b/src/main/java/info/istlab/ServerTester/Host.java @@ -14,8 +14,10 @@ public static Host mainhost; public JPanel mainPanel; + public UDPServer server; + public Host() { - setTitle("Host"); + setTitle("サーバー管理ウィンドウ"); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); @@ -28,6 +30,8 @@ addPanel.setBorder(BorderFactory.createTitledBorder("Start New Server (Class, Port, Bind address)")); add(addPanel, BorderLayout.NORTH); mainhost = this; + + server = new UDPServer(); } private void setupMenu() { @@ -36,16 +40,27 @@ JMenu menu = new JMenu("Menu"); menuBar.add(menu); - JMenuItem sendItem = new JMenuItem("現在自ホストで起動しているサーバ情報をブロードキャストで送信"); + JMenu channel = new JMenu("班の番号を選択"); + menu.add(channel); + for(int i = 1; i <= 6; i++) { + JMenuItem item = new JMenuItem(String.valueOf(i)); + channel.add(item); + item.addActionListener(e -> { + System.out.println("班の番号: " + item.getText()); + server = new UDPServer(54320 + Integer.parseInt(item.getText())); // 54320 + 班の番号 のポート番号で待つ + }); + } + + JMenuItem sendItem = new JMenuItem("このホストのサーバ情報をブロードキャストで送信"); menu.add(sendItem); sendItem.addActionListener(e -> { - new UDPClient(mainPanel); + new UDPClient(mainPanel, server.port); }); JMenuItem showItem = new JMenuItem("近隣ホストのサーバ情報を表示"); menu.add(showItem); showItem.addActionListener(e -> { - UDPServer.instance.openWindow(); + server.openWindow(); }); menu.addSeparator(); diff --git a/src/main/java/info/istlab/ServerTester/RemoteHostsWindow.java b/src/main/java/info/istlab/ServerTester/RemoteHostsWindow.java index c973524..4244704 100644 --- a/src/main/java/info/istlab/ServerTester/RemoteHostsWindow.java +++ b/src/main/java/info/istlab/ServerTester/RemoteHostsWindow.java @@ -19,7 +19,7 @@ public RemoteHostsWindow(Hashtable receivedData) { JFrame frame = new JFrame(); - frame.setTitle("Remote Hosts"); + frame.setTitle("Remote Hosts (自動更新はしません)"); frame.setSize(300, 200); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); @@ -31,7 +31,7 @@ String value = receivedData.get(key); tabbedPane.add(key, new RemoteHostPanel(key, value)); } - + frame.setLocation(50,400); frame.pack(); frame.setVisible(true); } diff --git a/src/main/java/info/istlab/ServerTester/UDPClient.java b/src/main/java/info/istlab/ServerTester/UDPClient.java index 16384c0..90838b8 100644 --- a/src/main/java/info/istlab/ServerTester/UDPClient.java +++ b/src/main/java/info/istlab/ServerTester/UDPClient.java @@ -10,7 +10,7 @@ public class UDPClient { public static void main(String[] args) { } - public UDPClient(JPanel mainPanel) { + public UDPClient(JPanel mainPanel, int portnum) { // 情報収集 StringBuffer sb = new StringBuffer(); for(Component c: mainPanel.getComponents()){ @@ -35,7 +35,7 @@ // データグラムパケットを作成 DatagramPacket packet = new DatagramPacket( messageData, messageData.length, - serverAddress, 54321 + serverAddress, portnum ); // メッセージを送信 diff --git a/src/main/java/info/istlab/ServerTester/UDPServer.java b/src/main/java/info/istlab/ServerTester/UDPServer.java index 16dbaa0..0f4c659 100644 --- a/src/main/java/info/istlab/ServerTester/UDPServer.java +++ b/src/main/java/info/istlab/ServerTester/UDPServer.java @@ -5,10 +5,12 @@ import java.net.DatagramSocket; import java.util.Hashtable; +import javax.swing.JOptionPane; + public class UDPServer implements Runnable { - public static UDPServer instance; Thread thread; DatagramSocket socket = null; + public int port; // 受信したデータを IP アドレスをキーにして保存 Hashtable receivedData = new Hashtable(); @@ -18,19 +20,20 @@ } public UDPServer() { - this(54321); + this(54320); } - public UDPServer(int port) { + public UDPServer(int _port) { + port = _port; try { // サーバーソケットを指定されたポートで作成 socket = new DatagramSocket(port); - System.out.println("[UDP] UDPサーバーがポート"+port+"で待機中..."); + System.out.println("[UDP] 近隣ホスト情報を集めるUDPサーバーがポート"+port+"で待機中..."); } catch (Exception e) { e.printStackTrace(); } - instance = this; + start(); } public void start(){ if(thread == null){ @@ -74,6 +77,10 @@ } } public void openWindow(){ + if (receivedData.size() == 0) { + JOptionPane.showMessageDialog(Host.mainhost, "受信したデータがありません。", "受信データなし", JOptionPane.WARNING_MESSAGE); + return; + } new RemoteHostsWindow(receivedData); } }