コード例 #1
0
ファイル: WorkUnitModel.cs プロジェクト: benjaminzink/hfm-net
        /// <summary>
        /// Time per frame (TPF) of the unit
        /// </summary>
        public TimeSpan GetFrameTime(PPDCalculation ppdCalculation)
        {
            int rawTime = GetRawTime(ppdCalculation);

            if (rawTime != 0)
            {
                return(TimeSpan.FromSeconds(rawTime));
            }

            var benchmark = SlotModel.Client.BenchmarkService.GetBenchmark(SlotModel.SlotIdentifier, BenchmarkIdentifier);

            return(benchmark?.AverageFrameTime ?? TimeSpan.Zero);
        }
コード例 #2
0
ファイル: WorkUnitModel.cs プロジェクト: benjaminzink/hfm-net
        /// <summary>
        /// Frame Time per section based on current PPD calculation setting (readonly)
        /// </summary>
        public int GetRawTime(PPDCalculation ppdCalculation)
        {
            switch (ppdCalculation)
            {
            case PPDCalculation.LastFrame:
                return(WorkUnit.FramesObserved > 1 ? Convert.ToInt32(WorkUnit.CurrentFrame.Duration.TotalSeconds) : 0);

            case PPDCalculation.LastThreeFrames:
                return(WorkUnit.FramesObserved > 3 ? GetDurationInSeconds(3) : 0);

            case PPDCalculation.AllFrames:
                return(WorkUnit.FramesObserved > 0 ? GetDurationInSeconds(WorkUnit.FramesObserved) : 0);

            case PPDCalculation.EffectiveRate:
                return(GetRawTimePerUnitDownload());
            }

            return(0);
        }
コード例 #3
0
ファイル: WorkUnitModel.cs プロジェクト: benjaminzink/hfm-net
        public void ShowProductionTrace(ILogger logger, string slotName, SlotStatus status, PPDCalculation ppdCalculation, BonusCalculation bonusCalculation)
        {
            // test the level
            if (!logger.IsDebugEnabled)
            {
                return;
            }

            if (ProteinIsUnknown(CurrentProtein))
            {
                logger.Debug(String.Format(Logger.NameFormat, slotName, "Protein is unknown... 0 PPD."));
                return;
            }

            switch (bonusCalculation)
            {
            case BonusCalculation.DownloadTime:
                logger.Debug(String.Format(Logger.NameFormat, slotName,
                                           status == SlotStatus.RunningNoFrameTimes
                            ? "Calculate Bonus PPD by Frame Time."
                            : "Calculate Bonus PPD by Download Time."));
                break;

            case BonusCalculation.FrameTime:
                logger.Debug(String.Format(Logger.NameFormat, slotName, "Calculate Bonus PPD by Frame Time."));
                break;

            default:
                logger.Debug(String.Format(Logger.NameFormat, slotName, "Calculate Standard PPD."));
                break;
            }

            TimeSpan frameTime = GetFrameTime(ppdCalculation);
            var      noBonus   = CurrentProtein.GetProteinProduction(frameTime, TimeSpan.Zero);
            TimeSpan unitTimeByDownloadTime = GetUnitTimeByDownloadTime(frameTime);
            var      bonusByDownload        = CurrentProtein.GetProteinProduction(frameTime, unitTimeByDownloadTime);
            TimeSpan unitTimeByFrameTime    = GetUnitTimeByFrameTime(frameTime);
            var      bonusByFrame           = CurrentProtein.GetProteinProduction(frameTime, unitTimeByFrameTime);

            logger.Debug(CreateProductionDebugOutput(WorkUnit.ToShortProjectString(), frameTime, CurrentProtein, noBonus,
                                                     unitTimeByDownloadTime, bonusByDownload,
                                                     unitTimeByFrameTime, bonusByFrame));
        }
コード例 #4
0
ファイル: WorkUnitModel.cs プロジェクト: benjaminzink/hfm-net
 /// <summary>
 /// Estimated time of arrival (ETA) for this unit
 /// </summary>
 public DateTime GetEtaDate(PPDCalculation ppdCalculation)
 {
     return(WorkUnit.UnitRetrievalTime.Add(GetEta(ppdCalculation)));
 }
コード例 #5
0
ファイル: WorkUnitModel.cs プロジェクト: benjaminzink/hfm-net
 /// <summary>
 /// Estimated time of arrival (ETA) for this unit
 /// </summary>
 public TimeSpan GetEta(PPDCalculation ppdCalculation)
 {
     return(GetEta(GetFrameTime(ppdCalculation)));
 }
コード例 #6
0
ファイル: WorkUnitModel.cs プロジェクト: benjaminzink/hfm-net
        /// <summary>
        /// Points per day (PPD) rating for this unit
        /// </summary>
        public double GetPPD(SlotStatus status, PPDCalculation ppdCalculation, BonusCalculation calculateBonus)
        {
            TimeSpan frameTime = GetFrameTime(ppdCalculation);

            return(GetPPD(frameTime, GetUnitTimeByDownloadTime(frameTime), GetUnitTimeByFrameTime(frameTime), status, calculateBonus));
        }
コード例 #7
0
ファイル: WorkUnitModel.cs プロジェクト: benjaminzink/hfm-net
 /// <summary>
 /// Units per day (UPD) rating for this unit
 /// </summary>
 public double GetUPD(PPDCalculation ppdCalculation)
 {
     return(ProductionCalculator.GetUPD(GetFrameTime(ppdCalculation), CurrentProtein.Frames));
 }
コード例 #8
0
ファイル: WorkUnitModel.cs プロジェクト: benjaminzink/hfm-net
 public bool IsUsingBenchmarkFrameTime(PPDCalculation ppdCalculation)
 {
     return(GetRawTime(ppdCalculation) == 0);
 }