diff --git a/pom.xml b/pom.xml index b533a2b..2e2b8d7 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,15 @@ mysql-connector-j runtime + + org.java-websocket + Java-WebSocket + 1.5.4 + + + org.springframework.boot + spring-boot-starter-websocket + diff --git a/src/main/java/com/dreamworks/boditech/BoditechApplication.java b/src/main/java/com/dreamworks/boditech/BoditechApplication.java index d9f8989..a87ca89 100644 --- a/src/main/java/com/dreamworks/boditech/BoditechApplication.java +++ b/src/main/java/com/dreamworks/boditech/BoditechApplication.java @@ -1,9 +1,29 @@ package com.dreamworks.boditech; +import com.dreamworks.boditech.utils.MyWebsocketClient; +import org.java_websocket.client.WebSocketClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; +import java.net.URI; +import java.net.URISyntaxException; + @SpringBootApplication public class BoditechApplication { public static void main(String[] args) { SpringApplication.run(BoditechApplication.class, args); } + + @Bean + public WebSocketClient webSocketClient() throws URISyntaxException { + URI uri = new URI("wss://ws.postman-echo.com/raw"); + MyWebsocketClient webSocketClient = new MyWebsocketClient(uri); + webSocketClient.connect(); + return webSocketClient; + } + + @Bean + public ServerEndpointExporter websocketServerEndpointExporter() { + return new ServerEndpointExporter(); + } } diff --git a/src/main/java/com/dreamworks/boditech/controller/DeviceController.java b/src/main/java/com/dreamworks/boditech/controller/DeviceController.java index 7609d79..50fdd87 100644 --- a/src/main/java/com/dreamworks/boditech/controller/DeviceController.java +++ b/src/main/java/com/dreamworks/boditech/controller/DeviceController.java @@ -1,13 +1,23 @@ package com.dreamworks.boditech.controller; import com.dreamworks.boditech.controller.entity.ApiResponse; +import com.dreamworks.boditech.utils.MyWebsocketServer; +import jakarta.annotation.Resource; +import org.java_websocket.client.WebSocketClient; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class DeviceController extends BaseController { + @Resource + private WebSocketClient webSocketClient; + + @Resource + private MyWebsocketServer websocketServer; + @ResponseBody @PostMapping("/api/device/start") public ApiResponse start() { + webSocketClient.send("hello sever,i want subscribe data A"); return this.success(); } diff --git a/src/main/java/com/dreamworks/boditech/utils/MyWebsocketClient.java b/src/main/java/com/dreamworks/boditech/utils/MyWebsocketClient.java new file mode 100644 index 0000000..5287431 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/utils/MyWebsocketClient.java @@ -0,0 +1,33 @@ +package com.dreamworks.boditech.utils; +import org.java_websocket.client.WebSocketClient; +import org.java_websocket.handshake.ServerHandshake; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.net.URI; +public class MyWebsocketClient extends WebSocketClient { + private static final Logger LOG = LoggerFactory.getLogger(MyWebsocketClient.class); + + public MyWebsocketClient(URI uri ) { + super(uri); + } + + @Override + public void onOpen(ServerHandshake serverHandshake) { + LOG.info("on open"); + } + + @Override + public void onMessage(String s) { + LOG.info("on message"); + } + + @Override + public void onClose(int i, String s, boolean b) { + LOG.info("on close"); + } + + @Override + public void onError(Exception e) { + LOG.info("on error"); + } +} diff --git a/src/main/java/com/dreamworks/boditech/utils/MyWebsocketServer.java b/src/main/java/com/dreamworks/boditech/utils/MyWebsocketServer.java new file mode 100644 index 0000000..8e95c18 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/utils/MyWebsocketServer.java @@ -0,0 +1,35 @@ +package com.dreamworks.boditech.utils; +import jakarta.websocket.*; +import jakarta.websocket.server.ServerEndpoint; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +@ServerEndpoint("/ws") +public class MyWebsocketServer { + private static final Logger LOG = LoggerFactory.getLogger(MyWebsocketClient.class); + + private Session session; + + @OnOpen + public void onOpen(Session session) { + this.session = session; + LOG.info("ws server : on open"); + } + + @OnClose + public void onClose() { + LOG.info("ws server : on close"); + } + + @OnMessage + public void onMessage(String message) { + LOG.info("ws server : on message > " + message); + } + + @OnError + public void onError(Session session, Throwable error) { + LOG.info("ws server : on error"); + } +}