Ejemplo n.º 1
0
        private static CCRecord ReadRecord(CCArguments args)
        {
            string ddCmdStr = args.Compile();

            ddCmdStr = String.Format("\"{0}\"", ddCmdStr);

            var ddCmd = CliCommand.Create(CliScope.AdbExecOut, ddCmdStr);


            var ddRes = CliResult.Run(ddCmd, CliDataType.ByteArray);

            var ccRec = new CCRecord();

            lock (ccRec) {
                ccRec.BinaryRaw = ddRes.ByteArray;
                //ccRec.StatsRaw = Android.Value.ReadFile(args.StatsRedirect);
            }

            //ddRes.CommandProcess.Close();
            //ddRes.CommandProcess.WaitForExit();
            //ddRes.CommandProcess.Kill();


            return(ccRec);
        }
Ejemplo n.º 2
0
        public static void Repull(string remote, string?dest = null)
        {
            if (dest == null)
            {
                string?fn  = Path.GetFileNameWithoutExtension(remote);
                string?ext = Path.GetExtension(remote);

                string nn = fn + "_out" + ext;

                dest = Path.Combine(DefaultOutput, nn);
            }

            if (BlockSize >= BlockSizeMaxBytes)
            {
                Console.WriteLine("Warning: Using a block size larger than the recommended maximum");
            }

            if (File.Exists(dest))
            {
                File.Delete(dest);
            }

            long remSize = Android.GetFileSize(remote);
            long nBlocks = SizeToBlocks(remSize, BlockSize);

            if (BlockSize >= remSize)
            {
                nBlocks = 1;
            }

            Console.WriteLine("\nRemote file: {0}", remote);
            Console.WriteLine("Remote size: {0} bytes", remSize);

            Console.WriteLine("\nBlock size: {0} bytes ({1} bv, {2} bu)", BlockSize, BlockValue, BlockUnit);

            Console.WriteLine("\nDestination file: {0}", dest);


            double rateSum = 0;

            const int RND = 2;

            int nbytes = 0;

            var outStream = new FileStream(dest, FileMode.Append);

            var sw = Stopwatch.StartNew();

            for (int i = 0; i <= nBlocks; i++)
            {
                var start = DateTimeOffset.Now;

                var ccArg = new CCArguments
                {
                    Count          = 1,
                    InputBlockSize = BlockSize,
                    InputFile      = remote,
                    Skip           = i,
                };


                var    res    = ReadRecord(ccArg);
                byte[] resBin = res.BinaryRaw;

                lock (resBin) {
                    // ~123ms
                    outStream.Write(resBin, 0, resBin.Length);
                    outStream.Flush();
                    nbytes += resBin.Length;
                }


                var end = DateTime.Now;

                var duration = end - start;

                double bytesPerSec     = resBin.Length / duration.TotalSeconds;
                double megabytesPerSec = Math.Round(ToMegabytes(bytesPerSec), RND);

                rateSum += megabytesPerSec;

                double avgMegabytesPerSec = Math.Round(rateSum / i, RND);

                double percent = (double)nbytes / remSize;

                Console.Write("\r{0}/{1} ({2} MB/sec) ({3} MB/sec avg) ({4:P})",
                              i, nBlocks, megabytesPerSec, avgMegabytesPerSec, percent);


                //Console.Clear();
            }

            outStream.Flush();
            outStream.Close();

            sw.Stop();

            Console.WriteLine("Completed in {0:F} sec", sw.Elapsed.TotalSeconds);


            Console.WriteLine("\n\nWrote data to {0}!\n\n", dest);

            if (RunChecks)
            {
                Console.WriteLine("Verifying files");

                var destSize = new FileInfo(dest).Length;

                var destSha1 = Sha1_Hash.GetFileHashString(dest);

                var remSha1 = Android.GetFileSha1Hash(remote);

                Console.WriteLine("Size equal: {0} | Sha1 equal: {1}",
                                  CliUtilities.GetSuccessChar(destSize, remSize),
                                  CliUtilities.GetSuccessChar(destSha1, remSha1));
            }
        }