package com.netsdk.module; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.Utils; import com.netsdk.lib.callback.fRedirectServerCallBackEx; import com.netsdk.lib.enumeration.ENUMERROR; import com.netsdk.lib.structure.EmptyStructure; import com.netsdk.lib.structure.NET_IN_START_REDIRECT_SERVICE; import com.sun.jna.Memory; import com.sun.jna.Pointer; import java.nio.charset.Charset; /** * @author 47081 * @version 1.0 * @description 主动注册及重定向模块 * @date 2021/3/13 */ public class AutoRegisterModule extends BaseModule { public long listenServer( String ip, int port, int timeOut, NetSDKLib.fServiceCallBack serviceCallBack, Pointer userData) { NetSDKLib.LLong listenHandler = getNetsdkApi().CLIENT_ListenServer(ip, port, timeOut, serviceCallBack, userData); if (listenHandler.longValue() == 0L) { System.out.println(ENUMERROR.getErrorMessage()); } return listenHandler.longValue(); } public boolean stopListenServer(long listenHandler) { return getNetsdkApi().CLIENT_StopListenServer(new NetSDKLib.LLong(listenHandler)); } /** * 开启主动注册重定向监听服务 * * @param ip 需要监听的ip,一般为本机 * @param port 监听的端口 * @param serverCallBack 重定向回调函数,请使用单例模式 * @param userData 自定义用户数据,一般传null,如果需要使用,请保证传入的数据不会被jvm回收 * @return */ public long startRedirectService( String ip, short port, fRedirectServerCallBackEx serverCallBack, Pointer userData) { if (serverCallBack == null) { System.out.println("注册回调为null,请检查参数"); return 0L; } NET_IN_START_REDIRECT_SERVICE inParam = new NET_IN_START_REDIRECT_SERVICE(); byte[] data = ip.getBytes(Charset.forName(Utils.getPlatformEncode())); System.arraycopy(data, 0, inParam.szIP, 0, data.length); inParam.nPort = port; inParam.cbFuncEx = serverCallBack; if (userData != null) { inParam.dwUserData = userData; } // inParam.write(); Pointer pointer = new Memory(inParam.size()); ToolKits.SetStructDataToPointer(inParam, pointer, 0); EmptyStructure outParam = new EmptyStructure(); outParam.write(); NetSDKLib.LLong serviceHandler = getNetsdkApi().CLIENT_StartRedirectServiceEx(pointer, outParam.getPointer()); if (serviceHandler.longValue() == 0L) { System.out.println(ENUMERROR.getErrorMessage()); } return serviceHandler.longValue(); } /** * 停止重定向监听服务 * * @param serviceHandler 监听句柄 * @return */ public boolean stopRedirectService(long serviceHandler) { boolean result = getNetsdkApi().CLIENT_StopRedirectService(new NetSDKLib.LLong(serviceHandler)); if (!result) { System.out.println(ENUMERROR.getErrorMessage()); } return result; } /** * 设置设备需要重定向到的服务器信息,设备主动注册到重定向到的服务器 * * @param devHandler 设备句柄 * @param redirectIp 重定向到的服务器ip * @param redirectPort 重定向到的服务器port * @param retry 尝试次数 * @return */ public boolean setRedirectServer( long devHandler, String redirectIp, short redirectPort, short retry) { boolean result = getNetsdkApi() .CLIENT_SetAutoRegisterServerInfo( new NetSDKLib.LLong(devHandler), redirectIp, redirectPort, retry); if (!result) { System.out.println(ENUMERROR.getErrorMessage()); } return result; } }