Пример #1
0
  /*
   * Download a File from the Reciever to the
   * Destination File specified in pcDstFile
   */
  public boolean Download(DvrFile poFile, String pcDstFile) {
    /*
     * Parameter Checks
     */
    if (pcDstFile.endsWith("/")) {
      pcDstFile = pcDstFile + poFile.getUniqueFileName();
    }
    String lcPostCopyAction = Props.Get("POSTCOPYSCRIPT");
    int lnPostCopyThreads = Integer.parseInt(Props.Get("POSTCOPYTHREADCOUNT"));
    boolean lbStartDownload = false;
    boolean lbPostCopyAction = false;
    boolean lbReturn = false;

    if (lcPostCopyAction.equals("")) {
      Lock();
    } else {
      lbPostCopyAction = true;
      do {
        Lock();
        if (m_nActivePostCopyThreads < lnPostCopyThreads) {
          m_nActivePostCopyThreads++;
          lbStartDownload = true;
        } else {
          Unlock();
          try {
            Thread.sleep(1000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      } while (!lbStartDownload);
    }
    /*
     * Socket Streams
     */
    ByteArrayOutputStream loSocketWriteLow = new ByteArrayOutputStream();
    DataOutputStream loSocketWrite = new DataOutputStream(loSocketWriteLow);
    String laDstFiles[];
    try {
      Logfile.Write("Copy File " + poFile.getFileName() + " to " + pcDstFile);

      if (poFile.m_nType == 1) {
        write(new byte[] {Header.PT_GETFILE_BYNAME, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0});
        readbyte();
        write(poFile.m_oParent.m_cRemoteName.getBytes("CP1252"));
        readbyte();
        ping();
        write(poFile.getFileName().getBytes("CP1252"));
        readbyte();
        laDstFiles = new String[] {pcDstFile};
        readstream_singlepart(createdstfile(pcDstFile));
      } else {
        loSocketWrite.writeByte(Header.PT_GETFILE_BYRECNO); // Download Command;
        loSocketWrite.writeShort(poFile.getIndex()); // File Index	
        loSocketWrite.writeLong(0); // Start Position (maybe!!)
        write(loSocketWriteLow.toByteArray()); // Send Message to DVR

        byte lbResponse = readbyte();
        long lnFileSize = readlong();
        byte lbFileCount = readbyte();
        BufferedOutputStream[] laWrite = new BufferedOutputStream[lbFileCount];
        laDstFiles = new String[lbFileCount];
        for (int i = 0; i < laWrite.length; i++) {
          byte lbFileNo = readbyte();
          laDstFiles[i] = pcDstFile + "." + readstring().toLowerCase();
          laWrite[lbFileNo] = createdstfile(laDstFiles[i]);
        }
        write(Header.PT_ACK);
        readstream_multipart(laWrite);
      }
      Logfile.Write("Transfer Complete");
      if (lbPostCopyAction) {
        PostCopy loPostCopy = new PostCopy(lcPostCopyAction, poFile, laDstFiles[0], this);
        loPostCopy.start();
      }
      lbReturn = true;
    } catch (IOException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      Unlock();
    }
    return lbReturn;
  }