wangzhengquan
2020-06-08 f48e2e378bacffb96cb5575876a7b2f0081de0be
netdisk/hcnetdisk.c
@@ -1,12 +1,18 @@
#include "netdisk.h"
#include "hcnetdisk.h"
 
bool HCNetdisk::envInited = false;
void HCNetdisk::netdisk_init(HCNetdisk_EnvConfig &config){
   if (&config != NULL && config.libpath.length() != 0) {
/**
 * 设备初始化
 */
void HCNetdisk::netdisk_init(Netdisk_EnvConfig *config){
   if (envInited) {
      return;
   }
   if (config != NULL && config->libpath.length() != 0) {
     NET_DVR_LOCAL_SDK_PATH struComPath = {0};
     sprintf(struComPath.sPath, "%s", config.libpath.c_str()); //HCNetSDKCom文件夹所在的路径
     sprintf(struComPath.sPath, "%s", config->libpath.c_str()); //HCNetSDKCom文件夹所在的路径
     NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SDK_PATH, &struComPath);
   }
@@ -16,7 +22,102 @@
   //设置连接时间与重连时间
   NET_DVR_SetConnectTime(2000, 1);
   NET_DVR_SetReconnect(10000, true);
   envInited = true;
}
void HCNetdisk::netdisk_deinit() {
   if (!envInited) {
      return;
   }
   NET_DVR_Cleanup();
   envInited = false;
}
int HCNetdisk::login(Netdisk_LoginInfo &loginInfo) {
  //登录参数,包括设备地址、登录用户、密码等
  NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
  struLoginInfo.bUseAsynLogin = 0; //同步登录方式
  strcpy(struLoginInfo.sDeviceAddress, loginInfo.host.c_str()); //设备IP地址
  struLoginInfo.wPort = loginInfo.port; //设备服务端口
  strcpy(struLoginInfo.sUserName, loginInfo.username.c_str()); //设备登录用户名
  strcpy(struLoginInfo.sPassword, loginInfo.password.c_str()); //设备登录密码
// 注册设备
  LONG lUserID;
  NET_DVR_DEVICEINFO_V40 struDeviceInfo = {0};
  //lUserID = 0;
  lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo);
  if (lUserID < 0)
  {
    printf("Login error, %d\n", NET_DVR_GetLastError());
    NET_DVR_Cleanup();
    return -1;
  }
  printf("lUserID = %ld\n", lUserID);
  userid = lUserID;
  username = loginInfo.username;
  password = loginInfo.password;
  host = loginInfo.host;
  port = loginInfo.port;
  startChannel = struDeviceInfo.struDeviceV30.byStartDChan;
  maxChannels = struDeviceInfo.struDeviceV30.byIPChanNum + struDeviceInfo.struDeviceV30.byHighDChanNum * 256;
  return 0;
}
int HCNetdisk::logout() {
   //注销用户
   NET_DVR_Logout(userid);
   userid = -1;
   return 0;
}
int HCNetdisk::downloadByTime(Netdisk_DownloadRequest &request, std::vector<std::string> *files) {
   struct tm start, end;
   char destfile[1024];
   int i = 0;
   start = request.start;
   while(mktime(&start) < mktime(&(request.end))) {
      if (difftime(mktime(&(request.end)), mktime(&start)) > 10 * 60) {
         end = start;
         end.tm_min += 10;
         mktime(&end);
      } else {
         end = request.end;
      }
      // printf("start = %s", asctime(&start));
      // printf("end   = %s", asctime(&end));
      sprintf(destfile, "%s/%s-%d-%ld-%d",
          request.destpath.c_str(),
         devicename.c_str(),
          request.channel,
          mktime(&start),
          i);
      // printf("%s\n", destfile);
      downloadByTime_wrapper(userid, request.channel, &start, &end, destfile);
      if(files != NULL) {
         files->push_back(destfile);
      }
      start = end;
      i++;
   }
   return 0;
}
HCNetdisk::~HCNetdisk() { }
/**
 * @return success: 0, failture : -1
@@ -150,77 +251,3 @@
  }
}
int HCNetdisk::login(Netdisk_LoginInfo &loginInfo) {
  //登录参数,包括设备地址、登录用户、密码等
  NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
  struLoginInfo.bUseAsynLogin = 0; //同步登录方式
  strcpy(struLoginInfo.sDeviceAddress, loginInfo.host.c_str()); //设备IP地址
  struLoginInfo.wPort = loginInfo.port; //设备服务端口
  strcpy(struLoginInfo.sUserName, loginInfo.username.c_str()); //设备登录用户名
  strcpy(struLoginInfo.sPassword, loginInfo.password.c_str()); //设备登录密码
// 注册设备
  LONG lUserID;
  NET_DVR_DEVICEINFO_V40 struDeviceInfo = {0};
  //lUserID = 0;
  lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo);
  if (lUserID < 0)
  {
    printf("Login error, %d\n", NET_DVR_GetLastError());
    NET_DVR_Cleanup();
    return -1;
  }
  // printf("lUserID = %ld\n", lUserID);
  userid = lUserID;
  username = loginInfo.username;
  password = loginInfo.password;
  host = loginInfo.host;
  port = loginInfo.port;
  return 0;
}
int HCNetdisk::logout() {
   //注销用户
   NET_DVR_Logout(userid);
   //释放 SDK 资源
   NET_DVR_Cleanup();
   userid = -1;
   return 0;
}
int HCNetdisk::downloadByTime(Netdisk_DownloadRequest &request) {
   struct tm start, end;
   char destfile[1024];
   int i = 0;
   start = request.start;
   while(mktime(&start) < mktime(&(request.end))) {
      if (difftime(mktime(&(request.end)), mktime(&start)) > 10 * 60) {
         end = start;
         end.tm_min += 10;
         mktime(&end);
      } else {
         end = request.end;
      }
      // printf("start = %s", asctime(&start));
      // printf("end   = %s", asctime(&end));
       sprintf(destfile, "%s/%s-%d-%ld-%d",
          request.destpath.c_str(),
         devicename.c_str(),
          request.channel,
          mktime(&start),
          i);
      // printf("%s\n", destfile);
      downloadByTime_wrapper(userid, request.channel, &start, &end, destfile);
      start = end;
      i++;
   }
   return 0;
}