diff --git a/.vscode/settings.json b/.vscode/settings.json
index e0f15db..317e419 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,10 @@
{
- "java.configuration.updateBuildConfiguration": "automatic"
+ "java.configuration.updateBuildConfiguration": "automatic",
+ "java.completion.filteredTypes": [
+ "com.sun.*",
+ "sun.*",
+ "jdk.*",
+ "org.graalvm.*",
+ "io.micrometer.shaded.*"
+ ]
}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 0db8967..f70b6b1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,12 @@
3.8.1
test
+
+
diff --git a/src/main/java/info/istlab/ServerTester/App.java b/src/main/java/info/istlab/ServerTester/App.java
index c290022..fbb6e19 100644
--- a/src/main/java/info/istlab/ServerTester/App.java
+++ b/src/main/java/info/istlab/ServerTester/App.java
@@ -34,6 +34,9 @@
EchoServer echo = new EchoServer(10008);
myhost.addPanel(new ServerPanel(echo));
+
+ WhiteBoardServer wb = new WhiteBoardServer(11111);
+ myhost.addPanel(new ServerPanel(wb));
}
}
diff --git a/src/main/java/info/istlab/ServerTester/Server.java b/src/main/java/info/istlab/ServerTester/Server.java
index 481686d..d85c5fe 100644
--- a/src/main/java/info/istlab/ServerTester/Server.java
+++ b/src/main/java/info/istlab/ServerTester/Server.java
@@ -22,7 +22,7 @@
System.err.println("ポート番号またはバインドアドレスを変更してください。");
System.err.println("またはコマンド killall java を実行して全てのJavaプロセスを終了してください。");
}
- System.out.println("Server [" + bindaddress + ":" + port + "] started.");
+ System.out.println(getClass().getName()+" [" + bindaddress + ":" + port + "] started.");
}
public void handleRequest() {
diff --git a/src/main/java/info/istlab/ServerTester/ServerPanel.java b/src/main/java/info/istlab/ServerTester/ServerPanel.java
index bdf6189..2e5caeb 100644
--- a/src/main/java/info/istlab/ServerTester/ServerPanel.java
+++ b/src/main/java/info/istlab/ServerTester/ServerPanel.java
@@ -59,6 +59,9 @@
} else if (name.startsWith("Time") || name.startsWith("ThreadTime")) {
new JExecutor("TimeClient", server.getPort() + " " + server.getBindAddress());
// new TimeClient(server.getPort(), server.getBindAddress());
+ } else if (name.startsWith("WhiteBoard")) {
+ new JExecutor("WhiteBoardClient", server.getPort() + " " + server.getBindAddress());
+ // new WhiteBoardClient(server.getPort(), server.getBindAddress());
}
});
thread = new Thread(this);
diff --git a/src/main/java/info/istlab/ServerTester/WhiteBoardClient.java b/src/main/java/info/istlab/ServerTester/WhiteBoardClient.java
new file mode 100644
index 0000000..3bf73cd
--- /dev/null
+++ b/src/main/java/info/istlab/ServerTester/WhiteBoardClient.java
@@ -0,0 +1,174 @@
+package info.istlab.ServerTester;
+
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.util.ArrayList;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+public class WhiteBoardClient extends JPanel implements MouseListener, MouseMotionListener, Runnable {
+ private static final long serialVersionUID = 1L;
+ private static final int PORT = 11111;
+ private static final String ADDRESS = "127.0.0.1";
+ JFrame frame;
+ ArrayList tmpStroke = new ArrayList();
+ ArrayList points = new ArrayList();
+ Socket socket = null;
+ BufferedReader reader = null;
+ PrintWriter writer = null;
+ public WhiteBoardClient(int port, String address) {
+ address = address.replace("/", "");
+
+ // 指定のポートに対して,ソケットを作成します
+ // オブジェクトinstrを作り,データ読み出しを準備します
+ try {
+ socket = new Socket(address, port);
+ reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ writer = new PrintWriter(socket.getOutputStream(), true);
+ } catch (Exception e) {
+ System.err.println("サーバ [" + address + ":" + port + "] に接続できませんでした");
+ System.exit(1); // 異常終了(エラーで終了)なら1
+ }
+
+ addMouseListener(this);
+ addMouseMotionListener(this);
+ frame = new JFrame("WhiteBoard");
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setSize(800, 600);
+ frame.add(this);
+ frame.setVisible(true);
+
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ tmpStroke.add(e.getPoint());
+ repaint();
+ }
+
+ @Override
+ public void mouseMoved(MouseEvent e) {
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ tmpStroke = new ArrayList();
+ tmpStroke.add(e.getPoint());
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ tmpStroke.add(e.getPoint());
+ int[][] pts = new int[tmpStroke.size()][2];
+ for (int i = 0; i < tmpStroke.size(); i++) {
+ pts[i][0] = tmpStroke.get(i).x;
+ pts[i][1] = tmpStroke.get(i).y;
+ }
+ String msg = MyJSON.toJSON(pts);
+ points.add(msg);
+ writer.println(msg);
+ repaint();
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+
+ public void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ for (String point : points) {
+ int[][] points = MyJSON.fromJSON(point);
+ for (int[] p : points) {
+ int x = p[0];
+ int y = p[1];
+ g.fillOval(x, y, 5, 5);
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ // if (args.length < 2) {
+ // System.err.println("Usage: java WhiteBoardClient ");
+ // System.exit(1);
+ // }
+ // int port = Integer.parseInt(args[0]);
+ // String address = args[1];
+ new WhiteBoardClient(PORT, ADDRESS);
+ }
+
+ @Override
+ public void run() {
+ // データを受け取る
+ // データの終了まで,以下のループを繰り返します
+ String line = null;
+ try {
+ while ((line = reader.readLine()) != null) {
+ System.out.println(line);
+ points.add(line);
+ }
+ repaint();
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+ // コネクションを閉じます
+ try {
+ reader.close();
+ } catch (Exception e) {
+ // ネットワーククローズ失敗です
+ System.err.println("ネットワークのエラーです");
+ System.exit(1);
+ }
+ }
+}
+
+class MyJSON {
+ // convert int[][] to JSON
+ public static String toJSON(int[][] points) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("[");
+ for (int i = 0; i < points.length; i++) {
+ sb.append("[");
+ sb.append(points[i][0]);
+ sb.append(",");
+ sb.append(points[i][1]);
+ sb.append("]");
+ if (i < points.length - 1) {
+ sb.append(",");
+ }
+ }
+ return sb.toString();
+ }
+
+ // convert JSON to int[][]
+ public static int[][] fromJSON(String json) {
+ System.out.println(json);
+ json = json.substring(2, json.length() - 1).replaceAll("\\],\\[","_");
+ System.out.println(json);
+ String[] points = json.split("_");
+ int[][] pts = new int[points.length][2];
+ for (int i = 0; i < points.length; i++) {
+ System.out.println(points[i]);
+ String[] xy = points[i].replaceAll("\\[","").split(",");
+ pts[i][0] = Integer.parseInt(xy[0]);
+ pts[i][1] = Integer.parseInt(xy[1]);
+ }
+ return pts;
+ }
+}
diff --git a/src/main/java/info/istlab/ServerTester/WhiteBoardServer.java b/src/main/java/info/istlab/ServerTester/WhiteBoardServer.java
new file mode 100644
index 0000000..6dcd965
--- /dev/null
+++ b/src/main/java/info/istlab/ServerTester/WhiteBoardServer.java
@@ -0,0 +1,78 @@
+package info.istlab.ServerTester;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.net.Socket;
+import java.util.ArrayList;
+
+public class WhiteBoardServer extends Server {
+ public ArrayList points = new ArrayList();
+ public ArrayList handlers = new ArrayList();
+ public WhiteBoardServer() {
+ this(11111, "127.0.0.1");
+ }
+ public WhiteBoardServer(int port) {
+ this(port, "127.0.0.1");
+ }
+
+ public WhiteBoardServer(int port, String address) {
+ super(port, address);
+ start();
+ }
+
+ public void handleRequest() {
+ if (!serverSocket.isBound()) {
+ try {
+ serverSocket.close();
+ } catch (IOException e) {
+ }
+ return;
+ }
+ try {
+ Socket socket = serverSocket.accept();
+ RequestHandler4WB handler = new RequestHandler4WB(this, socket);
+ handlers.add(handler);
+ Thread t = new Thread(handler);
+ t.start();
+ } catch (IOException e) {
+ }
+ }
+
+}
+
+class RequestHandler4WB implements Runnable {
+ private WhiteBoardServer server;
+ private Socket socket;
+
+ public RequestHandler4WB(WhiteBoardServer server, Socket socket) {
+ this.server = server;
+ this.socket = socket;
+ }
+
+ @Override
+ public void run() {
+ String line = null;
+ BufferedReader br = null;
+ PrintStream os = null;
+
+ System.out.println("accept");
+ try {
+ br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ os = new PrintStream(socket.getOutputStream());
+ // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す
+ while ((line = br.readLine()) != null) {
+ System.out.println("(Server received) " + line);
+ os.println(line);
+ }
+ } catch (IOException e) {
+ // os.close();
+ System.out.println(e);
+ } finally {
+ System.out.println("disconnected " + socket.toString());
+ }
+
+
+ }
+}
\ No newline at end of file