diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/common/mnt/websocket/SendPrintSocket.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/common/mnt/websocket/SendPrintSocket.java new file mode 100644 index 0000000..4e884bc --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/common/mnt/websocket/SendPrintSocket.java @@ -0,0 +1,107 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.mnt.websocket; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.util.concurrent.CopyOnWriteArraySet; + +/* + * @author ZZQ + * @Date 2024/1/8 17:03 + */ +@ServerEndpoint("/webSocket/sendPrint/{sid}") +@Slf4j +@Component +public class SendPrintSocket { + + /** + * concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。 + */ + private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet(); + /** + * 与某个客户端的连接会话,需要通过它来给客户端发送数据 + */ + private Session session; + /** + * 接收sid + */ + private String sid = ""; + /** + * 连接建立成功调用的方法 + */ + @OnOpen + public void onOpen(Session session, @PathParam("sid") String sid) { + this.session = session; + //如果存在就先删除一个,防止重复推送消息 + for (SendPrintSocket webSocket : webSocketSet) { + if (webSocket.sid.equals(sid)) { + webSocketSet.remove(webSocket); + } + } + webSocketSet.add(this); + this.sid = sid; + } + + /** + * 连接关闭调用的方法 + */ + @OnClose + public void onClose() { + webSocketSet.remove(this); + } + + /** + * 收到客户端消息后调用的方法 + * + * @param message 客户端发送过来的消息 + */ + @OnMessage + public void onMessage(String message, Session session) { + System.out.println(webSocketSet.size()+"_接收到消息_"+session.getId()); + } + + @OnError + public void onError(Session session, Throwable error) { + log.error("发生错误"); + webSocketSet.remove(session); + error.printStackTrace(); + } + public static void sendPrint(String print){ + if (webSocketSet.size()>0){ + try { + //如果有多个客户端连接一个服务端,只要给一个客户端下发打印即可 + for (SendPrintSocket printSocket : webSocketSet) { + if (printSocket.session.isOpen()){ + printSocket.session.getBasicRemote().sendText(print); + break; + } + } + }catch (Exception ex){ + ex.printStackTrace(); + } + } + } + + public static void main(String[] args) { + SendPrintSocket.sendPrint("xxx"); + } +} diff --git a/acs/nladmin-ui/src/views/acs/order/template.vue b/acs/nladmin-ui/src/views/acs/order/template.vue index 64e85e2..0164f24 100644 --- a/acs/nladmin-ui/src/views/acs/order/template.vue +++ b/acs/nladmin-ui/src/views/acs/order/template.vue @@ -35,7 +35,7 @@ /> 自定义纸张1 -