diff --git a/lis-interfaceCommon/pom.xml b/lis-interfaceCommon/pom.xml index c29ca96..dc457d0 100644 --- a/lis-interfaceCommon/pom.xml +++ b/lis-interfaceCommon/pom.xml @@ -70,6 +70,12 @@ pinyin4j + + org.springframework.boot + spring-boot-starter-websocket + + + diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/config/WebSocketConfiguration.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/config/WebSocketConfiguration.java new file mode 100644 index 0000000..bb20781 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/config/WebSocketConfiguration.java @@ -0,0 +1,19 @@ +package com.czlis.interfaceCommon.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + + +/** + * WebSocket配置类,用于注册WebSocket的Bean + */ +@Configuration +public class WebSocketConfiguration { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WSParam.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WSParam.java new file mode 100644 index 0000000..ba1876a --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WSParam.java @@ -0,0 +1,12 @@ +package com.czlis.interfaceCommon.pojo.websocket; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WSParam { + private String yq; +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WebSocketParam.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WebSocketParam.java new file mode 100644 index 0000000..691b824 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WebSocketParam.java @@ -0,0 +1,14 @@ +package com.czlis.interfaceCommon.pojo.websocket; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.websocket.Session; + +@Data +@AllArgsConstructor +public class WebSocketParam { + private Session session; + private WSParam wsParam; +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketInstrComm.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketInstrComm.java new file mode 100644 index 0000000..349ee16 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketInstrComm.java @@ -0,0 +1,59 @@ +package com.czlis.interfaceCommon.websocket; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.czlis.interfaceCommon.pojo.websocket.WSParam; +import com.czlis.interfaceCommon.pojo.websocket.WebSocketParam; +import org.springframework.stereotype.Component; + +import javax.websocket.OnMessage; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.util.Collection; + +/** + * ws仪器通讯类 + */ +@Component +@ServerEndpoint("/ws/instr/{sid}") +public class WebSocketInstrComm extends WebSocketServer { + + /** + * 接收消息 + * @param message 客户端发送过来的消息 + * @param sid + */ + @Override + @OnMessage + public void onMessage(String message,@PathParam("sid") String sid) { + super.onMessage(message, sid); + String yq = ""; + try{ + JSONObject jsonObject = JSONUtil.parseObj(message); + yq = jsonObject.getStr("yq"); + }catch (Exception e){ + + } + sessionMap.put(sid,new WebSocketParam(sessionMap.get(sid).getSession(),new WSParam(yq))); + System.out.println(sessionMap); + } + + /** + * 给指定的客户端发消息 + * @param message + */ + public void sendToSingleClient(String message,String yq){ + Collection sessions = sessionMap.values(); + for (WebSocketParam webSocketParam : sessions) { + String yq1 = webSocketParam.getWsParam().getYq(); + try { + if(yq1.equals(yq)){ + //服务器向客户端发送消息 + webSocketParam.getSession().getBasicRemote().sendText(message); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java new file mode 100644 index 0000000..12ae285 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java @@ -0,0 +1,72 @@ +package com.czlis.interfaceCommon.websocket; + + + +import com.czlis.interfaceCommon.pojo.websocket.WebSocketParam; + + +import javax.websocket.OnClose; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; +import javax.websocket.Session; +import javax.websocket.server.PathParam; +import java.util.*; + +/** + * WebSocket服务 + */ + +public class WebSocketServer { + + //存放会话对象 + protected static Map sessionMap = new HashMap(); + + /** + * 连接建立成功调用的方法 + */ + @OnOpen + public void onOpen(Session session, @PathParam("sid") String sid) { + System.out.println("客户端:" + sid + "建立连接"); + session.setMaxTextMessageBufferSize(8192000); + sessionMap.put(sid,new WebSocketParam(session,null)); + } + + /** + * 收到客户端消息后调用的方法 + * + * @param message 客户端发送过来的消息 + */ + @OnMessage + public void onMessage(String message, @PathParam("sid") String sid) { + System.out.println("收到来自客户端:" + sid + "的信息:" + message); + } + + /** + * 连接关闭调用的方法 + * + * @param sid + */ + @OnClose + public void onClose(@PathParam("sid") String sid) { + System.out.println("连接断开:" + sid); + sessionMap.remove(sid); + } + + /** + * 给所有客户端群发 + * + * @param message + */ + public void sendToAllClient(String message) { + Collection sessions = sessionMap.values(); + for (WebSocketParam webSocketParam : sessions) { + try { + //服务器向客户端发送消息 + webSocketParam.getSession().getBasicRemote().sendText(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + +} diff --git a/lis-system/src/main/java/com/czlis/system/config/SecurityConfig.java b/lis-system/src/main/java/com/czlis/system/config/SecurityConfig.java index e08d166..4499fe1 100644 --- a/lis-system/src/main/java/com/czlis/system/config/SecurityConfig.java +++ b/lis-system/src/main/java/com/czlis/system/config/SecurityConfig.java @@ -113,6 +113,7 @@ public class SecurityConfig { .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**","/printPDF/**","/graphs/**").permitAll() .antMatchers("/doc.html").permitAll() //Knife4j 过滤 + .antMatchers("/ws/**").permitAll() //websocket过滤 // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated(); }) diff --git a/pom.xml b/pom.xml index 1b6d50a..9662477 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,7 @@ 7.2.5 - 9.0.98 + 9.0.112 1.2.13 5.7.12 5.3.39 @@ -123,6 +123,12 @@ test + + org.springframework.boot + spring-boot-starter-websocket + ${spring-boot.version} + + com.alibaba