diff --git a/build.gradle b/build.gradle index 94afc70..a090b25 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ compile("org.hibernate:hibernate-core:5.4.2.Final") compileOnly('org.projectlombok:lombok:1.16.10') providedCompile 'javax.websocket:javax.websocket-api:1.1' - implementation 'org.glassfish.tyrus:tyrus-container-grizzly-server:1.13.1' implementation 'com.squareup.okhttp3:okhttp:3.12.0' implementation 'org.springframework.boot:spring-boot-starter-websocket' + } diff --git a/src/main/java/com/example/cosmos_serversb/CosmosServerSbApplication.java b/src/main/java/com/example/cosmos_serversb/CosmosServerSbApplication.java index aaa3e30..8b0f80a 100644 --- a/src/main/java/com/example/cosmos_serversb/CosmosServerSbApplication.java +++ b/src/main/java/com/example/cosmos_serversb/CosmosServerSbApplication.java @@ -2,12 +2,15 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Configuration; + +import org.springframework.web.socket.config.annotation.EnableWebSocket; @SpringBootApplication +@Configuration +@EnableWebSocket public class CosmosServerSbApplication { - public static void main(String[] args) { SpringApplication.run(CosmosServerSbApplication.class, args); } - -} +} \ No newline at end of file diff --git a/src/main/java/com/example/cosmos_serversb/JerseyConfig.java b/src/main/java/com/example/cosmos_serversb/JerseyConfig.java index c3bf828..ef60a1c 100644 --- a/src/main/java/com/example/cosmos_serversb/JerseyConfig.java +++ b/src/main/java/com/example/cosmos_serversb/JerseyConfig.java @@ -1,14 +1,12 @@ package com.example.cosmos_serversb; - import javax.ws.rs.ApplicationPath; -import javax.ws.rs.Path; import org.glassfish.jersey.server.ResourceConfig; import org.springframework.stereotype.Component; @Component -//@ApplicationPath("/rest") +@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/WebSocketConfig.java b/src/main/java/com/example/cosmos_serversb/WebSocketConfig.java new file mode 100644 index 0000000..896a270 --- /dev/null +++ b/src/main/java/com/example/cosmos_serversb/WebSocketConfig.java @@ -0,0 +1,35 @@ +package com.example.cosmos_serversb; + +import com.example.cosmos_serversb.resources.WebSocket; +import lombok.AllArgsConstructor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.*; + + +@Configuration +@EnableWebSocket +@AllArgsConstructor +public class WebSocketConfig implements WebSocketConfigurer { + private final WebSocket websocket = new WebSocket(); + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(websocket, "/websocket"); + } + +} + +//@Configuration +//@EnableWebSocketMessageBroker +//public class WebSocketConfig implements WebSocketConfigurer { +// @Override +// public void registerStompEndpoints(StompEndpointRegistry registry) { +// registry.addEndpoint("/websocket") +// .setAllowedOrigins("/websocket").withSockJS(); +// } +// @Override +// public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { +// registry.addHandler(websocket, "/endpoint"); +// } +// +//} \ No newline at end of file diff --git a/src/main/java/com/example/cosmos_serversb/resources/WebSocket.java b/src/main/java/com/example/cosmos_serversb/resources/WebSocket.java new file mode 100644 index 0000000..53031d4 --- /dev/null +++ b/src/main/java/com/example/cosmos_serversb/resources/WebSocket.java @@ -0,0 +1,119 @@ +package com.example.cosmos_serversb.resources; + +import com.example.common.LogUtils; +import org.springframework.stereotype.Component; + +import javax.websocket.server.ServerEndpoint; +import java.util.HashSet; +import java.util.Set; + +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +@Component +@ServerEndpoint("/websocket") +public class WebSocket extends TextWebSocketHandler { + private static final Set sessions = new HashSet<>(); + //private ConcurrentHashMap> roomSessionPool = new ConcurrentHashMap<>(); + + public WebSocket(){ + + } + + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + sessions.add(session); + System.out.println("session確立しました"); + LogUtils.info(session.getId() + " の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 strMessage = message.getPayload(); + System.out.println("message( " + strMessage + " )を受信しました"); + LogUtils.info(session.getId() + " からmessage( " +strMessage + " )を受信しました"); + + session.sendMessage(message); + for(WebSocketSession roomsSession : sessions){ + roomsSession.sendMessage(message); + LogUtils.info(roomsSession.getId() + " にmessage( " +strMessage + " )を送信しました"); + } +// String roomName = session.getUri().getQuery(); +// for (WebSocketSession roomSession : roomSessionPool.get(roomName)) { +// roomSession.sendMessage(message); +// } + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { + sessions.remove(session); + System.out.println("session閉じました"); + LogUtils.info(session.getId() + " のsessionを閉じました"); + +// 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セッションを削除"); +// } +// +// public static void broadcast() { +// sessions.forEach(session -> { +// session.getAsyncRemote().sendText("Broadcast : "); +// }); +// } +} \ No newline at end of file diff --git a/src/test/java/WebSocketTest/SampleClient.java b/src/test/java/WebSocketTest/SampleClient.java index 2aa44d5..ceef72c 100644 --- a/src/test/java/WebSocketTest/SampleClient.java +++ b/src/test/java/WebSocketTest/SampleClient.java @@ -24,7 +24,6 @@ final Request request = new Request.Builder() // .url("http://localhost:8080/WebSocketSampleServer") // .url("http://localhost:8080/websocket") -// .url("http://localhost:8080/cosmos/websocket") .url("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/websocket") .build(); final OkHttpClient client = new OkHttpClient.Builder() @@ -62,9 +61,8 @@ }; ws = client.newWebSocket(request, listener); - -// ws.send("Hello"); -// client.dispatcher().executorService().shutdown(); + ws.send("Hello"); + client.dispatcher().executorService().shutdown(); } } diff --git a/src/test/java/WebSocketTest/WebSocket.java b/src/test/java/WebSocketTest/WebSocket.java deleted file mode 100644 index 632831f..0000000 --- a/src/test/java/WebSocketTest/WebSocket.java +++ /dev/null @@ -1,14 +0,0 @@ -package WebSocketTest; - -import javax.websocket.OnMessage; -import javax.websocket.server.ServerEndpoint; - -@ServerEndpoint("/WebSocket") -public class WebSocket { - - @OnMessage - public String echo(String message) { - System.out.println("メッセージを受信しました。:" + message); - return message; - } -} \ No newline at end of file diff --git a/src/test/java/WebSocketTest/WebSocketSampleServer.java b/src/test/java/WebSocketTest/WebSocketSampleServer.java deleted file mode 100644 index 77720a6..0000000 --- a/src/test/java/WebSocketTest/WebSocketSampleServer.java +++ /dev/null @@ -1,43 +0,0 @@ -package WebSocketTest; - -import org.springframework.web.socket.WebSocketSession; - -import javax.websocket.*; -import javax.websocket.server.ServerEndpoint; -import java.util.HashSet; -import java.util.Set; - -@ServerEndpoint("/WebSocketServer") -public class WebSocketSampleServer { - private static final Set sessions = new HashSet<>(); - - @OnOpen - public void onOpen(Session session) { - /* セッション確立時の処理 */ - System.out.println("WebSocketセッション確立"); - sessions.add(session); - } - - @OnMessage - public String onMessage(String message) { - /* メッセージ受信時の処理 */ - System.out.println("WebSocket受信:" + message); - for(Session session : sessions){ - session.getAsyncRemote().sendText(message); - //session.getBasicRemote().sendText(message); - } - return "正常にメッセージを受信しました。"; - } - - @OnError - public void onError(Throwable th) { - /* エラー発生時の処理 */ - System.out.println("WebSocketエラー:" + th.getMessage()); - } - - @OnClose - public void onClose(Session session) { - /* セッション解放時の処理 */ - System.out.println("WebSocketセッション確立"); - } -}