From 4fc7909358cc62231c81b8e871749fc1b3fa69bd Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期一, 25 十一月 2024 14:10:26 +0800
Subject: [PATCH] 测试提交(无用)

---
 src/main/java/com/whyc/webSocket/DevInfSocket.java |   65 ++++++++++++++++++++++----------
 1 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/whyc/webSocket/DevInfSocket.java b/src/main/java/com/whyc/webSocket/DevInfSocket.java
index 9982060..0b37f68 100644
--- a/src/main/java/com/whyc/webSocket/DevInfSocket.java
+++ b/src/main/java/com/whyc/webSocket/DevInfSocket.java
@@ -1,7 +1,7 @@
 package com.whyc.webSocket;
 
 import com.whyc.config.WebSocketConfig;
-import com.whyc.dto.Page;
+import com.whyc.dto.DevInfDto;
 import com.whyc.dto.Response;
 import com.whyc.pojo.db_user.UserInf;
 import com.whyc.service.DevInfService;
@@ -12,7 +12,8 @@
 import javax.servlet.http.HttpSession;
 import javax.websocket.*;
 import javax.websocket.server.ServerEndpoint;
-import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 
 /**
@@ -29,6 +30,12 @@
 
     private HttpSession httpSession;
 
+    private volatile boolean runFlag = true;
+
+    private volatile Map<String, Thread> threadMap = new HashMap<>();
+
+    private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>();
+
     @Autowired
     public void setDevInfService(DevInfService dinfService) {
         DevInfSocket.dinfService = dinfService;
@@ -41,44 +48,62 @@
     }
     @OnMessage
     public void onMessage(Session session, String message) {
-        Page page= ActionUtil.getGson().fromJson(message,Page.class);
+        DevInfDto devInfDto = ActionUtil.getGson("yyyy-MM-dd").fromJson(message, DevInfDto.class);
         UserInf user = (UserInf) this.httpSession.getAttribute("user");
         final int userId = user.getUid();
-        //final int userId = 1087;
-        Thread thread = new Thread() {
+        //final int userId = 101;
+        thread = new Thread("Thread_DinfSocket") {
             @Override
             public void run() {
-                try {
-                    while (!currentThread().isInterrupted()) {
-                        Response response=dinfService.getAllInf(userId,page);
-                        session.getBasicRemote().sendObject(response);
+                while (runFlag && !isInterrupted()) {
+                    Thread thread = currentThread();
+                    threadFlagMap.put(thread.getId(), true);
+                    try {
+                        Response res=dinfService.getAllInf(userId, devInfDto);
+                        if (session.isOpen()) {
+                            //鎺ㄩ�佷俊鎭�
+                            synchronized (session) {
+                                session.getBasicRemote().sendObject(res);
+                            }
+                            threadFlagMap.put(thread.getId(), false);
+                        }
                         sleep(4000);
+                    } catch (Exception e) {
+                        interrupt();
                     }
-                } catch (Exception e) {
-                    this.interrupt();
                 }
             }
         };
         thread.start();
-        this.thread = thread;
+        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(CloseReason closeReason) throws IOException {
+    public void onClose(CloseReason closeReason){
         System.err.println("closeReason = " + closeReason);
-        if(session.isOpen()){
-            session.close();
+        runFlag = false;
+        if (thread != null && thread.isAlive()) {
+            thread.interrupt();
         }
+        threadMap.remove(session.getId());
     }
 
     @OnError
-    public void onError(Throwable error) throws IOException {
+    public void onError(Throwable error) {
         error.printStackTrace();
-        thread.isInterrupted();
-        if(session.isOpen()){
-            session.close();
+        if (thread != null && thread.isAlive()) {
+            thread.interrupt();
         }
+        threadMap.remove(session.getId());
     }
-
 }
\ No newline at end of file

--
Gitblit v1.9.1