Example #1
0
        private GpuSpeedViewModels()
        {
            if (NTMinerRoot.IsInDesignMode)
            {
                return;
            }
            this.GpuAllVm = GpuViewModels.Current.FirstOrDefault(a => a.Index == NTMinerRoot.Current.GpuAllId);
            IGpusSpeed gpuSpeeds = NTMinerRoot.Current.GpusSpeed;

            foreach (var item in gpuSpeeds)
            {
                this._list.Add(new GpuSpeedViewModel(item));
            }
            _totalSpeedVm = this._list.FirstOrDefault(a => a.GpuVm.Index == NTMinerRoot.Current.GpuAllId);
            Global.Access <GpuSpeedChangedEvent>(
                Guid.Parse("acb2e5fd-a3ed-4ed6-b8c7-583eafd5e579"),
                "显卡算力变更后刷新VM内存",
                LogEnum.None,
                action: (message) => {
                Guid mainCoinId = NTMinerRoot.Current.MinerProfile.CoinId;
                if (_mainCoinId != mainCoinId)
                {
                    _mainCoinId  = mainCoinId;
                    DateTime now = DateTime.Now;
                    foreach (var item in _list)
                    {
                        item.MainCoinSpeed.Value   = 0;
                        item.MainCoinSpeed.SpeedOn = now;
                        item.DualCoinSpeed.Value   = 0;
                        item.DualCoinSpeed.SpeedOn = now;
                    }
                    IncomeMainCoinPerDay = 0;
                    IncomeDualCoinPerDay = 0;
                }
                int index = message.Source.Gpu.Index;
                GpuSpeedViewModel gpuSpeedVm = _list.FirstOrDefault(a => a.GpuVm.Index == index);
                if (gpuSpeedVm != null)
                {
                    if (message.IsDualSpeed)
                    {
                        gpuSpeedVm.DualCoinSpeed.Update(message.Source.DualCoinSpeed);
                    }
                    else
                    {
                        gpuSpeedVm.MainCoinSpeed.Update(message.Source.MainCoinSpeed);
                    }
                }
                if (index == _totalSpeedVm.GpuVm.Index)
                {
                    IMineContext mineContext = NTMinerRoot.Current.CurrentMineContext;
                    if (mineContext == null)
                    {
                        IncomeMainCoinPerDay = 0;
                        IncomeDualCoinPerDay = 0;
                    }
                    else
                    {
                        if (message.IsDualSpeed)
                        {
                            if (mineContext is IDualMineContext dualMineContext)
                            {
                                IncomeDualCoinPerDay = _totalSpeedVm.DualCoinSpeed.Value * NTMinerRoot.Current.CalcConfigSet.GetIncomePerHashPerDay(dualMineContext.DualCoin);
                            }
                        }
                        else
                        {
                            IncomeMainCoinPerDay = _totalSpeedVm.MainCoinSpeed.Value * NTMinerRoot.Current.CalcConfigSet.GetIncomePerHashPerDay(mineContext.MainCoin);
                        }
                    }
                }
            });
        }
Example #2
0
        public SpeedChartViewModel(GpuSpeedViewModel gpuSpeedVm)
        {
            _gpuSpeedVm = gpuSpeedVm;
            var mapper = Mappers.Xy <MeasureModel>()
                         .X(model => model.DateTime.Ticks) //use DateTime.Ticks as X
                         .Y(model => model.Value);         //use the value property as Y

            //lets save the mapper globally.
            Charting.For <MeasureModel>(mapper);

            Func <double, string> emptyDateTimeFormatter = (d) => { return(string.Empty); };
            Func <double, string> emptySpeedFormatter    = (d) => { return(string.Empty); };
            Func <double, string> dateTimeFormatter      = value => new DateTime((long)value).ToString("HH:mm");
            Func <double, string> speedFormatter         = value => value.ToUnitSpeedText();
            //AxisStep forces the distance between each separator in the X axis
            double axisStep = TimeSpan.FromMinutes(1).Ticks;
            //AxisUnit forces lets the axis know that we are plotting Minutes
            //this is not always necessary, but it can prevent wrong labeling
            double axisUnit = TimeSpan.TicksPerMinute;

            ChartValues <MeasureModel> mainCoinSpeedValues       = new ChartValues <MeasureModel>();
            ChartValues <MeasureModel> mainCoinSpeedValuesShadow = new ChartValues <MeasureModel>();
            LineSeries mainCoinSpeedLs = new LineSeries {
                Title             = gpuSpeedVm.GpuVm.IndexText,
                DataLabels        = false,
                PointGeometrySize = 0,
                StrokeThickness   = 1,
                Values            = mainCoinSpeedValues
            };
            LineSeries mainCoinSpeedLsShadow = new LineSeries {
                Title             = gpuSpeedVm.GpuVm.IndexText,
                DataLabels        = false,
                PointGeometrySize = 0,
                StrokeThickness   = 1,
                Values            = mainCoinSpeedValuesShadow
            };

            this.Series.Add(mainCoinSpeedLs);
            this.SeriesShadow.Add(mainCoinSpeedLsShadow);
            SolidColorBrush black         = new SolidColorBrush(Colors.Black);
            Axis            axisYMainCoin = new Axis()
            {
                LabelFormatter = emptySpeedFormatter,
                MinValue       = 0,
                Separator      = new Separator()
            };

            this._axisY = new AxesCollection()
            {
                axisYMainCoin
            };
            DateTime now = DateTime.Now;

            this._axisX = new AxesCollection()
            {
                new Axis()
                {
                    LabelFormatter = emptyDateTimeFormatter,
                    MaxValue       = now.Ticks,
                    MinValue       = now.Ticks - TimeSpan.FromMinutes(NTMinerRoot.Current.SpeedHistoryLengthByMinute).Ticks,
                    Unit           = axisUnit,
                    Separator      = new Separator()
                    {
                        Step = axisStep
                    }
                }
            };
            Axis axisYShadowMainCoin = new Axis()
            {
                LabelFormatter = speedFormatter,
                MinValue       = 0,
                FontSize       = 14,
                Foreground     = black,
                Separator      = new Separator()
            };

            this._axisYShadow = new AxesCollection()
            {
                axisYShadowMainCoin
            };
            this._axisXShadow = new AxesCollection()
            {
                new Axis()
                {
                    LabelFormatter = dateTimeFormatter,
                    Foreground     = black,
                    MaxValue       = 0,
                    FontSize       = 14,
                    MinValue       = 0,
                    Unit           = axisUnit,
                    Separator      = new Separator()
                    {
                        Step = axisStep
                    }
                }
            };
        }
Example #3
0
        private GpuSpeedViewModels()
        {
            if (Design.IsInDesignMode)
            {
                return;
            }
            this.GpuAllVm = GpuViewModels.Current.FirstOrDefault(a => a.Index == NTMinerRoot.GpuAllId);
            IGpusSpeed gpuSpeeds = NTMinerRoot.Current.GpusSpeed;

            foreach (var item in gpuSpeeds)
            {
                this._list.Add(new GpuSpeedViewModel(item));
            }
            _totalSpeedVm = this._list.FirstOrDefault(a => a.GpuVm.Index == NTMinerRoot.GpuAllId);
            VirtualRoot.On <GpuSpeedChangedEvent>("显卡算力变更后刷新VM内存", LogEnum.DevConsole,
                                                  action: (message) => {
                Guid mainCoinId = NTMinerRoot.Current.MinerProfile.CoinId;
                if (_mainCoinId != mainCoinId)
                {
                    _mainCoinId  = mainCoinId;
                    DateTime now = DateTime.Now;
                    foreach (var item in _list)
                    {
                        item.MainCoinSpeed.Value   = 0;
                        item.MainCoinSpeed.SpeedOn = now;
                        item.DualCoinSpeed.Value   = 0;
                        item.DualCoinSpeed.SpeedOn = now;
                    }
                    IncomeMainCoinPerDay    = 0;
                    IncomeMainCoinUsdPerDay = 0;
                    IncomeMainCoinCnyPerDay = 0;
                    IncomeDualCoinPerDay    = 0;
                    IncomeDualCoinUsdPerDay = 0;
                    IncomeDualCoinCnyPerDay = 0;
                }
                int index = message.Source.Gpu.Index;
                GpuSpeedViewModel gpuSpeedVm = _list.FirstOrDefault(a => a.GpuVm.Index == index);
                if (gpuSpeedVm != null)
                {
                    if (message.IsDualSpeed)
                    {
                        gpuSpeedVm.DualCoinSpeed.Update(message.Source.DualCoinSpeed);
                    }
                    else
                    {
                        gpuSpeedVm.MainCoinSpeed.Update(message.Source.MainCoinSpeed);
                    }
                }
                if (index == _totalSpeedVm.GpuVm.Index)
                {
                    IMineContext mineContext = NTMinerRoot.Current.CurrentMineContext;
                    if (mineContext == null)
                    {
                        IncomeMainCoinPerDay    = 0;
                        IncomeMainCoinUsdPerDay = 0;
                        IncomeMainCoinCnyPerDay = 0;
                        IncomeDualCoinPerDay    = 0;
                        IncomeDualCoinUsdPerDay = 0;
                        IncomeDualCoinCnyPerDay = 0;
                    }
                    else
                    {
                        if (message.IsDualSpeed)
                        {
                            if (mineContext is IDualMineContext dualMineContext)
                            {
                                IncomePerDay incomePerDay = NTMinerRoot.Current.CalcConfigSet.GetIncomePerHashPerDay(dualMineContext.DualCoin.Code);
                                IncomeDualCoinPerDay      = _totalSpeedVm.DualCoinSpeed.Value * incomePerDay.IncomeCoin;
                                IncomeDualCoinUsdPerDay   = _totalSpeedVm.DualCoinSpeed.Value * incomePerDay.IncomeUsd;
                                IncomeDualCoinCnyPerDay   = _totalSpeedVm.DualCoinSpeed.Value * incomePerDay.IncomeCny;
                            }
                        }
                        else
                        {
                            IncomePerDay incomePerDay = NTMinerRoot.Current.CalcConfigSet.GetIncomePerHashPerDay(mineContext.MainCoin.Code);
                            IncomeMainCoinPerDay      = _totalSpeedVm.MainCoinSpeed.Value * incomePerDay.IncomeCoin;
                            IncomeMainCoinUsdPerDay   = _totalSpeedVm.MainCoinSpeed.Value * incomePerDay.IncomeUsd;
                            IncomeMainCoinCnyPerDay   = _totalSpeedVm.MainCoinSpeed.Value * incomePerDay.IncomeCny;
                        }
                    }
                }
            });
        }