コード例 #1
0
ファイル: CoinKernelViewModel.cs プロジェクト: vebin/ntminer
 public CoinKernelViewModel(ICoinKernel data) : this(data.GetId())
 {
     _coinId          = data.CoinId;
     _kernelId        = data.KernelId;
     _sortNumber      = data.SortNumber;
     _dualCoinGroupId = data.DualCoinGroupId;
     _args            = data.Args;
     _notice          = data.Notice;
     _supportedGpu    = data.SupportedGpu;
     _isSupportPool1  = data.IsSupportPool1;
     // 复制,视为值对象,防止直接修改引用
     _environmentVariables.AddRange(data.EnvironmentVariables.Select(a => new EnvironmentVariable(a)));
     // 复制,视为值对象,防止直接修改引用
     _inputSegments.AddRange(data.InputSegments.Select(a => new InputSegment(a)));
     _inputSegmentVms.AddRange(_inputSegments.Select(a => new InputSegmentViewModel(a)));
     _fileWriterIds     = data.FileWriterIds;
     _fragmentWriterIds = data.FragmentWriterIds;
     foreach (var writerId in _fileWriterIds)
     {
         if (AppContext.Instance.FileWriterVms.TryGetFileWriterVm(writerId, out FileWriterViewModel writerVm))
         {
             _fileWriterVms.Add(writerVm);
         }
     }
     foreach (var writerId in _fragmentWriterIds)
     {
         if (AppContext.Instance.FragmentWriterVms.TryGetFragmentWriterVm(writerId, out FragmentWriterViewModel writerVm))
         {
             _fragmentWriterVms.Add(writerVm);
         }
     }
 }
コード例 #2
0
 private static void BuildFragments(IServerContext serverContext, ICoinKernel coinKernel, Dictionary <string, string> parameters, out Dictionary <Guid, string> fileWriters, out Dictionary <Guid, string> fragments)
 {
     fileWriters = new Dictionary <Guid, string>();
     fragments   = new Dictionary <Guid, string>();
     try {
         if (coinKernel.FragmentWriterIds != null && coinKernel.FragmentWriterIds.Count != 0)
         {
             foreach (var writerId in coinKernel.FragmentWriterIds)
             {
                 if (serverContext.FragmentWriterSet.TryGetFragmentWriter(writerId, out IFragmentWriter writer))
                 {
                     BuildFragment(parameters, fileWriters, fragments, writer);
                 }
             }
         }
         if (coinKernel.FileWriterIds != null && coinKernel.FileWriterIds.Count != 0)
         {
             foreach (var writerId in coinKernel.FileWriterIds)
             {
                 if (serverContext.FileWriterSet.TryGetFileWriter(writerId, out IFileWriter writer))
                 {
                     BuildFragment(parameters, fileWriters, fragments, writer);
                 }
             }
         }
     }
     catch (Exception e) {
         Logger.ErrorDebugLine(e);
     }
 }
コード例 #3
0
 public MineContext(
     string minerName,
     ICoin mainCoin,
     IPool mainCoinPool,
     IKernel kernel,
     ICoinKernel coinKernel,
     string mainCoinWallet,
     string commandLine,
     Dictionary <string, string> parameters,
     Dictionary <Guid, string> fragments,
     Dictionary <Guid, string> fileWriters)
 {
     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;
     this.CreatedOn              = DateTime.Now;
     this.PipeFileName           = $"{kernel.Code}_pip_{DateTime.Now.Ticks.ToString()}.log";
     this.Parameters             = parameters;
 }
コード例 #4
0
                public static CoinProfile Create(INTMinerRoot root, MineWorkData mineWorkData, Guid coinId)
                {
                    if (root.CoinSet.TryGetCoin(coinId, out ICoin coin))
                    {
                        var data = GetCoinProfileData(mineWorkData, coin.GetId());
                        if (data == null)
                        {
                            Guid  poolId = Guid.Empty;
                            IPool pool   = root.PoolSet.OrderBy(a => a.SortNumber).FirstOrDefault(a => a.CoinId == coinId);
                            if (pool != null)
                            {
                                poolId = pool.GetId();
                            }
                            string      wallet       = coin.TestWallet;
                            Guid        coinKernelId = Guid.Empty;
                            ICoinKernel coinKernel   = root.CoinKernelSet.OrderBy(a => a.SortNumber).FirstOrDefault(a => a.CoinId == coinId);
                            if (coinKernel != null)
                            {
                                coinKernelId = coinKernel.GetId();
                            }
                            data = CoinProfileData.CreateDefaultData(coinId, poolId, wallet, coinKernelId);
                        }
                        CoinProfile coinProfile = new CoinProfile(mineWorkData, data);

                        return(coinProfile);
                    }
                    else
                    {
                        return(Empty);
                    }
                }
コード例 #5
0
 public CoinKernelViewModel(ICoinKernel data) : this(data.GetId())
 {
     _coinId          = data.CoinId;
     _kernelId        = data.KernelId;
     _dualCoinGroupId = data.DualCoinGroupId;
     _args            = data.Args;
     _dualFullArgs    = data.DualFullArgs;
     _notice          = data.Notice;
     _supportedGpu    = data.SupportedGpu;
     _isSupportPool1  = data.IsSupportPool1;
     // 复制,视为值对象,防止直接修改引用
     _environmentVariables.AddRange(data.EnvironmentVariables.Select(a => new EnvironmentVariable(a)));
     // 复制,视为值对象,防止直接修改引用
     _inputSegments.AddRange(data.InputSegments.Select(a => new InputSegment(a)));
     _inputSegmentVms.AddRange(_inputSegments.Select(a => new InputSegmentViewModel(a)));
     _gpuInputSegmentVms.AddRange(_inputSegmentVms.Where(a => a.TargetGpu.IsSupportedGpu(NTMinerRoot.Instance.GpuSet.GpuType)));
     _fileWriterIds     = data.FileWriterIds;
     _fragmentWriterIds = data.FragmentWriterIds;
     _isHot             = data.IsHot;
     _isRecommend       = data.IsRecommend;
     foreach (var writerId in _fileWriterIds)
     {
         if (AppContext.Instance.FileWriterVms.TryGetFileWriterVm(writerId, out FileWriterViewModel writerVm))
         {
             _fileWriterVms.Add(writerVm);
         }
     }
     foreach (var writerId in _fragmentWriterIds)
     {
         if (AppContext.Instance.FragmentWriterVms.TryGetFragmentWriterVm(writerId, out FragmentWriterViewModel writerVm))
         {
             _fragmentWriterVms.Add(writerVm);
         }
     }
 }
コード例 #6
0
ファイル: MineContext.cs プロジェクト: nextbtc/NtMiner
        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();
        }
コード例 #7
0
        public bool TryGetCoinKernel(Guid kernelId, out ICoinKernel kernel)
        {
            InitOnece();
            var r = _dicById.TryGetValue(kernelId, out CoinKernelData k);

            kernel = k;
            return(r);
        }
コード例 #8
0
 private CoinKernelProfile(INTMinerRoot root, ICoinKernel coinKernel)
 {
     _root = root;
     _data = GetCoinKernelProfileData(coinKernel.GetId());
     if (_data == null)
     {
         throw new ValidationException("未获取到CoinKernelProfileData数据,请重试");
     }
 }
コード例 #9
0
 public CoinKernelViewModel(ICoinKernel data) : this(data.GetId())
 {
     _coinId          = data.CoinId;
     _kernelId        = data.KernelId;
     _sortNumber      = data.SortNumber;
     _dualCoinGroupId = data.DualCoinGroupId;
     _args            = data.Args;
     _description     = data.Description;
     _supportedGpu    = data.SupportedGpu;
 }
コード例 #10
0
 public CoinKernelViewModel(ICoinKernel data) : this(data.GetId())
 {
     _coinId          = data.CoinId;
     _kernelId        = data.KernelId;
     _sortNumber      = data.SortNumber;
     _dualCoinGroupId = data.DualCoinGroupId;
     _args            = data.Args;
     _description     = data.Description;
     _supportedGpu    = data.SupportedGpu;
     // 复制,视为值对象,防止直接修改引用
     _environmentVariables.AddRange(data.EnvironmentVariables.Select(a => new EnvironmentVariable {
         Key   = a.Key,
         Value = a.Value
     }));
 }
コード例 #11
0
 public CoinKernelViewModel(ICoinKernel data) : this(data.GetId())
 {
     _coinId          = data.CoinId;
     _kernelId        = data.KernelId;
     _sortNumber      = data.SortNumber;
     _dualCoinGroupId = data.DualCoinGroupId;
     _args            = data.Args;
     _notice          = data.Notice;
     _supportedGpu    = data.SupportedGpu;
     // 复制,视为值对象,防止直接修改引用
     _environmentVariables.AddRange(data.EnvironmentVariables.Select(a => new EnvironmentVariable(a)));
     // 复制,视为值对象,防止直接修改引用
     _inputSegments.AddRange(data.InputSegments.Select(a => new InputSegment(a)));
     _inputSegmentVms.AddRange(_inputSegments.Select(a => new InputSegmentViewModel(a)));
 }
コード例 #12
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);
            }
コード例 #13
0
 public static bool GetIsSupportDualMine(this ICoinKernel coinKernel)
 {
     if (!NTMinerRoot.Instance.KernelSet.TryGetKernel(coinKernel.KernelId, out IKernel kernel))
     {
         return(false);
     }
     if (!NTMinerRoot.Instance.KernelInputSet.TryGetKernelInput(kernel.KernelInputId, out IKernelInput kernelInput))
     {
         return(false);
     }
     if (!kernelInput.IsSupportDualMine)
     {
         return(false);
     }
     return(coinKernel.DualCoinGroupId != Guid.Empty && NTMinerRoot.Instance.GroupSet.TryGetGroup(coinKernel.DualCoinGroupId, out IGroup _));
 }
コード例 #14
0
 public MineContext(
     string minerName,
     ICoin mainCoin,
     IPool mainCoinPool,
     IKernel kernel,
     ICoinKernel coinKernel,
     string mainCoinWallet)
 {
     this.Id                      = Guid.NewGuid();
     this.MinerName               = minerName;
     this.MainCoin                = mainCoin;
     this.MainCoinPool            = mainCoinPool;
     this.Kernel                  = kernel;
     this.CoinKernel              = coinKernel;
     this.MainCoinWallet          = mainCoinWallet;
     this.ProcessDisappearedCound = 0;
     this.CreatedOn               = DateTime.Now;
     this.PipeFileName            = "pip_" + DateTime.Now.Ticks.ToString() + ".log";
 }
コード例 #15
0
 public MineContext(
     string minerName,
     ICoin mainCoin,
     IPool mainCoinPool,
     IKernel kernel,
     ICoinKernel coinKernel,
     string mainCoinWallet,
     string commandLine)
 {
     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.CommandLine            = commandLine;
     this.CreatedOn              = DateTime.Now;
     this.PipeFileName           = "pip_" + DateTime.Now.Ticks.ToString() + ".log";
 }
コード例 #16
0
 public void BuildFragments(ICoinKernel coinKernel, Dictionary <string, string> parameters, out Dictionary <Guid, string> fileWriters, out Dictionary <Guid, string> fragments)
 {
     fileWriters = new Dictionary <Guid, string>();
     fragments   = new Dictionary <Guid, string>();
     try {
         foreach (var writerId in coinKernel.FragmentWriterIds)
         {
             if (FragmentWriterSet.TryGetFragmentWriter(writerId, out IFragmentWriter writer))
             {
                 BuildFragment(parameters, fileWriters, fragments, writer);
             }
         }
         foreach (var writerId in coinKernel.FileWriterIds)
         {
             if (FileWriterSet.TryGetFileWriter(writerId, out IFileWriter writer))
             {
                 BuildFragment(parameters, fileWriters, fragments, writer);
             }
         }
     }
     catch (Exception e) {
         Logger.ErrorDebugLine(e);
     }
 }