| | |
| | | package com.sandu.ximon.admin.newnova.utils; |
| | | |
| | | import afu.org.checkerframework.checker.units.qual.A; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.sandu.common.execption.BusinessException; |
| | |
| | | import java.util.concurrent.CountDownLatch; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import static java.lang.Thread.sleep; |
| | | |
| | | /** |
| | | * @author LiuHaoNan |
| | | * @date 2022/11/9 |
| | |
| | | |
| | | private ProgramPathConfig filePathConfig; |
| | | |
| | | private Map<String, Boolean> loginSn = new HashMap(); |
| | | /* |
| | | * 成功登录的 |
| | | * */ |
| | | public static Map<String, Boolean> loginSn = new HashMap(); |
| | | |
| | | /* |
| | | * 搜索出来的状态 |
| | | * */ |
| | | public static List<StatusVO> searchStatus = new ArrayList<>(); |
| | | |
| | | private ViplexCore instance = null; |
| | | |
| | |
| | | |
| | | private static String loginInfo = null; |
| | | |
| | | private NovaAPIUtil() { |
| | | private NovaAPIUtil() throws InterruptedException { |
| | | filePathConfig = SpringContextHolder.getBean(ProgramPathConfig.class); |
| | | String rootDir = filePathConfig.getOutPutPath(); |
| | | instance = (ViplexCore) Native.loadLibrary(filePathConfig.getStringPath(), ViplexCore.class); |
| | |
| | | System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... "); |
| | | |
| | | CountDownLatch countDownLatch1 = new CountDownLatch(1); |
| | | instance.nvSearchTerminalAsync(new ViplexCore.CallBack() { |
| | | instance.nvSearchTerminalAsync((code, data) -> { |
| | | searchVO.setStatusCode(code); |
| | | searchVO.setStatusData(data); |
| | | loginInfo = data; |
| | | |
| | | @Override |
| | | public void dataCallBack(int code, String data) { |
| | | searchVO.setStatusCode(code); |
| | | searchVO.setStatusData(data); |
| | | loginInfo = data; |
| | | |
| | | if (code == 0 ){ |
| | | Map map = (Map) JSONObject.parse(data); |
| | | /* |
| | | * 当前屏体状态,terminalState共有6个值,分别代表: |
| | | 0:未连接任何终端,当前处于未连接状态 |
| | | 1:连接成功但是未登录状态 |
| | | 2:被他人登录状态 |
| | | 3:登录成功状态 |
| | | 4:密码错误状态 |
| | | 5:离线状态,处于搜索不到的状态,但是曾经被搜索到过 |
| | | * */ |
| | | if (map.get("terminalState").equals(0) || map.get("terminalState").equals(1)){ |
| | | login((String) map.get("sn"),0); |
| | | searchVO.setSn((String) map.get("sn")); |
| | | searchStatus.add(searchVO); |
| | | System.out.println("\nViplexCore 搜索 sn:" + map.get("sn")); |
| | | } else if (map.get("terminalState").equals(3) ) { |
| | | loginSn.put(searchVO.getSn(),true); |
| | | } |
| | | |
| | | System.out.println("\nViplexCore 搜索 code:" + code); |
| | | System.out.println("\nViplexCore 搜索 data:" + data); |
| | | countDownLatch1.countDown(); |
| | | } |
| | | else{ |
| | | System.out.println("搜索结果code:"+code); |
| | | } |
| | | countDownLatch1.countDown(); |
| | | }); |
| | | |
| | | try { |
| | | countDownLatch1.await(10000, TimeUnit.MILLISECONDS); |
| | | countDownLatch1.await(30000, TimeUnit.MILLISECONDS); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | // login("MZVA51930N2113017308"); |
| | | sleep(35000); |
| | | } |
| | | |
| | | public static NovaAPIUtil getInstanceUtil() { |
| | | if (instanceUtil == null) { |
| | | synchronized (NovaAPIUtil.class) { |
| | | if (instanceUtil == null) { |
| | | instanceUtil = new NovaAPIUtil(); |
| | | try { |
| | | instanceUtil = new NovaAPIUtil(); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | */ |
| | | public StatusVO login(String sn, Integer loginType) { |
| | | |
| | | /* |
| | | 从loginSn 判断是否登录过 |
| | | * */ |
| | | if (loginSn.get(sn) != null && loginSn.get(sn) && loginType == 0) { |
| | | return new StatusVO(0); |
| | | } |
| | | if (loginInfo == null) { |
| | | return new StatusVO(10086); |
| | | } |
| | | if (!loginInfo.contains(String.format("\"sn\":\"%s\",", sn)) && loginType == 0) { |
| | | //未搜索到屏幕 登录不成功 |
| | | System.out.println("loginType : " + loginType); |
| | | return new StatusVO(10086); |
| | | } |
| | | /* |
| | | * 没有则执行登录 |
| | | * */ |
| | | else { |
| | | |
| | | StatusVO statusVO = new StatusVO(); |
| | | StatusVO statusVO = new StatusVO(); |
| | | |
| | | System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... "); |
| | | String loginParam = String.format("{\"sn\":\"%s\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"123456\",\"loginType\":" + loginType + "}", sn); |
| | | System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... "); |
| | | String loginParam = String.format("{\"sn\":\"%s\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"123456\",\"loginType\":" + loginType + "}", sn); |
| | | |
| | | CountDownLatch countDownLatch2 = new CountDownLatch(1); |
| | | instance.nvLoginAsync(loginParam, new ViplexCore.CallBack() { |
| | | |
| | | @Override |
| | | public void dataCallBack(int code, String data) { |
| | | CountDownLatch countDownLatch2 = new CountDownLatch(1); |
| | | instance.nvLoginAsync(loginParam, (code, data) -> { |
| | | statusVO.setStatusCode(code); |
| | | statusVO.setStatusData(data); |
| | | |
| | | System.out.println("\nViplexCore 登录 sn:" + sn); |
| | | System.out.println("\nViplexCore 登录 code:" + code); |
| | | System.out.println("\nViplexCore 登录 data:" + data); |
| | | if (code == 65353) { |
| | | statusVO.setStatusCode(0); |
| | | } |
| | | countDownLatch2.countDown(); |
| | | } |
| | | }); |
| | | |
| | | }); |
| | | try { |
| | | countDownLatch2.await(); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | try { |
| | | countDownLatch2.await(5000,TimeUnit.MILLISECONDS); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | if (statusVO.getStatusCode() != 0) { |
| | | System.out.println("ViplexCore " + sn + " nvLoginAsync(登录) 失败!"); |
| | | System.out.println("错误码:" + statusVO.getStatusCode()); |
| | | loginSn.put(sn,false); |
| | | } else { |
| | | loginSn.put(sn, true); |
| | | } |
| | | return statusVO; |
| | | } |
| | | if (statusVO.getStatusCode() != 0) { |
| | | System.out.println("ViplexCore " + sn + " nvLoginAsync(登录) 失败!"); |
| | | System.out.println("错误码:" + statusVO.getStatusCode()); |
| | | } else { |
| | | //登陆成功之后存入map保存登录信息 |
| | | loginSn.put(sn, true); |
| | | } |
| | | return statusVO; |
| | | } |
| | | |
| | | /** |
| | |
| | | * 重启 |
| | | */ |
| | | public List<NewNovaStatusParam.NovaDTO> reboot(NewNovaStatusParam param) { |
| | | |
| | | System.out.println("ViplexCore Demo nvSetReBootTaskAsync(重启) begin... "); |
| | | if (param.getNovaList() == null || param.getNovaList().size() == 0) { |
| | | throw new BusinessException("重启设备不能为空 !"); |
| | | } |
| | | CountDownLatch countDownLatch = new CountDownLatch(1); |
| | | param.getNovaList().forEach(newNova -> { |
| | | logout(newNova.getSn(), 0); |
| | | // logout(newNova.getSn(), 0); |
| | | StatusVO login = login(newNova.getSn(), 1); |
| | | if (login.getStatusCode() != 0) { |
| | | countDownLatch.countDown(); |