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