From 1469fdca0a5f50344876cccdf743ca9c831d009f Mon Sep 17 00:00:00 2001 From: whyczh <hzjl@qq.com> Date: 星期五, 25 二月 2022 09:52:55 +0800 Subject: [PATCH] websocket接口更新 --- src/main/java/com/whyc/webSocket/PowerRTSocket.java | 41 ++++++++++++++++++++++++++++++++--------- 1 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/whyc/webSocket/PowerRTSocket.java b/src/main/java/com/whyc/webSocket/PowerRTSocket.java index 23945c5..3d4cd4c 100644 --- a/src/main/java/com/whyc/webSocket/PowerRTSocket.java +++ b/src/main/java/com/whyc/webSocket/PowerRTSocket.java @@ -1,5 +1,6 @@ package com.whyc.webSocket; +import com.whyc.dto.Response; import com.whyc.service.PwrdevAcdcdataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -21,39 +22,61 @@ private static Map<String,Thread> threadMap = new HashMap<>(); + private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>(); + private static PwrdevAcdcdataService service; + + private Session session; @Autowired public void setService(PwrdevAcdcdataService service) { PowerRTSocket.service = service; } + @OnOpen + public void onOpen(Session session){ + this.session=session; + } + @OnMessage public void onMessage(Session session, String deviceId){ - //鍋滄褰撳墠socket鐨勭嚎绋� - Thread threadBefore = threadMap.get(session.getId()); - if(threadBefore !=null && threadBefore.isAlive()){ - threadBefore.interrupt(); - } thread = new Thread("Thread_PowerRT") { public void run() { - while (!thread.isInterrupted()) { + while (true) { + Thread thread = currentThread(); + threadFlagMap.put(thread.getId(),true); try { if (session.isOpen()) { - session.getBasicRemote().sendObject(service.getPowerInfoById2(Integer.parseInt(deviceId))); + //鎺ㄩ�佷俊鎭� + synchronized (session) { + session.getBasicRemote().sendObject(service.getPowerInfoById2(Integer.parseInt(deviceId))); + } + threadFlagMap.put(thread.getId(),false); } sleep(executeTime); - } catch (IOException | InterruptedException | EncodeException e) { + //} catch (IOException | InterruptedException | EncodeException e) { + } catch (Exception e) { interrupt(); } } } }; thread.start(); + threadFlagMap.put(thread.getId(),true); + //鍋滄鑰佺殑socket绾跨▼ + Thread threadBefore = threadMap.get(session.getId()); + if(threadBefore !=null && threadBefore.isAlive()){ + while (threadFlagMap.get(threadBefore.getId())){ + } + threadBefore.interrupt(); + } + //灏嗙嚎绋嬪瓨鍌�,渚夸簬璋冪敤瀹氫綅 + threadMap.put(session.getId(), this.thread); } @OnClose - public void onClose(){ + public void onClose(CloseReason closeReason){ + System.err.println("closeReason = " + closeReason); if (thread != null && thread.isAlive()) { thread.interrupt(); } -- Gitblit v1.9.1