lxw
2023-08-22 12988986f873e336c457be7cec84eabe8ec4dcc5
获取门禁
2个文件已修改
2个文件已添加
176 ■■■■■ 已修改文件
sdklog/SdkLog_1_W.log 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/factory/ThreadPoolExecutorFactory.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/factory/UserThreadFactory.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/webSocket/CarCameraWebSocket.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sdklog/SdkLog_1_W.log
@@ -1,29 +1,49 @@
[2023-08-22 14:54:43.088][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[D:/IDEAWorkSpace/EnvirMonitorSys/lib/zlib1.dll], hHandleRet[1485570048]
[2023-08-22 14:54:43.088][INF] The COM:HCCoreBase ver is 6.1.4.15, 2020_03_05. Async:1.
[2023-08-22 14:54:43.088][INF] The COM:Core ver is 6.1.9.48, 2023_04_10. Async:1.
[2023-08-22 14:54:43.088][INF] This HCNetSDK ver is 6.1.9.48 Ver 2023_04_10.
[2023-08-22 14:54:43.099][INF] Login dev 192.168.10.3:8000.
[2023-08-22 14:54:43.099][INF] dwTotalNum[2048]
[2023-08-22 14:54:43.143][INF] Private connect 192.168.10.3:8000 sock=4876 this=0x2ceb5034 cmd=0x10000 port=63823
[2023-08-22 14:54:43.143][INF] LogonDev1 in[192.168.10.3:8000]
[2023-08-22 14:54:44.272][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCVoiceTalk.dll] SUCC
[2023-08-22 14:54:44.272][INF] AbilityAnalyze---Init-- start
[2023-08-22 14:54:44.272][ERR] AbilityAnalyze---open zip package error, package path D:/IDEAWorkSpace/EnvirMonitorSys/lib/LocalXml.zip
[2023-08-22 14:54:44.272][INF] The COM:VoiceTalk ver is 6.1.9.48, 2023_04_10.
[2023-08-22 14:54:44.273][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCGeneralCfgMgr.dll] SUCC
[2023-08-22 14:54:44.273][INF] The COM:HCGeneralCfgMgr ver is 6.1.9.48, 2023_04_10.
[2023-08-22 14:54:44.274][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCPlayBack.dll] SUCC
[2023-08-22 14:54:44.274][INF] The COM:HCPlayback ver is 6.1.9.48, 2023_04_10.
[2023-08-22 14:54:44.275][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCIndustry.dll] SUCC
[2023-08-22 14:54:44.275][INF] The COM:HCIndustry ver is 6.1.9.48, 2023_04_10.
[2023-08-22 14:54:44.276][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCDisplay.dll] SUCC
[2023-08-22 14:54:44.276][INF] The COM:HCDisplay ver is 6.1.9.48, 2023_04_10.
[2023-08-22 14:54:44.277][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCPreview.dll] SUCC
[2023-08-22 14:54:44.277][INF] The COM:Preview ver is 6.1.9.48, 2023_04_10.
[2023-08-22 14:54:44.278][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCAlarm.dll] SUCC
[2023-08-22 14:54:44.278][INF] The COM:HCAlarm ver is 6.1.9.48, 2023_04_10.
[2023-08-22 14:54:44.297][INF] Private connect 192.168.10.3:8000 sock=4604 this=0x2ceb5034 cmd=0x112029 port=63824
[2023-08-22 14:54:44.309][INF] COM_Logout[0][0]
[2023-08-22 14:54:44.309][DBG] CUserMgr::UnRegisterHeartProxy[0]
[2023-08-22 14:54:44.327][INF] Private connect 192.168.10.3:8000 sock=4888 this=0x2ceb5034 cmd=0x10100 port=63825
[2023-08-22 14:54:44.335][INF] CTransUnitMgr::UnloadTransUnitLib
[2023-08-22 15:15:10.830][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[D:/IDEAWorkSpace/EnvirMonitorSys/lib/zlib1.dll], hHandleRet[1485570048]
[2023-08-22 15:15:10.830][INF] The COM:HCCoreBase ver is 6.1.4.15, 2020_03_05. Async:1.
[2023-08-22 15:15:10.830][INF] The COM:Core ver is 6.1.9.48, 2023_04_10. Async:1.
[2023-08-22 15:15:10.830][INF] This HCNetSDK ver is 6.1.9.48 Ver 2023_04_10.
[2023-08-22 15:15:10.831][INF] Login dev 192.168.10.3:8000.
[2023-08-22 15:15:10.831][INF] dwTotalNum[2048]
[2023-08-22 15:15:10.858][INF] Private connect 192.168.10.3:8000 sock=4008 this=0x2d1ccfa4 cmd=0x10000 port=64329
[2023-08-22 15:15:10.858][INF] LogonDev1 in[192.168.10.3:8000]
[2023-08-22 15:15:11.375][INF] The COM:HCCoreBase ver is 6.1.4.15, 2020_03_05. Async:1.
[2023-08-22 15:15:11.375][INF] The COM:Core ver is 6.1.9.48, 2023_04_10. Async:1.
[2023-08-22 15:15:11.375][INF] This HCNetSDK ver is 6.1.9.48 Ver 2023_04_10.
[2023-08-22 15:15:11.375][INF] The COM:HCCoreBase ver is 6.1.4.15, 2020_03_05. Async:1.
[2023-08-22 15:15:11.375][INF] The COM:Core ver is 6.1.9.48, 2023_04_10. Async:1.
[2023-08-22 15:15:11.375][INF] This HCNetSDK ver is 6.1.9.48 Ver 2023_04_10.
[2023-08-22 15:15:11.376][INF] Login dev 192.168.10.5:8000.
[2023-08-22 15:15:11.376][INF] Login dev 192.168.10.3:8000.
[2023-08-22 15:15:11.398][INF] Private connect 192.168.10.5:8000 sock=3484 this=0x2d1cd710 cmd=0x10000 port=64330
[2023-08-22 15:15:11.398][INF] LogonDev1 in[192.168.10.5:8000]
[2023-08-22 15:15:11.414][INF] Private connect 192.168.10.3:8000 sock=5528 this=0x2d1cde7c cmd=0x10000 port=64331
[2023-08-22 15:15:11.414][INF] LogonDev1 in[192.168.10.3:8000]
[2023-08-22 15:15:11.494][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCVoiceTalk.dll] SUCC
[2023-08-22 15:15:11.494][INF] AbilityAnalyze---Init-- start
[2023-08-22 15:15:11.494][ERR] AbilityAnalyze---open zip package error, package path D:/IDEAWorkSpace/EnvirMonitorSys/lib/LocalXml.zip
[2023-08-22 15:15:11.494][INF] The COM:VoiceTalk ver is 6.1.9.48, 2023_04_10.
[2023-08-22 15:15:11.498][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCGeneralCfgMgr.dll] SUCC
[2023-08-22 15:15:11.499][INF] The COM:HCGeneralCfgMgr ver is 6.1.9.48, 2023_04_10.
[2023-08-22 15:15:11.502][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCPlayBack.dll] SUCC
[2023-08-22 15:15:11.502][INF] The COM:HCPlayback ver is 6.1.9.48, 2023_04_10.
[2023-08-22 15:15:11.505][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCIndustry.dll] SUCC
[2023-08-22 15:15:11.505][INF] The COM:HCIndustry ver is 6.1.9.48, 2023_04_10.
[2023-08-22 15:15:11.508][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCDisplay.dll] SUCC
[2023-08-22 15:15:11.508][INF] The COM:HCDisplay ver is 6.1.9.48, 2023_04_10.
[2023-08-22 15:15:11.511][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCPreview.dll] SUCC
[2023-08-22 15:15:11.511][INF] The COM:Preview ver is 6.1.9.48, 2023_04_10.
[2023-08-22 15:15:11.514][DBG] CComBase::Load, Load szDllPath[D:/IDEAWorkSpace/EnvirMonitorSys/lib/HCNetSDKCom/HCAlarm.dll] SUCC
[2023-08-22 15:15:11.515][INF] The COM:HCAlarm ver is 6.1.9.48, 2023_04_10.
[2023-08-22 15:15:11.517][INF] Private connect 192.168.10.3:8000 sock=3676 this=0x2d1cd710 cmd=0x112029 port=64332
[2023-08-22 15:15:11.517][INF] Private connect 192.168.10.5:8000 sock=5544 this=0x2d1ccfa4 cmd=0x112029 port=64333
[2023-08-22 15:15:11.522][INF] COM_Logout[0][0]
[2023-08-22 15:15:11.522][DBG] CUserMgr::UnRegisterHeartProxy[0]
[2023-08-22 15:15:11.536][INF] COM_Logout[2][0]
[2023-08-22 15:15:11.536][DBG] CUserMgr::UnRegisterHeartProxy[2]
[2023-08-22 15:15:11.540][INF] Private connect 192.168.10.3:8000 sock=5544 this=0x2d1ccfa4 cmd=0x10100 port=64334
[2023-08-22 15:15:11.556][INF] Private connect 192.168.10.3:8000 sock=3676 this=0x2d1cd710 cmd=0x10100 port=64336
[2023-08-22 15:15:11.556][INF] Private connect 192.168.10.3:8000 sock=5528 this=0x2d1cde7c cmd=0x112029 port=64335
[2023-08-22 15:15:11.563][INF] COM_Logout[2][0]
[2023-08-22 15:15:11.565][INF] CTransUnitMgr::UnloadTransUnitLib
[2023-08-22 15:15:11.572][DBG] CUserMgr::UnRegisterHeartProxy[1]
[2023-08-22 15:15:11.587][INF] Private connect 192.168.10.5:8000 sock=4944 this=0x2d1ccfa4 cmd=0x10100 port=64337
src/main/java/com/whyc/factory/ThreadPoolExecutorFactory.java
New file
@@ -0,0 +1,23 @@
package com.whyc.factory;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecutorFactory {
    private static ThreadPoolExecutor poolExecutor = init();
    private static ThreadPoolExecutor init() {
        //线程池初始化
        UserThreadFactory userThreadFactory = new UserThreadFactory("ev");
        ThreadPoolExecutor pool = new ThreadPoolExecutor(8, 48, 10, TimeUnit.SECONDS, new LinkedBlockingDeque<>(16), userThreadFactory,new ThreadPoolExecutor.CallerRunsPolicy());
        poolExecutor = pool;
        return pool;
    }
    public static ThreadPoolExecutor getPoolExecutor() {
        return poolExecutor;
    }
}
src/main/java/com/whyc/factory/UserThreadFactory.java
New file
@@ -0,0 +1,23 @@
package com.whyc.factory;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
public class UserThreadFactory implements ThreadFactory {
    private final String namePrefix;
    private final AtomicInteger nextId = new AtomicInteger(1);
    // 定义线程组名称,在 jstack 问题排查时,非常有帮助
    public UserThreadFactory(String whatFeaturOfGroup) {
        namePrefix = "From UserThreadFactory's " + whatFeaturOfGroup + "-Worker-";
    }
    @Override
    public Thread newThread(Runnable task) {
        String name = namePrefix + nextId.getAndIncrement();
        return new Thread(task, name);
    }
    public static boolean flag = true;
}
src/main/java/com/whyc/webSocket/CarCameraWebSocket.java
@@ -1,7 +1,10 @@
package com.whyc.webSocket;
import com.google.gson.reflect.TypeToken;
import com.whyc.dto.CarCamera;
import com.whyc.dto.Login;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.pojo.Response;
import com.whyc.service.AirconditionerStateService;
import com.whyc.service.CarCameraService;
import com.whyc.util.ActionUtil;
@@ -12,7 +15,11 @@
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Component
@ServerEndpoint(value = "/carCameraSocket",encoders = WebSocketEncoderUtil.class)
@@ -43,40 +50,35 @@
    @OnMessage
    public void onMessage(Session session, String message){
        Login login= ActionUtil.getGson().fromJson(message,Login.class);
        List<Login> list= ActionUtil.getGson().fromJson(message,new TypeToken<List<Login>>(){}.getType());
        thread = new Thread("Thread_airSocket") {
            @Override
            public void run() {
                while (runFlag && !isInterrupted()) {
                    Thread thread = currentThread();
                    threadFlagMap.put(thread.getId(), true);
                    try {
                        if (session.isOpen()) {
                            //推送信息
                            synchronized (session) {
                                session.getBasicRemote().sendObject(service.getCarCamera(login));
                            }
                            threadFlagMap.put(thread.getId(), false);
                try {
                    Map<String, Object> map = new HashMap<>();
                    while (!currentThread().isInterrupted()) {
                        Thread thread = currentThread();
                        threadFlagMap.put(thread.getId(), true);
                        ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
                        CountDownLatch latch = new CountDownLatch(list.size());
                        for (Login login:list) {
                            poolExecutor.execute(() -> {
                                Response res=service.getCarCamera(login);
                                map.put(login.getIp(),res);
                                latch.countDown();
                            });
                        }
                        sleep(executeTime);
                        //} catch (IOException | InterruptedException | EncodeException e) {
                    } catch (Exception e) {
                        interrupt();
                        latch.await(10, TimeUnit.MINUTES);
                        session.getBasicRemote().sendObject(new Response().set(1, map));
                        sleep(5000);
                    }
                } catch (Exception e) {
                    this.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);
        this.thread = thread;
    }
    @OnClose