wangzhengquan
2020-09-10 591aacee97f4a6486631c38a6b418e20b2c4109c
device/hcnetdisk.c
@@ -1,5 +1,4 @@
#include "netdisk.h"
#include "hcnetdisk.h"
 
bool HCNetdisk::envInited = false;
@@ -36,8 +35,8 @@
HCNetdisk::HCNetdisk(const std::string &_devicename):Netdisk(_devicename){
HCNetdisk::HCNetdisk(): Netdisk(){
  deviceType="HC";
}
int HCNetdisk::_login(Netdisk_LoginInfo &loginInfo) {
@@ -55,6 +54,7 @@
  NET_DVR_DEVICEINFO_V40 struDeviceInfo = {0};
  //lUserID = 0;
  lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo);
  printf("lUserID = %d\n", lUserID);
  if (lUserID < 0)
  {
    printf("Login error, %d\n", NET_DVR_GetLastError());
@@ -62,7 +62,8 @@
    return -1;
  }
  printf("lUserID = %ld\n", lUserID);
  loginInfo.userid = std::to_string(lUserID);
  userid = lUserID;
  username = loginInfo.username;
  password = loginInfo.password;
@@ -70,10 +71,8 @@
  port = loginInfo.port;
  startChannel = struDeviceInfo.struDeviceV30.byStartDChan;
  maxChannels = struDeviceInfo.struDeviceV30.byIPChanNum + struDeviceInfo.struDeviceV30.byHighDChanNum * 256;
  deviceInfo.startChannel = struDeviceInfo.struDeviceV30.byStartDChan;
  deviceInfo.maxChannels = struDeviceInfo.struDeviceV30.byIPChanNum + struDeviceInfo.struDeviceV30.byHighDChanNum * 256;
  return 0;
}
@@ -81,16 +80,14 @@
int HCNetdisk::login(Netdisk_LoginInfo &loginInfo) {
   
  //_login(loginInfo);
  Netdisk::addLoginInfo(loginInfo);
  return _login(loginInfo);
  //Netdisk::addLoginInfo(loginInfo);
  return 0;
}
int HCNetdisk::logout() {
   //注销用户
   NET_DVR_Logout(userid);
   userid = -1;
   return 0;
}
@@ -99,8 +96,8 @@
   char destfile[1024];
   int i = 0;
   Netdisk_LoginInfo loginInfo = Netdisk::getLoginInfo(request.loginUUID);
   _login(loginInfo);
   // Netdisk_LoginInfo loginInfo = Netdisk::getLoginInfo(request.loginUUID);
   // _login(loginInfo);
   
   start = request.start;
@@ -117,15 +114,20 @@
      // printf("end   = %s", asctime(&end));
      sprintf(destfile, "%s/%s-%d-%ld-%d", 
          request.destpath.c_str(), 
         devicename.c_str(),
         deviceType.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);
      }
    std::cout << "destfile:" << destfile << std::endl;
    char *destfiledup = strdup(destfile);
      if(downloadByTime_wrapper(userid, request.channel, &start, &end, destfiledup) != -1) {
      if(files != NULL) {
        // std::cout << "push destfile:" << destfile << std::endl;
        files->push_back(destfile);
      }
    }
    free(destfiledup);
      start = end;
      i++;
   }
@@ -138,7 +140,7 @@
/**
 * @return success: 0, failture : -1
 */
int HCNetdisk::downloadByTime_wrapper(long userid, int channel, struct tm *start, struct tm *end, char *destfile) {
int HCNetdisk::downloadByTime_wrapper(const long userid, const int channel, const struct tm *start, const struct tm *end, const char *destfile) {
  NET_DVR_FILECOND_V40 struFileCond = {0};
  struFileCond.dwFileType = 0xFF;
  
@@ -184,7 +186,8 @@
      char strFileName[256] = {0};
      if (destfile != NULL) {
        sprintf(strFileName, "%s", destfile);
        char *dir = dirname(strdup(destfile));
        //char *dir = dirname(strdup(destfile));
        char *dir = dirname(const_cast<char *>(destfile));
        printf("dir === %s\n", dir);
        if ((mkdir(dir, DIR_MODE) == -1) && (errno != EEXIST)) {
            err_msg(errno, "hc_downloadByTime mkdir error ");
@@ -219,9 +222,8 @@
int HCNetdisk::saveRecordFile(int userId, char * srcfile, char * destfile)
int HCNetdisk::saveRecordFile( int userId,  char * srcfile,  char * destfile)
{
  printf("destfile=%s\n", destfile);
  int bRes = 1;
  int hPlayback = 0;
//按文件名下载录像
@@ -239,14 +241,13 @@
    return bRes;
  }
  int nPos = 0;
  //下载进度
  for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayback))
  {
    printf("Be downloading...%d %%\n", nPos);
    sleep(1);
//下载进度
//millisecond
  }
  printf("have got %d\n", nPos);
  // printf("have got %d\n", nPos);
//停止下载
  if (!NET_DVR_StopGetFile(hPlayback))
  {
@@ -254,7 +255,7 @@
    bRes = -1;
    return bRes;
  }
  printf("%s\n", srcfile);
  // printf("%s\n", srcfile);
  if (nPos < 0 || nPos > 100)
  {
    printf("download err [%d]\n", NET_DVR_GetLastError());