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);