diff --git a/README.md b/README.md
index c375a34..d371573 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,20 @@
```App.java``` の mainメソッドで、最初に起動するサーバを指定しています。
+ソースコードを修正して再コンパイルすると、最初に起動するサーバの設定を変更できます。
+
+
+最初に起動するサーバ群のカスタマイズ(簡易的な方法)
+------------------------------------------------------
+
+```mvn compile assembly:single``` を実行すると、```target``` フォルダに ```ServerTester-1.0-JARfile.jar``` ができます。
+
+このファイルを指定して ```java -jar ServerTester-1.0-JARfile.jar``` として起動することもできます。(targetフォルダにcdしておくか、JARファイルをServerTester フォルダに移動しておく必要があります。)
+
+また、引数に ```Web``` や ```ThreadEcho``` のように、サーバ名からServerを除いた文字列を指定すると、引数で指定したサーバを最初に起動します。
+
+例: ```java -jar ServerTester-1.0-JARfile.jar Web Echo Time SimpleWebSocket```
+
注意
-------------------------
diff --git a/pom.xml b/pom.xml
index 1b9d17a..56d0f8d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,7 +68,7 @@
jar-with-dependencies
- ${project.artifactId}-${project.version}-launcher
+ ${project.artifactId}-${project.version}-JARfile
false
diff --git a/src/main/java/info/istlab/ServerTester/App.java b/src/main/java/info/istlab/ServerTester/App.java
index 458ab5d..39f5f25 100644
--- a/src/main/java/info/istlab/ServerTester/App.java
+++ b/src/main/java/info/istlab/ServerTester/App.java
@@ -1,5 +1,7 @@
package info.istlab.ServerTester;
+import java.lang.reflect.InvocationTargetException;
+
public class App {
public static boolean isWindows;
public static String userhome;
@@ -20,29 +22,49 @@
Host myhost = new Host();
- WebServer web = new WebServer(8081);
- myhost.addPanel(new ServerPanel(web, myhost));
+ if (args.length > 0) { // 実行時の引数で Web とか Time とか指定された場合、動的にサーバを生成
+ for (String arg : args) {
+ System.out.println("実行時の引数で " + arg+" が指定されました。"+arg+"Server を起動します。");
+ try {
+ Object serv = Class.forName("info.istlab.ServerTester." + arg+"Server").getConstructor(String.class)
+ .newInstance("0.0.0.0");
+ if (serv instanceof SimpleWebSocketServer) {
+ myhost.addPanel(new ServerPanel4WS((SimpleWebSocketServer) serv, myhost));
+ } else {
+ myhost.addPanel(new ServerPanel((Server) serv, myhost));
+ }
+ } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
+ | InvocationTargetException | NoSuchMethodException | SecurityException
+ | ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+ } else {
- WebServer web2 = new WebServer(8081, "0.0.0.0");
- myhost.addPanel(new ServerPanel(web2, myhost));
+ WebServer web = new WebServer(8081);
+ myhost.addPanel(new ServerPanel(web, myhost));
- TimeServer time = new TimeServer(10123, "127.0.0.1");
- myhost.addPanel(new ServerPanel(time, myhost));
+ WebServer web2 = new WebServer(8081, "0.0.0.0");
+ myhost.addPanel(new ServerPanel(web2, myhost));
- ThreadTimeServer ttime = new ThreadTimeServer(11123);
- myhost.addPanel(new ServerPanel(ttime, myhost));
+ TimeServer time = new TimeServer(10123, "127.0.0.1");
+ myhost.addPanel(new ServerPanel(time, myhost));
- EchoServer echo = new EchoServer(10008, "127.0.0.1");
- myhost.addPanel(new ServerPanel(echo, myhost));
+ ThreadTimeServer ttime = new ThreadTimeServer(11123);
+ myhost.addPanel(new ServerPanel(ttime, myhost));
- ThreadEchoServer techo = new ThreadEchoServer(11008);
- myhost.addPanel(new ServerPanel(techo, myhost));
+ EchoServer echo = new EchoServer(10008, "127.0.0.1");
+ myhost.addPanel(new ServerPanel(echo, myhost));
- WhiteBoardServer wb = new WhiteBoardServer(11111, "0.0.0.0");
- myhost.addPanel(new ServerPanel(wb, myhost));
+ ThreadEchoServer techo = new ThreadEchoServer(11008);
+ myhost.addPanel(new ServerPanel(techo, myhost));
- SimpleWebSocketServer ws = new SimpleWebSocketServer(8887, "0.0.0.0");
- myhost.addPanel(new ServerPanel4WS(ws, myhost));
+ WhiteBoardServer wb = new WhiteBoardServer(11111, "0.0.0.0");
+ myhost.addPanel(new ServerPanel(wb, myhost));
+
+ SimpleWebSocketServer ws = new SimpleWebSocketServer(8887, "0.0.0.0");
+ myhost.addPanel(new ServerPanel4WS(ws, myhost));
+ }
// 近隣のホスト情報を集めるUDPサーバ
myhost.setUdpServer(new UDPServer(54320));
diff --git a/src/main/java/info/istlab/ServerTester/EchoServer.java b/src/main/java/info/istlab/ServerTester/EchoServer.java
index bc11d65..a91d1ab 100644
--- a/src/main/java/info/istlab/ServerTester/EchoServer.java
+++ b/src/main/java/info/istlab/ServerTester/EchoServer.java
@@ -16,6 +16,10 @@
this(port, "127.0.0.1");
}
+ public EchoServer(String bindaddress) {
+ this(10008, bindaddress);
+ }
+
public EchoServer(int port, String bindaddress) {
super(port, bindaddress);
start();
diff --git a/src/main/java/info/istlab/ServerTester/JExecutor.java b/src/main/java/info/istlab/ServerTester/JExecutor.java
index a60fcbd..45bc16d 100644
--- a/src/main/java/info/istlab/ServerTester/JExecutor.java
+++ b/src/main/java/info/istlab/ServerTester/JExecutor.java
@@ -55,7 +55,7 @@
// JARで起動した場合は、クラスパスでJARファイルを指定する
if (App.isJAR) {
comlist.add("-cp");
- comlist.add(App.userdir + "/ServerTester-1.0-launcher.jar");
+ comlist.add(App.userdir + "/ServerTester-1.0-JARfile.jar");
}
comlist.add(pkgname + "." + javafname);
// コマンドラインオプションをtrimした結果が空文字列なら追加しない
diff --git a/src/main/java/info/istlab/ServerTester/Server.java b/src/main/java/info/istlab/ServerTester/Server.java
index c94f0cf..3e995c3 100644
--- a/src/main/java/info/istlab/ServerTester/Server.java
+++ b/src/main/java/info/istlab/ServerTester/Server.java
@@ -19,7 +19,13 @@
if (args.length == 0) {
Class.forName("info.istlab.ServerTester." + className).getConstructor().newInstance();
} else if (args.length == 1) {
- Class.forName("info.istlab.ServerTester." + className).getConstructor(int.class).newInstance(Integer.parseInt(args[0]));
+ if (isNumeric(args[0])) { // 数値の場合はポート番号として扱う
+ Class.forName("info.istlab.ServerTester." + className).getConstructor(int.class)
+ .newInstance(Integer.parseInt(args[0]));
+ } else { // 数値でない場合はバインドアドレスとして扱う
+ Class.forName("info.istlab.ServerTester." + className).getConstructor(String.class)
+ .newInstance(args[0]);
+ }
} else if (args.length == 2) {
Class.forName("info.istlab.ServerTester." + className)
.getConstructor(int.class, String.class).newInstance(Integer.parseInt(args[0]), args[1]);
@@ -31,6 +37,18 @@
}
}
+ public static boolean isNumeric(String str) {
+ if (str == null || str.isEmpty()) {
+ return false;
+ }
+ try {
+ Integer.parseInt(str);
+ return true;
+ } catch (NumberFormatException e) {
+ return false;
+ }
+ }
+
public Server(int port, String bindaddress) {
expectedPort = port;
expectedAddress = bindaddress;
@@ -38,12 +56,16 @@
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress(bindaddress, port));
bindFailed = false;
- } catch (BindException bex){
+ } catch (BindException bex) {
bindFailed = true;
- JOptionPane.showMessageDialog(Host.mainhost, getClass().getName()+" 起動時に、サーバソケットのバインドに失敗しました。\n\nポート "+expectedPort+" とバインドアドレス "+expectedAddress+" の組み合わせは使用されています。\n既存のサービスを停止するか、ポート番号/バインドアドレスを変更してください。", "エラー", JOptionPane.ERROR_MESSAGE);
+ JOptionPane.showMessageDialog(Host.mainhost,
+ getClass().getName() + " 起動時に、サーバソケットのバインドに失敗しました。\n\nポート " + expectedPort + " とバインドアドレス "
+ + expectedAddress + " の組み合わせは使用されています。\n既存のサービスを停止するか、ポート番号/バインドアドレスを変更してください。",
+ "エラー", JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
System.err.println(e);
- // System.err.println("バインド失敗。ポート番号 " + port + " (Bind-address: " + bindaddress + " 向け) がすでにつかわれているようです");
+ // System.err.println("バインド失敗。ポート番号 " + port + " (Bind-address: " + bindaddress
+ // + " 向け) がすでにつかわれているようです");
// System.err.println("ポート番号またはバインドアドレスを変更してください。");
// System.err.println("またはコマンド killall java を実行して全てのJavaプロセスを終了してください。");
}
@@ -101,9 +123,12 @@
serverSocket.bind(new InetSocketAddress(expectedAddress, expectedPort));
bindFailed = false;
start();
- } catch (BindException bex){
+ } catch (BindException bex) {
bindFailed = true;
- JOptionPane.showMessageDialog(Host.mainhost, getClass().getName()+" 起動時に、サーバソケットのバインド失敗しました。\n\nポート "+expectedPort+" とバインドアドレス "+expectedAddress+" の組み合わせは使用されています。\n既存のサービスを停止するか、ポート番号/バインドアドレスを変更してください。", "エラー", JOptionPane.ERROR_MESSAGE);
+ JOptionPane.showMessageDialog(Host.mainhost,
+ getClass().getName() + " 起動時に、サーバソケットのバインド失敗しました。\n\nポート " + expectedPort + " とバインドアドレス "
+ + expectedAddress + " の組み合わせは使用されています。\n既存のサービスを停止するか、ポート番号/バインドアドレスを変更してください。",
+ "エラー", JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/src/main/java/info/istlab/ServerTester/SimpleWebSocketServer.java b/src/main/java/info/istlab/ServerTester/SimpleWebSocketServer.java
index e8c2bb4..a0f59d5 100644
--- a/src/main/java/info/istlab/ServerTester/SimpleWebSocketServer.java
+++ b/src/main/java/info/istlab/ServerTester/SimpleWebSocketServer.java
@@ -27,6 +27,9 @@
public SimpleWebSocketServer(int port) {
this(port, "0.0.0.0");
}
+ public SimpleWebSocketServer(String bindaddress) {
+ this(8887, bindaddress);
+ }
public SimpleWebSocketServer(int port, String bindaddress) {
super(new InetSocketAddress(bindaddress, port));
diff --git a/src/main/java/info/istlab/ServerTester/ThreadEchoServer.java b/src/main/java/info/istlab/ServerTester/ThreadEchoServer.java
index b9caf59..a43fa60 100644
--- a/src/main/java/info/istlab/ServerTester/ThreadEchoServer.java
+++ b/src/main/java/info/istlab/ServerTester/ThreadEchoServer.java
@@ -14,6 +14,9 @@
public ThreadEchoServer(int port) {
this(port, "127.0.0.1");
}
+ public ThreadEchoServer(String bindaddress) {
+ this(11008, bindaddress);
+ }
public ThreadEchoServer(int port, String bindaddress) {
super(port, bindaddress);
diff --git a/src/main/java/info/istlab/ServerTester/ThreadTimeServer.java b/src/main/java/info/istlab/ServerTester/ThreadTimeServer.java
index c805845..7dc1f94 100644
--- a/src/main/java/info/istlab/ServerTester/ThreadTimeServer.java
+++ b/src/main/java/info/istlab/ServerTester/ThreadTimeServer.java
@@ -14,6 +14,9 @@
public ThreadTimeServer(int port) {
this(port, "127.0.0.1");
}
+ public ThreadTimeServer(String address) {
+ this(11123, address);
+ }
public ThreadTimeServer(int port, String address) {
super(port, address);
start();
diff --git a/src/main/java/info/istlab/ServerTester/TimeServer.java b/src/main/java/info/istlab/ServerTester/TimeServer.java
index 186264c..83b766c 100644
--- a/src/main/java/info/istlab/ServerTester/TimeServer.java
+++ b/src/main/java/info/istlab/ServerTester/TimeServer.java
@@ -14,6 +14,9 @@
public TimeServer(int port) {
this(port, "127.0.0.1");
}
+ public TimeServer(String bindaddress) {
+ this(10123, bindaddress);
+ }
public TimeServer(int port, String bindaddress) {
super(port, bindaddress);
start();
diff --git a/src/main/java/info/istlab/ServerTester/WebServer.java b/src/main/java/info/istlab/ServerTester/WebServer.java
index 127e6dd..23d91c8 100644
--- a/src/main/java/info/istlab/ServerTester/WebServer.java
+++ b/src/main/java/info/istlab/ServerTester/WebServer.java
@@ -15,12 +15,15 @@
public class WebServer extends Server {
public WebServer() {
- this(80, "127.0.0.1");
+ this(8081, "127.0.0.1");
}
public WebServer(int port) {
this(port, "127.0.0.1");
}
+ public WebServer(String bindaddress) {
+ this(8081, bindaddress);
+ }
public WebServer(int port, String bindaddress) {
super(port, bindaddress);
diff --git a/src/main/java/info/istlab/ServerTester/WhiteBoardServer.java b/src/main/java/info/istlab/ServerTester/WhiteBoardServer.java
index 2aec809..cb1d272 100644
--- a/src/main/java/info/istlab/ServerTester/WhiteBoardServer.java
+++ b/src/main/java/info/istlab/ServerTester/WhiteBoardServer.java
@@ -19,6 +19,9 @@
public WhiteBoardServer(int port) {
this(port, "127.0.0.1");
}
+ public WhiteBoardServer(String address) {
+ this(11111, address);
+ }
public WhiteBoardServer(int port, String address) {
super(port, address);