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/FbsStateSocket.java |   58 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 35 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/whyc/webSocket/FbsStateSocket.java b/src/main/java/com/whyc/webSocket/FbsStateSocket.java
index a71bab9..cad7f95 100644
--- a/src/main/java/com/whyc/webSocket/FbsStateSocket.java
+++ b/src/main/java/com/whyc/webSocket/FbsStateSocket.java
@@ -23,9 +23,9 @@
 
     private static final int executeTime = 15000;
 
-    private static boolean exit=false;
-
     private static Map<String,Thread> threadMap = new HashMap<>();
+
+    private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>();
 
     private static Fbs9100StateService fbs9100StateService;
 
@@ -37,52 +37,64 @@
     public void setService(Fbs9100StateService fbs9100StateService) {
         FbsStateSocket.fbs9100StateService = fbs9100StateService;
     }
+    @OnOpen
+    public void onOpen(Session session){
+        this.session=session;
+    }
+
     @Autowired
     public void setService(Fbs9600StateService fbs9600StateService) {
         FbsStateSocket.fbs9600StateService = fbs9600StateService;
     }
 
     @OnMessage
-    public void onMessage(Session session, String message){
-
-        //鍋滄褰撳墠socket鐨勭嚎绋�
-        Thread threadBefore = threadMap.get(session.getId());
-        if(threadBefore !=null && threadBefore.isAlive()){
-            threadBefore.interrupt();
-            exit=true;
-        }
+    public synchronized void onMessage(Session session, String message){
         FbsStatePar fbsStatePar= ActionUtil.getGson().fromJson(message,FbsStatePar.class);
         thread = new Thread("Thread_FbsState") {
             public void run() {
-                exit=false;
-                while ( !this.isInterrupted()&&!exit) {
+                while (true) {
+                    Thread thread = currentThread();
+                    threadFlagMap.put(thread.getId(), true);
                     try {
+                        Map<String, Response> res=new HashMap<>();
+                        //鏌ヨfbs9100淇℃伅
+                        Response f9100stateRes=fbs9100StateService.searchByCondition(fbsStatePar.getPageNum(),fbsStatePar.getPageSize(),fbsStatePar.getDevErrcommcount(),fbsStatePar.getUserId());
+                        res.put("f9100state",f9100stateRes);
+
+                        Response f9600StateRes=fbs9600StateService.searchByCondition(fbsStatePar.getPageNum(),fbsStatePar.getPageSize(),fbsStatePar.getDevErrcommcount(),fbsStatePar.getUserId());
+                        res.put("f9600state",f9600StateRes);
+
                         if (session.isOpen()) {
-                            Map<String, Response> res=new HashMap<>();
-                            //鏌ヨfbs9100淇℃伅
-                            Response f9100stateRes=fbs9100StateService.searchByCondition(fbsStatePar.getPageNum(),fbsStatePar.getPageSize(),fbsStatePar.getDevErrcommcount(),fbsStatePar.getUserId());
-                            res.put("f9100state",f9100stateRes);
-
-                            Response f9600StateRes=fbs9600StateService.searchByCondition(fbsStatePar.getPageNum(),fbsStatePar.getPageSize(),fbsStatePar.getDevErrcommcount(),fbsStatePar.getUserId());
-                            res.put("f9600state",f9600StateRes);
-
                             //鎺ㄩ�佷俊鎭�
-                            session.getBasicRemote().sendObject(new Response().set(1,res));
+                            synchronized (session) {
+                                session.getBasicRemote().sendObject(new Response().set(1, res));
+                            }
+                            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