package com.netsdk.demo.customize;
|
|
import java.io.File;
|
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
import com.netsdk.lib.structure.NET_BACKUP_SOURCE;
|
import com.netsdk.lib.structure.NET_BACKUP_TARGET;
|
import com.netsdk.lib.structure.NET_CB_BACKUPTASK_STATE;
|
import com.netsdk.lib.structure.NET_IN_ATTACH_BACKUP_STATE;
|
import com.netsdk.lib.structure.NET_IN_START_BACKUP_TASK_INFO;
|
import com.netsdk.lib.structure.NET_OUT_ATTACH_BACKUP_STATE;
|
import com.netsdk.lib.structure.NET_OUT_START_BACKUP_TASK_INFO;
|
import com.netsdk.lib.NetSDKLib.LLong;
|
import com.netsdk.lib.NetSDKLib.NET_DEVICEINFO_Ex;
|
import com.sun.jna.Pointer;
|
import com.sun.jna.ptr.IntByReference;
|
|
public class SubscriptionBurn {
|
public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE;
|
// 登陆句柄
|
private static LLong loginHandle = new LLong(0);
|
|
private static LLong SessionHandle = new LLong(0);
|
|
private static LLong AttchHandle = new LLong(0);
|
|
// 设备信息扩展
|
private NET_DEVICEINFO_Ex deviceInfo = new NET_DEVICEINFO_Ex();
|
|
|
public void InitTest(){
|
// 初始化SDK库
|
netSdk.CLIENT_Init(/*DisConnectCallBack.getInstance()*/null, null);
|
|
// 设置断线重连成功回调函数
|
netSdk.CLIENT_SetAutoReconnect(HaveReConnectCallBack.getInstance(), null);
|
|
//打开日志,可选
|
NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
|
String logPath = new File(".").getAbsoluteFile().getParent() + File.separator + "sdk_log" + File.separator + "sdk.log";
|
setLog.bSetFilePath = 1;
|
System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
|
setLog.bSetPrintStrategy = 1;
|
setLog.nPrintStrategy = 0;
|
if (!netSdk.CLIENT_LogOpen(setLog)){
|
System.err.println("Open SDK Log Failed!!!");
|
}
|
|
Login();
|
}
|
|
public void Login(){
|
|
// 登陆设备
|
int nSpecCap = NetSDKLib.EM_LOGIN_SPAC_CAP_TYPE.EM_LOGIN_SPEC_CAP_TCP; // TCP登入
|
IntByReference nError = new IntByReference(0);
|
loginHandle = netSdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser,
|
m_strPassword ,nSpecCap, null, deviceInfo, nError);
|
if (loginHandle.longValue() != 0) {
|
System.out.printf("Login Device[%s] Success!\n", m_strIp);
|
}
|
else {
|
System.err.printf("Login Device[%s] Fail.Error[%s]\n", m_strIp, ToolKits.getErrorCode());
|
LoginOut();
|
}
|
}
|
|
|
public void LoginOut(){
|
System.out.println("End Test");
|
if( loginHandle.longValue() != 0)
|
{
|
netSdk.CLIENT_Logout(loginHandle);
|
}
|
System.out.println("See You...");
|
|
netSdk.CLIENT_Cleanup();
|
System.exit(0);
|
}
|
|
////////////////////////////////////////////////////////////////
|
private String m_strIp = "172.11.1.109";
|
private int m_nPort = 37777;
|
private String m_strUser = "admin";
|
private String m_strPassword = "admin123";
|
////////////////////////////////////////////////////////////////
|
|
//开始备份任务
|
public void StartBackupTask() {
|
NET_IN_START_BACKUP_TASK_INFO pIn = new NET_IN_START_BACKUP_TASK_INFO();
|
pIn.emSourceMode = 0;
|
pIn.emTargetMode = 0;
|
pIn.nSourceNum = 1;
|
pIn.nGroupID = 0;
|
NET_BACKUP_SOURCE source = new NET_BACKUP_SOURCE();
|
//备份源
|
source.emSourceType = 1;
|
String spath = "/mnt/dvr/2021-12-09/000/dav/08/0/2/118470/08.05.00-08.10.00[R][0@0][0].dav";
|
System.arraycopy(spath.getBytes(), 0, source.szPath, 0, spath.getBytes().length);
|
String sRename ="HVR_ch1_main_20210625000000_20210625010000.dav";
|
System.arraycopy(sRename.getBytes(), 0, source.szRename, 0, sRename.getBytes().length);
|
source.write();
|
pIn.pstuSource = source.getPointer();
|
pIn.nTargetNum = 1;
|
NET_BACKUP_TARGET target =new NET_BACKUP_TARGET();
|
//备份目的
|
target.emTargetType = 0;
|
String tpath = "/var/sg0";
|
System.arraycopy(tpath.getBytes(), 0, target.szPath, 0, tpath.getBytes().length);
|
String tRename = "HVR_ch1_main_20210625000000_20210625010000.dav";
|
System.arraycopy(tRename.getBytes(), 0, target.szRename, 0, tRename.getBytes().length);
|
target.write();
|
pIn.pstuTarget = target.getPointer();
|
pIn.emFormat = 1;
|
pIn.bTakePlayer= 0;
|
NET_OUT_START_BACKUP_TASK_INFO pOut = new NET_OUT_START_BACKUP_TASK_INFO();
|
|
pIn.write();
|
pOut.write();
|
Boolean ret = netSdk.CLIENT_StartBackupTask(loginHandle, pIn.getPointer(), pOut.getPointer(), 40000);
|
|
if(!ret) {
|
System.err.println("StartBackupTask field" + ToolKits.getErrorCode());
|
}else {
|
System.out.println("StartBackupTask success");
|
}
|
}
|
|
|
//订阅备份状态
|
public void AttachBackupTaskState() {
|
NET_IN_ATTACH_BACKUP_STATE pIn = new NET_IN_ATTACH_BACKUP_STATE();
|
pIn.nGroupID = 0;
|
pIn.cbAttachState = fAttachBackupTaskState.getInstance();
|
//pIn.lBackupSession = SessionHandle;
|
NET_OUT_ATTACH_BACKUP_STATE pOut = new NET_OUT_ATTACH_BACKUP_STATE();
|
|
pIn.write();
|
pOut.write();
|
AttchHandle = netSdk.CLIENT_AttachBackupTaskState(loginHandle, pIn.getPointer(), pOut.getPointer(), 3000);
|
|
if(AttchHandle.longValue()>0) {
|
System.out.println("AttachBackupTaskState success");
|
}else {
|
System.err.println("AttachBackupTaskState field" + ToolKits.getErrorCode());
|
}
|
}
|
|
//取消订阅备份状态
|
public void DetachBackupTaskState() {
|
Boolean ret = netSdk.CLIENT_DetachBackupTaskState(AttchHandle);
|
|
if(!ret) {
|
System.err.println("DetachBackupTaskState field" + ToolKits.getErrorCode());
|
}else {
|
System.out.println("DetachBackupTaskState success");
|
}
|
}
|
|
/**
|
* 刻录设备回调
|
*/
|
private static class fAttachBackupTaskState implements NetSDKLib.fAttachBackupTaskStateCB {
|
|
private fAttachBackupTaskState() {
|
}
|
|
private static class CallBackHolder {
|
private static fAttachBackupTaskState instance = new fAttachBackupTaskState();
|
}
|
|
public static fAttachBackupTaskState getInstance() {
|
return CallBackHolder.instance;
|
}
|
|
@Override
|
public void invoke(LLong lAttachHandle, Pointer pBuf, Pointer dwUser) {
|
// TODO Auto-generated method stub
|
|
NET_CB_BACKUPTASK_STATE msg =new NET_CB_BACKUPTASK_STATE();
|
ToolKits.GetPointerData(pBuf, msg);
|
System.out.println("备份状态信息个数" + msg.nStatesNum
|
+"备份进度" + msg.stuStates[0].nProgress
|
+"备份状态值" + msg.stuStates[0].emState
|
+"备份的设备名称" + new String(msg.stuStates[0].szDeviceName));
|
}
|
|
}
|
|
|
/**
|
* 设备断线回调
|
*/
|
private static class DisConnectCallBack implements NetSDKLib.fDisConnect {
|
|
private DisConnectCallBack() {
|
}
|
|
private static class CallBackHolder {
|
private static DisConnectCallBack instance = new DisConnectCallBack();
|
}
|
|
public static DisConnectCallBack getInstance() {
|
return CallBackHolder.instance;
|
}
|
|
public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
/**
|
* 设备重连回调
|
*/
|
private static class HaveReConnectCallBack implements NetSDKLib.fHaveReConnect {
|
private HaveReConnectCallBack() {
|
}
|
|
private static class CallBackHolder {
|
private static HaveReConnectCallBack instance = new HaveReConnectCallBack();
|
}
|
|
public static HaveReConnectCallBack getInstance() {
|
return CallBackHolder.instance;
|
}
|
|
public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
|
|
}
|
}
|
|
public void RunTest()
|
{
|
System.out.println("Run Test");
|
CaseMenu menu = new CaseMenu();
|
menu.addItem(new CaseMenu.Item(this , "StartBackupTask" , "StartBackupTask"));
|
menu.addItem(new CaseMenu.Item(this , "AttachBackupTaskState" , "AttachBackupTaskState"));
|
menu.addItem(new CaseMenu.Item(this , "DetachBackupTaskState" , "DetachBackupTaskState"));
|
menu.run();
|
}
|
|
public static void main(String[]args)
|
{
|
SubscriptionBurn demo = new SubscriptionBurn();
|
demo.InitTest();
|
demo.RunTest();
|
demo.LoginOut();
|
}
|
}
|