diff --git a/src/main/java/com/example/cosmos_serversb/JerseyConfig.java b/src/main/java/com/example/cosmos_serversb/JerseyConfig.java index eb487d2..3ebeb8a 100644 --- a/src/main/java/com/example/cosmos_serversb/JerseyConfig.java +++ b/src/main/java/com/example/cosmos_serversb/JerseyConfig.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Component; @Component -@ApplicationPath("/cosmos") +@ApplicationPath("/rest") public class JerseyConfig extends ResourceConfig { public JerseyConfig() { packages("com.example.cosmos_serversb.resources"); diff --git a/src/main/java/com/example/cosmos_serversb/resources/WebSocket.java b/src/main/java/com/example/cosmos_serversb/resources/WebSocket.java index acf9183..18e4659 100644 --- a/src/main/java/com/example/cosmos_serversb/resources/WebSocket.java +++ b/src/main/java/com/example/cosmos_serversb/resources/WebSocket.java @@ -1,20 +1,11 @@ package com.example.cosmos_serversb.resources; -import com.example.common.LogUtils; import org.springframework.stereotype.Component; -import javax.websocket.*; import javax.websocket.server.ServerEndpoint; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import java.io.IOException; -import java.util.Queue; +import java.util.HashSet; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CopyOnWriteArraySet; -import org.springframework.stereotype.Component; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; @@ -23,8 +14,8 @@ @Component @ServerEndpoint("/websocket") public class WebSocket extends TextWebSocketHandler { - private static final Queue sessions = new ConcurrentLinkedQueue<>(); - private ConcurrentHashMap> roomSessionPool = new ConcurrentHashMap<>(); + private static final Set sessions = new HashSet<>(); + //private ConcurrentHashMap> roomSessionPool = new ConcurrentHashMap<>(); public WebSocket(){ @@ -32,97 +23,48 @@ @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { - - String roomName = session.getUri().getQuery(); - - roomSessionPool.compute(roomName, (key, sessions) -> { - - if (sessions == null) { - sessions = new CopyOnWriteArraySet<>(); - } - sessions.add(session); - - return sessions; - }); + sessions.add(session); + System.out.println("session確立しました"); +// String roomName = session.getUri().getQuery(); +// roomSessionPool.compute(roomName, (key, sessions) -> { +// if (sessions == null) { +// sessions = new CopyOnWriteArraySet<>(); +// } +// sessions.add(session); +// return sessions; +// }); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { - - String roomName = session.getUri().getQuery(); - - for (WebSocketSession roomSession : roomSessionPool.get(roomName)) { - roomSession.sendMessage(message); + String strMessage = message.getPayload(); + System.out.println("message( " + strMessage + " )を受信しました"); + session.sendMessage(message); + for(WebSocketSession roomsSession : sessions){ + roomsSession.sendMessage(message); } +// String roomName = session.getUri().getQuery(); +// for (WebSocketSession roomSession : roomSessionPool.get(roomName)) { +// roomSession.sendMessage(message); +// } } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { - - String roomName = session.getUri().getQuery(); - - roomSessionPool.compute(roomName, (key, sessions) -> { - - sessions.remove(session); - if (sessions.isEmpty()) { - // 1件もない場合はMapからクリア - sessions = null; - } - - return sessions; - }); - } - - - @GET - public String serverCheck() { - LogUtils.info("サーバーをチェックしています。"); - return "{\"ServerStatus\":\"200\"}"; - } - @OnOpen - public void onOpen(Session session) { - /* セッション確立時の処理 */ - sessions.add(session); - System.out.println("WebSocketセッション確立"); - } - - @OnMessage - public String onMessage(String message) { - /* メッセージ受信時の処理 */ - System.out.println("WebSocket受信:" + message); - return "正常にメッセージを受信しました。"; - } - -// @OnMessage -// public void onMessage(String message, Session session) throws IOException { -// //session.getBasicRemote().sendText(message); //メッセージの送信が完了するまで待機 -// session.getAsyncRemote().sendText(message); //非同期で送信 -// } - - @OnError - public void onError(Throwable th) { - /* エラー発生時の処理 */ - System.out.println("WebSocketエラー:" + th.getMessage()); - } - - @OnClose - public void onClose(Session session) { - /* セッション解放時の処理 */ sessions.remove(session); - System.out.println("WebSocketセッションを削除"); + System.out.println("session閉じました"); +// String roomName = session.getUri().getQuery(); +// roomSessionPool.compute(roomName, (key, sessions) -> { +// sessions.remove(session); +// if (sessions.isEmpty()) { +// // 1件もない場合はMapからクリア +// sessions = null; +// } +// return sessions; +// }); } - public static void broadcast() { - sessions.forEach(session -> { - session.getAsyncRemote().sendText("Broadcast : "); - }); - } -} -//@ServerEndpoint(value = "/websocket") -//public class WebSocket { -// private static final Queue sessions = new ConcurrentLinkedQueue<>(); -// // @GET // public String serverCheck() { // LogUtils.info("サーバーをチェックしています。"); @@ -166,4 +108,4 @@ // session.getAsyncRemote().sendText("Broadcast : "); // }); // } -//} +} diff --git a/src/test/java/WebSocketTest/SampleClient.java b/src/test/java/WebSocketTest/SampleClient.java index 0b07650..1bd18d4 100644 --- a/src/test/java/WebSocketTest/SampleClient.java +++ b/src/test/java/WebSocketTest/SampleClient.java @@ -17,93 +17,94 @@ import okhttp3.WebSocketListener; import okio.ByteString; -//public class SampleClient { -// public static void main(String[] args) { -// -// WebSocket ws; -// final Request request = new Request.Builder() -//// .url("http://localhost:8080/WebSocketSampleServer") -// .url("http://localhost:8080/websocket") -// .build(); -// final OkHttpClient client = new OkHttpClient.Builder() -// .build(); -// final WebSocketListener listener = new WebSocketListener() { -// @Override -// // 接続 -// public void onOpen(WebSocket webSocket, Response response) { -// } -// -// @Override -// //Serverからのメッセージの受信 -// public void onMessage(WebSocket webSocket, final String text) { -// } -// -// @Override -// public void onMessage(WebSocket webSocket, ByteString bytes) { -// System.out.println("MESSAGE: " + bytes.hex()); -// } -// -// @Override -// public void onClosing(WebSocket webSocket, int code, String reason) { -// webSocket.close(1000, null); -// System.out.println("CLOSE: " + code + " " + reason); -// } -// -// @Override -// //Serverの切断 -// public void onClosed(WebSocket webSocket, int code, String reason) { -// } -// -// public void onFailure(WebSocket webSocket, Throwable t, Response response) { -// t.printStackTrace(); -// } -// }; -// -// ws = client.newWebSocket(request, listener); -// client.dispatcher().executorService().shutdown(); -// } -//} - -@ClientEndpoint public class SampleClient { + public static void main(String[] args) { - public SampleClient() { - super(); - } + WebSocket ws; + final Request request = new Request.Builder() +// .url("http://localhost:8080/WebSocketSampleServer") + .url("http://localhost:8080/websocket") + .build(); + final OkHttpClient client = new OkHttpClient.Builder() + .build(); + final WebSocketListener listener = new WebSocketListener() { + @Override + // 接続 + public void onOpen(WebSocket webSocket, Response response) { + } - @OnOpen - public void onOpen(Session session) { - /* セッション確立時の処理 */ - System.out.println("WebSocketセッション確立"); - } + @Override + //Serverからのメッセージの受信 + public void onMessage(WebSocket webSocket, final String text) { + } - @OnMessage - public void onMessage(String message) { - /* メッセージ受信時の処理 */ - System.out.println("WebSocket受信:"); - } + @Override + public void onMessage(WebSocket webSocket, ByteString bytes) { + System.out.println("MESSAGE: " + bytes.hex()); + } - @OnError - public void onError(Throwable th) { - /* エラー発生時の処理 */ - System.out.println("WebSocketエラー:" + th.getMessage()); - } + @Override + public void onClosing(WebSocket webSocket, int code, String reason) { + webSocket.close(1000, null); + System.out.println("CLOSE: " + code + " " + reason); + } - @OnClose - public void onClose(Session session) { - /* セッション解放時の処理 */ - System.out.println("WebSocketセッション確立"); - } + @Override + //Serverの切断 + public void onClosed(WebSocket webSocket, int code, String reason) { + } + public void onFailure(WebSocket webSocket, Throwable t, Response response) { + t.printStackTrace(); + } + }; - public static void main(String[] args) throws Exception { - // 初期化のためWebSocketコンテナのオブジェクトを取得する - WebSocketContainer container = ContainerProvider.getWebSocketContainer(); - // サーバー・エンドポイントのURI - URI uri = URI.create("ws://localhost:8080/websocket"); - // サーバー・エンドポイントとのセッションを確立する - Session session = container.connectToServer(new SampleClient(),uri); - // メッセージをサーバへ送る - session.getBasicRemote().sendText("Hello World!!"); + ws = client.newWebSocket(request, listener); + ws.send("Hello"); + client.dispatcher().executorService().shutdown(); } } + +//@ClientEndpoint +//public class SampleClient { +// +// public SampleClient() { +// super(); +// } +// +// @OnOpen +// public void onOpen(Session session) { +// /* セッション確立時の処理 */ +// System.out.println("WebSocketセッション確立"); +// } +// +// @OnMessage +// public void onMessage(String message) { +// /* メッセージ受信時の処理 */ +// System.out.println("WebSocket受信:"); +// } +// +// @OnError +// public void onError(Throwable th) { +// /* エラー発生時の処理 */ +// System.out.println("WebSocketエラー:" + th.getMessage()); +// } +// +// @OnClose +// public void onClose(Session session) { +// /* セッション解放時の処理 */ +// System.out.println("WebSocketセッション確立"); +// } +// +// +// public static void main(String[] args) throws Exception { +// // 初期化のためWebSocketコンテナのオブジェクトを取得する +// WebSocketContainer container = ContainerProvider.getWebSocketContainer(); +// // サーバー・エンドポイントのURI +// URI uri = URI.create("ws://localhost:8080/websocket"); +// // サーバー・エンドポイントとのセッションを確立する +// Session session = container.connectToServer(new SampleClient(),uri); +// // メッセージをサーバへ送る +// session.getBasicRemote().sendText("Hello World!!"); +// } +//}