Example #1
0
 public KernelOutputViewModel(IKernelOutput data) : this(data.GetId())
 {
     _name = data.Name;
     _kernelRestartKeyword     = data.KernelRestartKeyword;
     _isDualInSameLine         = data.IsDualInSameLine;
     _totalSpeedPattern        = data.TotalSpeedPattern;
     _gpuSpeedPattern          = data.GpuSpeedPattern;
     _gpuGotOneIncorrectShare  = data.GpuGotOneIncorrectShare;
     _totalSharePattern        = data.TotalSharePattern;
     _acceptSharePattern       = data.AcceptSharePattern;
     _foundOneShare            = data.FoundOneShare;
     _acceptOneShare           = data.AcceptOneShare;
     _rejectSharePattern       = data.RejectSharePattern;
     _rejectOneShare           = data.RejectOneShare;
     _rejectPercentPattern     = data.RejectPercentPattern;
     _dualGpuSpeedPattern      = data.DualGpuSpeedPattern;
     _dualAcceptSharePattern   = data.DualAcceptSharePattern;
     _dualAcceptOneShare       = data.DualAcceptOneShare;
     _dualRejectSharePattern   = data.DualRejectSharePattern;
     _dualRejectOneShare       = data.DualRejectOneShare;
     _dualRejectPercentPattern = data.DualRejectPercentPattern;
     _dualTotalSharePattern    = data.DualTotalSharePattern;
     _dualTotalSpeedPattern    = data.DualTotalSpeedPattern;
     _poolDelayPattern         = data.PoolDelayPattern;
     _dualPoolDelayPattern     = data.DualPoolDelayPattern;
     _speedUnit     = data.SpeedUnit;
     _dualSpeedUnit = data.DualSpeedUnit;
     _gpuBaseIndex  = data.GpuBaseIndex;
     _isMapGpuIndex = data.IsMapGpuIndex;
 }
Example #2
0
        private static void PickRejectPattern(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string rejectSharePattern = kernelOutput.RejectSharePattern;

            if (isDual)
            {
                rejectSharePattern = kernelOutput.DualRejectSharePattern;
            }
            if (string.IsNullOrEmpty(rejectSharePattern))
            {
                return;
            }
            var match = Regex.Match(input, rejectSharePattern);

            if (match.Success)
            {
                string rejectShareText = match.Groups["rejectShare"].Value;

                int rejectShare;
                if (int.TryParse(rejectShareText, out rejectShare))
                {
                    ICoinShare share = root.CoinShareSet.GetOrCreate(coin.GetId());
                    share.RejectCount = rejectShare;
                    share.ShareOn     = DateTime.Now;
                    Global.Happened(new ShareChangedEvent(share));
                }
            }
        }
Example #3
0
        private static void PickAcceptShare(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string acceptSharePattern = kernelOutput.AcceptSharePattern;

            if (isDual)
            {
                acceptSharePattern = kernelOutput.DualAcceptSharePattern;
            }
            if (string.IsNullOrEmpty(acceptSharePattern))
            {
                return;
            }
            var match = Regex.Match(input, acceptSharePattern, RegexOptions.Compiled);

            if (match.Success)
            {
                if (!isDual)
                {
                }
                string acceptShareText = match.Groups[Consts.AcceptShareGroupName].Value;
                int    acceptShare;
                if (int.TryParse(acceptShareText, out acceptShare))
                {
                    root.CoinShareSet.UpdateShare(coin.GetId(), acceptShareCount: acceptShare, rejectShareCount: null, now: DateTime.Now);
                }
            }
        }
Example #4
0
        private static void PickRejectPattern(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string rejectSharePattern = kernelOutput.RejectSharePattern;

            if (isDual)
            {
                rejectSharePattern = kernelOutput.DualRejectSharePattern;
            }
            if (string.IsNullOrEmpty(rejectSharePattern))
            {
                return;
            }
            var match = Regex.Match(input, rejectSharePattern, RegexOptions.Compiled);

            if (match.Success)
            {
                string rejectShareText = match.Groups["rejectShare"].Value;

                int rejectShare;
                if (int.TryParse(rejectShareText, out rejectShare))
                {
                    root.CoinShareSet.UpdateShare(coin.GetId(), acceptShareCount: null, rejectShareCount: rejectShare, now: DateTime.Now);
                }
            }
        }
 public KernelOutputViewModel(IKernelOutput data) : this(data.GetId())
 {
     _name = data.Name;
     _kernelRestartKeyword     = data.KernelRestartKeyword;
     _prependDateTime          = data.PrependDateTime;
     _isDualInSameLine         = data.IsDualInSameLine;
     _totalSpeedPattern        = data.TotalSpeedPattern;
     _gpuSpeedPattern          = data.GpuSpeedPattern;
     _totalSharePattern        = data.TotalSharePattern;
     _acceptSharePattern       = data.AcceptSharePattern;
     _acceptOneShare           = data.AcceptOneShare;
     _rejectSharePattern       = data.RejectSharePattern;
     _rejectOneShare           = data.RejectOneShare;
     _rejectPercentPattern     = data.RejectPercentPattern;
     _dualGpuSpeedPattern      = data.DualGpuSpeedPattern;
     _dualAcceptSharePattern   = data.DualAcceptSharePattern;
     _dualAcceptOneShare       = data.DualAcceptOneShare;
     _dualRejectSharePattern   = data.DualRejectSharePattern;
     _dualRejectOneShare       = data.DualRejectOneShare;
     _dualRejectPercentPattern = data.DualRejectPercentPattern;
     _dualTotalSharePattern    = data.DualTotalSharePattern;
     _dualTotalSpeedPattern    = data.DualTotalSpeedPattern;
     _poolDelayPattern         = data.PoolDelayPattern;
     _dualPoolDelayPattern     = data.DualPoolDelayPattern;
 }
Example #6
0
        public MineContext(
            string minerName,
            ICoin mainCoin,
            IPool mainCoinPool,
            IKernel kernel,
            IKernelInput kernelInput,
            IKernelOutput kernelOutput,
            ICoinKernel coinKernel,
            string mainCoinWallet,
            string commandLine,
            Dictionary <string, string> parameters,
            Dictionary <Guid, string> fragments,
            Dictionary <Guid, string> fileWriters,
            int[] useDevices)
        {
            this.Fragments              = fragments;
            this.FileWriters            = fileWriters;
            this.Id                     = Guid.NewGuid();
            this.MinerName              = minerName;
            this.MainCoin               = mainCoin;
            this.MainCoinPool           = mainCoinPool;
            this.Kernel                 = kernel;
            this.CoinKernel             = coinKernel;
            this.MainCoinWallet         = mainCoinWallet;
            this.AutoRestartKernelCount = 0;
            this.KernelSelfRestartCount = 0;
            this.CommandLine            = commandLine ?? string.Empty;
            this.MineStartedOn          = DateTime.MinValue;
            this.Parameters             = parameters;
            this.UseDevices             = useDevices;
            this.KernelInput            = kernelInput;
            this.KernelOutput           = kernelOutput;

            this.NewLogFileName();
        }
Example #7
0
 public void Pick(Guid kernelId, ref string input, IMineContext mineContext)
 {
     try {
         InitOnece();
         if (!_dicById.ContainsKey(kernelId))
         {
             return;
         }
         if (string.IsNullOrEmpty(input))
         {
             return;
         }
         IKernelOutput kernelOutput = _dicById[kernelId];
         ICoin         coin         = mineContext.MainCoin;
         bool          isDual       = false;
         if ((mineContext is IDualMineContext dualMineContext) && !input.Contains(mineContext.MainCoin.Code))
         {
             isDual = true;
             coin   = dualMineContext.DualCoin;
         }
         PickTotalSpeed(_root, input, kernelOutput, coin, isDual);
         PickGpuSpeed(_root, input, kernelOutput, coin, isDual);
         PickTotalShare(_root, input, kernelOutput, coin, isDual);
         PickAcceptShare(_root, input, kernelOutput, coin, isDual);
         PickAcceptOneShare(_root, input, kernelOutput, coin, isDual);
         PickRejectPattern(_root, input, kernelOutput, coin, isDual);
         PickRejectOneShare(_root, input, kernelOutput, coin, isDual);
         PickRejectPercent(_root, input, kernelOutput, coin, isDual);
     }
     catch (Exception e) {
         Logger.ErrorDebugLine(e.Message, e);
     }
 }
Example #8
0
        private static void PickRejectPattern(INTMinerContext root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string rejectSharePattern = kernelOutput.RejectSharePattern;

            if (isDual)
            {
                rejectSharePattern = kernelOutput.DualRejectSharePattern;
            }
            if (string.IsNullOrEmpty(rejectSharePattern))
            {
                return;
            }
            Regex regex = VirtualRoot.GetRegex(rejectSharePattern);
            var   match = regex.Match(input);

            if (match.Success)
            {
                string rejectShareText = match.Groups[NTKeyword.RejectShareGroupName].Value;

                if (int.TryParse(rejectShareText, out int rejectShare))
                {
                    root.CoinShareSet.UpdateShare(coin.GetId(), acceptShareCount: null, rejectShareCount: rejectShare, now: DateTime.Now);
                }
            }
        }
Example #9
0
        private static void PickTotalShare(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string totalSharePattern = kernelOutput.TotalSharePattern;

            if (isDual)
            {
                totalSharePattern = kernelOutput.DualTotalSharePattern;
            }
            if (string.IsNullOrEmpty(totalSharePattern))
            {
                return;
            }
            Regex regex = VirtualRoot.GetRegex(totalSharePattern);
            var   match = regex.Match(input);

            if (match.Success)
            {
                string totalShareText = match.Groups[NTKeyword.TotalShareGroupName].Value;
                if (int.TryParse(totalShareText, out int totalShare))
                {
                    ICoinShare share = root.CoinShareSet.GetOrCreate(coin.GetId());
                    root.CoinShareSet.UpdateShare(coin.GetId(), acceptShareCount: totalShare - share.RejectShareCount, rejectShareCount: null, now: DateTime.Now);
                }
            }
        }
 public static bool GetIsRejectOneGpuShare(this IKernelOutput kernelOutput)
 {
     if (kernelOutput == null)
     {
         return(false);
     }
     return(!string.IsNullOrEmpty(kernelOutput.RejectOneShare) || !string.IsNullOrEmpty(kernelOutput.GpuRejectShare));
 }
Example #11
0
        public bool TryGetKernelOutput(Guid id, out IKernelOutput kernelOutput)
        {
            InitOnece();
            var result = _dicById.TryGetValue(id, out KernelOutputData data);

            kernelOutput = data;
            return(result);
        }
Example #12
0
        private static void PickTotalSpeed(INTMinerRoot root, string input, IKernelOutput kernelOutput, bool isDual)
        {
            string totalSpeedPattern = kernelOutput.TotalSpeedPattern;

            if (isDual)
            {
                totalSpeedPattern = kernelOutput.DualTotalSpeedPattern;
            }
            if (string.IsNullOrEmpty(totalSpeedPattern))
            {
                return;
            }
            Regex regex = VirtualRoot.GetRegex(totalSpeedPattern);
            Match match = regex.Match(input);

            if (match.Success)
            {
                string totalSpeedText = match.Groups[NTKeyword.TotalSpeedGroupName].Value;
                string totalSpeedUnit = match.Groups[NTKeyword.TotalSpeedUnitGroupName].Value;
                if (string.IsNullOrEmpty(totalSpeedUnit))
                {
                    if (isDual)
                    {
                        totalSpeedUnit = kernelOutput.DualSpeedUnit;
                    }
                    else
                    {
                        totalSpeedUnit = kernelOutput.SpeedUnit;
                    }
                }
                double totalSpeed;
                if (double.TryParse(totalSpeedText, out totalSpeed))
                {
                    double     totalSpeedL = totalSpeed.FromUnitSpeed(totalSpeedUnit);
                    var        now         = DateTime.Now;
                    IGpusSpeed gpuSpeeds   = NTMinerRoot.Instance.GpusSpeed;
                    gpuSpeeds.SetCurrentSpeed(NTMinerRoot.GpuAllId, totalSpeedL, isDual, now);
                    string gpuSpeedPattern = kernelOutput.GpuSpeedPattern;
                    if (isDual)
                    {
                        gpuSpeedPattern = kernelOutput.DualGpuSpeedPattern;
                    }
                    if (string.IsNullOrEmpty(gpuSpeedPattern) && root.GpuSet.Count != 0)
                    {
                        // 平分总算力
                        double gpuSpeedL = totalSpeedL / root.GpuSet.Count;
                        foreach (var item in gpuSpeeds)
                        {
                            if (item.Gpu.Index != NTMinerRoot.GpuAllId)
                            {
                                gpuSpeeds.SetCurrentSpeed(item.Gpu.Index, gpuSpeedL, isDual, now);
                            }
                        }
                    }
                }
            }
        }
Example #13
0
        private static void PickGpuSpeed(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string gpuSpeedPattern = kernelOutput.GpuSpeedPattern;

            if (isDual)
            {
                gpuSpeedPattern = kernelOutput.DualGpuSpeedPattern;
            }
            if (string.IsNullOrEmpty(gpuSpeedPattern))
            {
                return;
            }
            var             now      = DateTime.Now;
            bool            hasGpuId = gpuSpeedPattern.Contains("?<gpu>");
            Regex           regex    = new Regex(gpuSpeedPattern);
            MatchCollection matches  = regex.Matches(input);

            if (matches.Count > 0)
            {
                GpusSpeed gpuSpeeds = (GpusSpeed)NTMinerRoot.Instance.GpusSpeed;
                for (int i = 0; i < matches.Count; i++)
                {
                    Match  match        = matches[i];
                    string gpuSpeedText = match.Groups["gpuSpeed"].Value;
                    string gpuSpeedUnit = match.Groups["gpuSpeedUnit"].Value;

                    int gpu = i;
                    if (hasGpuId)
                    {
                        string gpuText = match.Groups["gpu"].Value;
                        if (!int.TryParse(gpuText, out gpu))
                        {
                            gpu = i;
                        }
                    }
                    double gpuSpeed;
                    if (double.TryParse(gpuSpeedText, out gpuSpeed))
                    {
                        double gpuSpeedL = gpuSpeed.FromUnitSpeed(gpuSpeedUnit);
                        gpuSpeeds.SetCurrentSpeed(gpu, gpuSpeedL, isDual, now);
                    }
                }
                string totalSpeedPattern = kernelOutput.DualTotalSpeedPattern;
                if (isDual)
                {
                    totalSpeedPattern = kernelOutput.DualTotalSpeedPattern;
                }
                if (string.IsNullOrEmpty(totalSpeedPattern))
                {
                    // 求和分算力
                    IGpuSpeed totalGpuSpeed = gpuSpeeds.First(a => a.Gpu.Index == NTMinerRoot.GpuAllId);
                    double    speed         = isDual? gpuSpeeds.Where(a => a.Gpu.Index != NTMinerRoot.GpuAllId).Sum(a => a.DualCoinSpeed.Value)
                                         : gpuSpeeds.Where(a => a.Gpu.Index != NTMinerRoot.GpuAllId).Sum(a => a.MainCoinSpeed.Value);
                    gpuSpeeds.SetCurrentSpeed(NTMinerRoot.GpuAllId, speed, isDual, now);
                }
            }
        }
Example #14
0
        private static void PickTotalSpeed(INTMinerContext context, string line, IKernelOutput kernelOutput, bool isDual)
        {
            string totalSpeedPattern = kernelOutput.TotalSpeedPattern;

            if (isDual)
            {
                totalSpeedPattern = kernelOutput.DualTotalSpeedPattern;
            }
            if (string.IsNullOrEmpty(totalSpeedPattern))
            {
                return;
            }
            Regex regex = VirtualRoot.GetRegex(totalSpeedPattern);
            Match match = regex.Match(line);

            if (match.Success)
            {
                string totalSpeedText = match.Groups[NTKeyword.TotalSpeedGroupName].Value;
                string totalSpeedUnit = match.Groups[NTKeyword.TotalSpeedUnitGroupName].Value;
                if (string.IsNullOrEmpty(totalSpeedUnit))
                {
                    if (isDual)
                    {
                        totalSpeedUnit = kernelOutput.DualSpeedUnit;
                    }
                    else
                    {
                        totalSpeedUnit = kernelOutput.SpeedUnit;
                    }
                }
                if (double.TryParse(totalSpeedText, out double totalSpeed))
                {
                    totalSpeed = totalSpeed.FromUnitSpeed(totalSpeedUnit);
                    var        now       = DateTime.Now;
                    IGpusSpeed gpuSpeeds = NTMinerContext.Instance.GpusSpeed;
                    gpuSpeeds.SetCurrentSpeed(NTMinerContext.GpuAllId, totalSpeed, isDual, now);
                    string gpuSpeedPattern = kernelOutput.GpuSpeedPattern;
                    if (isDual)
                    {
                        gpuSpeedPattern = kernelOutput.DualGpuSpeedPattern;
                    }
                    // 如果没有单卡算力正则则平分总算力作为单卡算力正则
                    if ((string.IsNullOrEmpty(gpuSpeedPattern) || context.GpuSet.Count == 1) && context.GpuSet.Count != 0)
                    {
                        double gpuSpeed = totalSpeed / context.GpuSet.Count;
                        foreach (var item in gpuSpeeds.AsEnumerable())
                        {
                            if (item.Gpu.Index != NTMinerContext.GpuAllId)
                            {
                                gpuSpeeds.SetCurrentSpeed(item.Gpu.Index, gpuSpeed, isDual, now);
                            }
                        }
                    }
                }
            }
        }
Example #15
0
            public MineContext(
                bool isRestart,
                string minerName,
                ICoin mainCoin,
                IPool mainCoinPool,
                IKernel kernel,
                IKernelInput kernelInput,
                IKernelOutput kernelOutput,
                ICoinKernel coinKernel,
                string mainCoinWallet,
                string commandLine,
                Dictionary <string, string> parameters,
                Dictionary <Guid, string> fragments,
                Dictionary <Guid, string> fileWriters,
                int[] useDevices)
            {
                this.Fragments              = fragments;
                this.FileWriters            = fileWriters;
                this.Id                     = Guid.NewGuid();
                this.IsRestart              = isRestart;
                this.MinerName              = minerName;
                this.MainCoin               = mainCoin;
                this.MainCoinPool           = mainCoinPool;
                this.Kernel                 = kernel;
                this.CoinKernel             = coinKernel;
                this.MainCoinWallet         = mainCoinWallet;
                this.AutoRestartKernelCount = 0;
                this.KernelSelfRestartCount = 0;
                this.CommandLine            = commandLine ?? string.Empty;
                this.CreatedOn              = DateTime.Now;
                this.Parameters             = parameters;
                this.UseDevices             = useDevices;
                this.KernelInput            = kernelInput;
                this.KernelOutput           = kernelOutput;
                string logFileName;

                if (this.CommandLine.Contains(NTKeyword.LogFileParameterName))
                {
                    this.KernelProcessType = KernelProcessType.Logfile;
                    logFileName            = $"{this.Kernel.Code}_{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss_fff")}.log";
                }
                else
                {
                    this.KernelProcessType = KernelProcessType.Pip;
                    logFileName            = $"{kernel.Code}_pip_{DateTime.Now.Ticks.ToString()}.log";
                }
                this.LogFileFullName = Path.Combine(SpecialPath.LogsDirFullName, logFileName);
            }
 public static bool GetIsGotOneIncorrectGpuShare(this IKernelOutput kernelOutput)
 {
     if (kernelOutput == null)
     {
         return(false);
     }
     if (!string.IsNullOrEmpty(kernelOutput.GpuGotOneIncorrectShare) && kernelOutput.GpuGotOneIncorrectShare.Contains("?<gpu>"))
     {
         return(true);
     }
     if (!string.IsNullOrEmpty(kernelOutput.GpuIncorrectShare) && kernelOutput.GpuIncorrectShare.Contains("?<gpu>"))
     {
         return(true);
     }
     return(false);
 }
Example #17
0
 public KernelOutputViewModel(IKernelOutput data) : this(data.GetId())
 {
     _name                     = data.Name;
     _gpuSpeedPattern          = data.GpuSpeedPattern;
     _rejectSharePattern       = data.RejectSharePattern;
     _totalSharePattern        = data.TotalSharePattern;
     _acceptSharePattern       = data.AcceptSharePattern;
     _rejectPercentPattern     = data.RejectPercentPattern;
     _totalSpeedPattern        = data.TotalSpeedPattern;
     _dualGpuSpeedPattern      = data.DualGpuSpeedPattern;
     _dualRejectSharePattern   = data.DualRejectSharePattern;
     _dualAcceptSharePattern   = data.DualAcceptSharePattern;
     _dualRejectPercentPattern = data.DualRejectPercentPattern;
     _dualTotalSharePattern    = data.DualTotalSharePattern;
     _dualTotalSpeedPattern    = data.DualTotalSpeedPattern;
 }
Example #18
0
        private static void PickTotalSpeed(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string totalSpeedPattern = kernelOutput.TotalSpeedPattern;

            if (isDual)
            {
                totalSpeedPattern = kernelOutput.DualTotalSpeedPattern;
            }
            if (string.IsNullOrEmpty(totalSpeedPattern))
            {
                return;
            }
            Match match = Regex.Match(input, totalSpeedPattern, RegexOptions.Compiled);

            if (match.Success)
            {
                string totalSpeedText = match.Groups["totalSpeed"].Value;
                string totalSpeedUnit = match.Groups["totalSpeedUnit"].Value;

                double totalSpeed;
                if (double.TryParse(totalSpeedText, out totalSpeed))
                {
                    double     totalSpeedL = totalSpeed.FromUnitSpeed(totalSpeedUnit);
                    var        now         = DateTime.Now;
                    IGpusSpeed gpuSpeeds   = NTMinerRoot.Instance.GpusSpeed;
                    gpuSpeeds.SetCurrentSpeed(NTMinerRoot.GpuAllId, totalSpeedL, isDual, now);
                    string gpuSpeedPattern = kernelOutput.GpuSpeedPattern;
                    if (isDual)
                    {
                        gpuSpeedPattern = kernelOutput.DualGpuSpeedPattern;
                    }
                    if (string.IsNullOrEmpty(gpuSpeedPattern))
                    {
                        // 平分总算力
                        double gpuSpeedL = totalSpeedL / root.GpuSet.Count;
                        foreach (var item in gpuSpeeds)
                        {
                            if (item.Gpu.Index != NTMinerRoot.GpuAllId)
                            {
                                gpuSpeeds.SetCurrentSpeed(item.Gpu.Index, gpuSpeedL, isDual, now);
                            }
                        }
                    }
                }
            }
        }
 public static bool GetIsFoundOneGpuShare(this IKernelOutput kernelOutput)
 {
     if (kernelOutput == null)
     {
         return(false);
     }
     if (!string.IsNullOrEmpty(kernelOutput.FoundOneShare) && kernelOutput.FoundOneShare.Contains("?<gpu>"))
     {
         return(true);
     }
     if (!string.IsNullOrEmpty(kernelOutput.AcceptOneShare) && kernelOutput.AcceptOneShare.Contains("?<gpu>"))
     {
         return(true);
     }
     if (!string.IsNullOrEmpty(kernelOutput.GpuAcceptShare) && kernelOutput.GpuAcceptShare.Contains("?<gpu>"))
     {
         return(true);
     }
     return(false);
 }
Example #20
0
        private static void PickRejectOneShare(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string rejectOneShare = kernelOutput.RejectOneShare;

            if (isDual)
            {
                rejectOneShare = kernelOutput.DualRejectOneShare;
            }
            if (string.IsNullOrEmpty(rejectOneShare))
            {
                return;
            }
            var match = Regex.Match(input, rejectOneShare, RegexOptions.Compiled);

            if (match.Success)
            {
                ICoinShare share = root.CoinShareSet.GetOrCreate(coin.GetId());
                root.CoinShareSet.UpdateShare(coin.GetId(), null, share.RejectShareCount + 1, DateTime.Now);
            }
        }
Example #21
0
        private static void PickPoolDelay(string input, IKernelOutput kernelOutput, bool isDual)
        {
            string poolDelayPattern = kernelOutput.PoolDelayPattern;

            if (isDual)
            {
                poolDelayPattern = kernelOutput.DualPoolDelayPattern;
            }
            if (string.IsNullOrEmpty(poolDelayPattern))
            {
                return;
            }
            Match match = Regex.Match(input, poolDelayPattern, RegexOptions.Compiled);

            if (match.Success)
            {
                string poolDelayText = match.Groups["poolDelay"].Value;
                VirtualRoot.Happened(new PoolDelayPickedEvent(poolDelayText, isDual));
            }
        }
Example #22
0
        private static void PickAcceptOneShare(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string acceptOneShare = kernelOutput.AcceptOneShare;

            if (isDual)
            {
                acceptOneShare = kernelOutput.DualAcceptOneShare;
            }
            if (string.IsNullOrEmpty(acceptOneShare))
            {
                return;
            }
            var match = Regex.Match(input, acceptOneShare);

            if (match.Success)
            {
                ICoinShare share = root.CoinShareSet.GetOrCreate(coin.GetId());
                root.CoinShareSet.UpdateShare(coin.GetId(), acceptShareCount: share.AcceptShareCount + 1, rejectShareCount: null, now: DateTime.Now);
            }
        }
Example #23
0
        private static void PickPoolDelay(string input, IKernelOutput kernelOutput, bool isDual, Guid poolId)
        {
            string poolDelayPattern = kernelOutput.PoolDelayPattern;

            if (isDual)
            {
                poolDelayPattern = kernelOutput.DualPoolDelayPattern;
            }
            if (string.IsNullOrEmpty(poolDelayPattern))
            {
                return;
            }
            Regex regex = VirtualRoot.GetRegex(poolDelayPattern);
            Match match = regex.Match(input);

            if (match.Success)
            {
                string poolDelayText = match.Groups[NTKeyword.PoolDelayGroupName].Value;
                VirtualRoot.RaiseEvent(new PoolDelayPickedEvent(poolId, isDual, poolDelayText));
            }
        }
Example #24
0
        private static void PickRejectPercent(INTMinerContext root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string rejectPercentPattern = kernelOutput.RejectPercentPattern;

            if (isDual)
            {
                rejectPercentPattern = kernelOutput.DualRejectPercentPattern;
            }
            if (string.IsNullOrEmpty(rejectPercentPattern))
            {
                return;
            }
            Regex  regex             = VirtualRoot.GetRegex(rejectPercentPattern);
            var    match             = regex.Match(input);
            string rejectPercentText = match.Groups[NTKeyword.RejectPercentGroupName].Value;

            if (double.TryParse(rejectPercentText, out double rejectPercent))
            {
                ICoinShare share = root.CoinShareSet.GetOrCreate(coin.GetId());
                root.CoinShareSet.UpdateShare(coin.GetId(), acceptShareCount: null, rejectShareCount: (int)(share.TotalShareCount * rejectPercent), now: DateTime.Now);
            }
        }
Example #25
0
        private static void PickRejectPercent(INTMinerRoot root, string input, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string rejectPercentPattern = kernelOutput.RejectPercentPattern;

            if (isDual)
            {
                rejectPercentPattern = kernelOutput.DualRejectPercentPattern;
            }
            if (string.IsNullOrEmpty(rejectPercentPattern))
            {
                return;
            }
            var    match             = Regex.Match(input, rejectPercentPattern, RegexOptions.Compiled);
            string rejectPercentText = match.Groups["rejectPercent"].Value;
            double rejectPercent;

            if (double.TryParse(rejectPercentText, out rejectPercent))
            {
                ICoinShare share = root.CoinShareSet.GetOrCreate(coin.GetId());
                root.CoinShareSet.UpdateShare(coin.GetId(), acceptShareCount: null, rejectShareCount: (int)(share.TotalShareCount * rejectPercent), now: DateTime.Now);
            }
        }
Example #26
0
        private static void PickRejectOneShare(INTMinerContext root, IMineContext mineContext, string input, string preline, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string rejectOneShare = kernelOutput.RejectOneShare;

            if (isDual)
            {
                rejectOneShare = kernelOutput.DualRejectOneShare;
            }
            if (string.IsNullOrEmpty(rejectOneShare))
            {
                return;
            }
            if (rejectOneShare.Contains("\n"))
            {
                input = preline + "\n" + input;
            }
            Regex regex = VirtualRoot.GetRegex(rejectOneShare);
            var   match = regex.Match(input);

            if (match.Success)
            {
                if (!isDual)
                {
                    // 决定不支持双挖的单卡份额统计
                    string gpuText = match.Groups[NTKeyword.GpuIndexGroupName].Value;
                    if (!string.IsNullOrEmpty(gpuText))
                    {
                        if (int.TryParse(gpuText, out int gpuIndex))
                        {
                            if (kernelOutput.IsMapGpuIndex && !string.IsNullOrWhiteSpace(mineContext.KernelInput.DevicesArg))
                            {
                                if (mineContext.UseDevices.Length != 0 && mineContext.UseDevices.Length != root.GpuSet.Count && gpuIndex < mineContext.UseDevices.Length)
                                {
                                    gpuIndex = mineContext.UseDevices[gpuIndex];
                                }
                            }
                            if (string.IsNullOrEmpty(kernelOutput.FoundOneShare))
                            {
                                root.GpusSpeed.IncreaseFoundShare(gpuIndex);
                            }
                            root.GpusSpeed.IncreaseRejectShare(gpuIndex);
                        }
                    }
                    else if (!string.IsNullOrEmpty(kernelOutput.FoundOneShare))
                    {
                        // 哪个GPU最近找到了一个share就是那个GPU拒绝了一个share
                        var       gpuSpeeds = root.GpusSpeed.AsEnumerable();
                        IGpuSpeed gpuSpeed  = null;
                        foreach (var item in gpuSpeeds)
                        {
                            if (gpuSpeed == null)
                            {
                                gpuSpeed = item;
                            }
                            else if (item.FoundShareOn > gpuSpeed.FoundShareOn)
                            {
                                gpuSpeed = item;
                            }
                        }
                        if (gpuSpeed != null)
                        {
                            var gpuIndex = gpuSpeed.Gpu.Index;
                            root.GpusSpeed.IncreaseRejectShare(gpuIndex);
                        }
                    }
                }
                ICoinShare share = root.CoinShareSet.GetOrCreate(coin.GetId());
                root.CoinShareSet.UpdateShare(coin.GetId(), null, share.RejectShareCount + 1, DateTime.Now);
            }
        }
Example #27
0
 private static bool IsMapGpuIndex(INTMinerContext context, IMineContext mineContext, IKernelOutput kernelOutput)
 {
     return(kernelOutput.IsMapGpuIndex && !string.IsNullOrWhiteSpace(mineContext.KernelInput.DevicesArg) &&
            mineContext.UseDevices.Length != 0 && mineContext.UseDevices.Length != context.GpuSet.Count);
 }
Example #28
0
        private static void PickAcceptOneShare(INTMinerContext root, IMineContext mineContext, string input, string preline, IKernelOutput kernelOutput, ICoin coin, bool isDual)
        {
            string acceptOneShare = kernelOutput.AcceptOneShare;

            if (isDual)
            {
                acceptOneShare = kernelOutput.DualAcceptOneShare;
            }
            if (string.IsNullOrEmpty(acceptOneShare))
            {
                return;
            }
            if (acceptOneShare.Contains("\n"))
            {
                input = preline + "\n" + input;
            }
            Regex regex = VirtualRoot.GetRegex(acceptOneShare);
            var   match = regex.Match(input);

            if (match.Success)
            {
                if (!isDual)
                {
                    // 决定不支持双挖的单卡份额统计
                    string gpuText = match.Groups[NTKeyword.GpuIndexGroupName].Value;
                    if (!string.IsNullOrEmpty(gpuText))
                    {
                        if (int.TryParse(gpuText, out int gpuIndex))
                        {
                            if (kernelOutput.IsMapGpuIndex && !string.IsNullOrWhiteSpace(mineContext.KernelInput.DevicesArg))
                            {
                                if (mineContext.UseDevices.Length != 0 && mineContext.UseDevices.Length != root.GpuSet.Count && gpuIndex < mineContext.UseDevices.Length)
                                {
                                    gpuIndex = mineContext.UseDevices[gpuIndex];
                                }
                            }
                            if (string.IsNullOrEmpty(kernelOutput.FoundOneShare))
                            {
                                root.GpusSpeed.IncreaseFoundShare(gpuIndex);
                            }
                            root.GpusSpeed.IncreaseAcceptShare(gpuIndex);
                        }
                    }
                }
                ICoinShare share = root.CoinShareSet.GetOrCreate(coin.GetId());
                root.CoinShareSet.UpdateShare(coin.GetId(), acceptShareCount: share.AcceptShareCount + 1, rejectShareCount: null, now: DateTime.Now);
            }
        }
Example #29
0
        private static void PicGotOneIncorrectShare(INTMinerContext root, IMineContext mineContext, string input, string preline, IKernelOutput kernelOutput)
        {
            string pattern = kernelOutput.GpuGotOneIncorrectShare;

            if (string.IsNullOrEmpty(pattern))
            {
                return;
            }
            if (pattern.Contains("\n"))
            {
                input = preline + "\n" + input;
            }
            Regex regex = VirtualRoot.GetRegex(pattern);
            var   match = regex.Match(input);

            if (match.Success)
            {
                string gpuText = match.Groups[NTKeyword.GpuIndexGroupName].Value;
                if (!string.IsNullOrEmpty(gpuText))
                {
                    if (int.TryParse(gpuText, out int gpuIndex))
                    {
                        if (kernelOutput.IsMapGpuIndex && !string.IsNullOrWhiteSpace(mineContext.KernelInput.DevicesArg))
                        {
                            if (mineContext.UseDevices.Length != 0 && mineContext.UseDevices.Length != root.GpuSet.Count && gpuIndex < mineContext.UseDevices.Length)
                            {
                                gpuIndex = mineContext.UseDevices[gpuIndex];
                            }
                        }
                        root.GpusSpeed.IncreaseIncorrectShare(gpuIndex);
                    }
                }
            }
        }
Example #30
0
        private static void PickGpuSpeed(INTMinerContext root, IMineContext mineContext, string input, IKernelOutput kernelOutput, bool isDual)
        {
            string gpuSpeedPattern = kernelOutput.GpuSpeedPattern;

            if (isDual)
            {
                gpuSpeedPattern = kernelOutput.DualGpuSpeedPattern;
            }
            if (string.IsNullOrEmpty(gpuSpeedPattern))
            {
                return;
            }
            var             now      = DateTime.Now;
            bool            hasGpuId = gpuSpeedPattern.Contains($"?<{NTKeyword.GpuIndexGroupName}>");
            Regex           regex    = VirtualRoot.GetRegex(gpuSpeedPattern);
            MatchCollection matches  = regex.Matches(input);

            if (matches.Count > 0)
            {
                IGpusSpeed gpuSpeeds = NTMinerContext.Instance.GpusSpeed;
                for (int i = 0; i < matches.Count; i++)
                {
                    Match  match        = matches[i];
                    string gpuSpeedText = match.Groups[NTKeyword.GpuSpeedGroupName].Value;
                    string gpuSpeedUnit = match.Groups[NTKeyword.GpuSpeedUnitGroupName].Value;
                    if (string.IsNullOrEmpty(gpuSpeedUnit))
                    {
                        if (isDual)
                        {
                            gpuSpeedUnit = kernelOutput.DualSpeedUnit;
                        }
                        else
                        {
                            gpuSpeedUnit = kernelOutput.SpeedUnit;
                        }
                    }
                    int gpu = i;
                    if (hasGpuId)
                    {
                        string gpuText = match.Groups[NTKeyword.GpuIndexGroupName].Value;
                        if (!int.TryParse(gpuText, out gpu))
                        {
                            gpu = i;
                        }
                        else
                        {
                            gpu -= kernelOutput.GpuBaseIndex;
                            if (gpu < 0)
                            {
                                continue;
                            }
                        }
                    }
                    if (kernelOutput.IsMapGpuIndex && !string.IsNullOrWhiteSpace(mineContext.KernelInput.DevicesArg))
                    {
                        if (mineContext.UseDevices.Length != 0 && mineContext.UseDevices.Length != root.GpuSet.Count && gpu < mineContext.UseDevices.Length)
                        {
                            gpu = mineContext.UseDevices[gpu];
                        }
                    }
                    if (double.TryParse(gpuSpeedText, out double gpuSpeed))
                    {
                        double gpuSpeedL = gpuSpeed.FromUnitSpeed(gpuSpeedUnit);
                        gpuSpeeds.SetCurrentSpeed(gpu, gpuSpeedL, isDual, now);
                    }
                }
                string totalSpeedPattern = kernelOutput.TotalSpeedPattern;
                if (isDual)
                {
                    totalSpeedPattern = kernelOutput.DualTotalSpeedPattern;
                }
                if (string.IsNullOrEmpty(totalSpeedPattern))
                {
                    // 求和分算力
                    double speed = isDual? gpuSpeeds.AsEnumerable().Where(a => a.Gpu.Index != NTMinerContext.GpuAllId).Sum(a => a.DualCoinSpeed.Value)
                                         : gpuSpeeds.AsEnumerable().Where(a => a.Gpu.Index != NTMinerContext.GpuAllId).Sum(a => a.MainCoinSpeed.Value);
                    gpuSpeeds.SetCurrentSpeed(NTMinerContext.GpuAllId, speed, isDual, now);
                }
            }
        }