package com.netsdk.demo.customize.JordanPSD; import com.netsdk.demo.customize.JordanPSD.module.AutoRegisterModule; import com.netsdk.demo.customize.JordanPSD.module.LogonModule; import com.netsdk.demo.customize.JordanPSD.module.SdkUtilModule; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.enumeration.ENUMERROR; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; /** * @author 47040 * @since Created at 2021/5/28 19:17 */ public class Launcher33C300 { // 初始化测试 public void InitTest() { SdkUtilModule.Init(); // 初始化SDK库 } ///////////////////////////// 主动注册 ///////////////////////////// /////////////////////////////////////////////////////////////////// // 用户存储注册上来的设备信息的缓存 Map 项目中请替换成其他中间件 private final Map deviceInfoMap = new ConcurrentHashMap<>(); // 监听句柄 private NetSDKLib.LLong m_hListenHandle = new NetSDKLib.LLong(0); /** * 开启监听 */ public void serverStartListen() { m_hListenHandle = AutoRegisterModule.ServerStartListen(serverIpAddr, serverPort, RegisterServiceCallBack.getInstance()); if (m_hListenHandle.longValue() == 0) return; taskIsOpen = true; new Thread(this::eventListTask).start(); } /** * 结束监听 */ public void serverStopListen() { AutoRegisterModule.ServerStopListen(m_hListenHandle); // 清空队列 taskIsOpen = false; deviceInfoMap.clear(); RegisterServiceCallBack.ServerInfoQueue.clear(); } private volatile Boolean taskIsOpen = false; // 获取监听回调数据并放入缓存 public void eventListTask() { while (taskIsOpen) { try { // 稍微延迟一下,避免循环的太快 Thread.sleep(10); // 阻塞获取 ListenInfo listenInfo = RegisterServiceCallBack.ServerInfoQueue.poll(50, TimeUnit.MILLISECONDS); if (listenInfo == null) continue; // 结果放入缓存 if (!deviceInfoMap.containsKey(listenInfo.devSerial)) { deviceInfoMap.put(listenInfo.devSerial, new DeviceInfo(listenInfo.devIpAddress, listenInfo.devPort)); System.out.println("有新设备上报注册信息... Serial:" + listenInfo.devSerial); } } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 查看上报的监听数据 */ public void checkRegisterDevInfo() { // 浅拷贝一个快照 Map deviceInfos = new HashMap<>(deviceInfoMap); if (deviceInfos.isEmpty()) System.out.println("没有任何设备上报注册信息."); StringBuilder info = new StringBuilder(); for (String label : deviceInfos.keySet()) { info.append(String.format("Serial: %s %s\n", label, deviceInfos.get(label).printRegisterInfo())); } System.out.println(info.toString()); } /** * 登录指定设备 */ public void deviceLogin() { Scanner sc = new Scanner(System.in); System.out.println("请输入设备的注册 Serial"); String key = sc.nextLine().trim(); DeviceInfo deviceInfo = deviceInfoMap.get(key); if (deviceInfo == null) { System.out.println("注册上报的设备中没有该 Serial"); return; } String ipAddr = deviceInfo.ipAddress; int port = deviceInfo.port; System.out.println("请输入用户名"); String username = sc.nextLine().trim(); System.out.println("请输入密码"); String password = sc.nextLine().trim(); // 主动注册登录设备 //NetSDKLib.LLong m_hLoginHandle = LogonModule.AutoRegisterLogin(key, ipAddr, port, username, password, deviceInfo.m_stDeviceInfo); // 高安全登录 主动注册 TLS加密 NetSDKLib.LLong m_hLoginHandle = LogonModule.AutoRegisterLoginWithHighSecurity(key, ipAddr, port, username, password, deviceInfo.m_stDeviceInfo); if (m_hLoginHandle.longValue() == 0) { System.err.println("登录失败:" + ENUMERROR.getErrorMessage()); return; } deviceInfo.m_hLoginHandle = m_hLoginHandle; deviceInfo.isLogin = true; // 启动子 Demo Demo33C300 demo = new Demo33C300(deviceInfo); demo.RunTest(); // 结束测试后登出设备 LogonModule.logout(m_hLoginHandle); deviceInfoMap.remove(key); // 清除此注册信息 请等待重新上报后再重新登录 } // 加载测试内容 public void RunTest() { CaseMenu menu = new CaseMenu(); menu.addItem(new CaseMenu.Item(this, "开始监听", "serverStartListen")); menu.addItem(new CaseMenu.Item(this, "结束监听", "serverStopListen")); menu.addItem(new CaseMenu.Item(this, "查看上报信息", "checkRegisterDevInfo")); menu.addItem(new CaseMenu.Item(this, "开始登录设备", "deviceLogin")); menu.run(); System.out.println("主测试已退出"); } // 结束测试 public void EndTest() { System.out.println("End Test"); if (m_hListenHandle.longValue() != 0) serverStopListen(); System.out.println("See You..."); SdkUtilModule.cleanup(); // 清理资源 } /////////////// 注册地址(服务器 这里是运行此Demo的电脑IP) 监听端口 ////////////////////// private final String serverIpAddr = "10.34.3.83";//10.34.3.83 //172.23.28.2 //10.38.156.87 private final int serverPort = 9500; // 注意不要和其他程序发生冲突 ///////////////////////////////////////////////////////////////////////////////////// public static void main(String[] args) { Launcher33C300 launcher = new Launcher33C300(); launcher.InitTest(); launcher.RunTest(); launcher.EndTest(); } }