Skip to content

Commit cb2c213

Browse files
committed
Initial refactoring.
1 parent 6946945 commit cb2c213

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+354
-184
lines changed

xmr-stak-bootstrap/DictionaryExtensions.cs renamed to xmr-stak-bootstrap/Common/DictionaryExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33

4-
namespace xmr_stak_bootstrap
4+
namespace XmrStakBootstrap.Common
55
{
66
public static class DictionaryExtensions
77
{

xmr-stak-bootstrap/ConfigurationParser.cs

Lines changed: 0 additions & 12 deletions
This file was deleted.

xmr-stak-bootstrap/Finalizer.cs renamed to xmr-stak-bootstrap/Core/Finalizer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using System.Threading;
44

5-
namespace xmr_stak_bootstrap
5+
namespace XmrStakBootstrap.Core
66
{
77
public class Finalizer : IFinalizer
88
{

xmr-stak-bootstrap/IFinalizer.cs renamed to xmr-stak-bootstrap/Core/IFinalizer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
22

3-
namespace xmr_stak_bootstrap
3+
namespace XmrStakBootstrap.Core
44
{
55
public interface IFinalizer
66
{
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Unity.Attributes;
2+
using XmrStakBootstrap.RunConfiguration.Model;
3+
4+
namespace XmrStakBootstrap.Core.Runner.Generator
5+
{
6+
public class ConfigurationGeneratorRunner : IRunner
7+
{
8+
[Dependency]
9+
public ISampleConfigurationGenerator SampleConfigurationGenerator { get; set; }
10+
11+
[Dependency]
12+
public RunConfigurationModel ConfigurationModel { get; set; }
13+
14+
public void Run()
15+
{
16+
SampleConfigurationGenerator.Generate(ConfigurationModel.MasterConfiguration);
17+
}
18+
}
19+
}

xmr-stak-bootstrap/ISampleConfigurationGenerator.cs renamed to xmr-stak-bootstrap/Core/Runner/Generator/ISampleConfigurationGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace xmr_stak_bootstrap
1+
namespace XmrStakBootstrap.Core.Runner.Generator
22
{
33
public interface ISampleConfigurationGenerator
44
{

xmr-stak-bootstrap/SampleConfigurationGenerator.cs renamed to xmr-stak-bootstrap/Core/Runner/Generator/SampleConfigurationGenerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
using System;
22
using System.IO;
33
using Newtonsoft.Json;
4-
using xmr_stak_bootstrap.Model;
5-
using xmr_stak_bootstrap.Properties;
4+
using XmrStakBootstrap.MasterConfiguration.Model;
5+
using XmrStakBootstrap.Properties;
66

7-
namespace xmr_stak_bootstrap
7+
namespace XmrStakBootstrap.Core.Runner.Generator
88
{
99
public class SampleConfigurationGenerator : ISampleConfigurationGenerator
1010
{
1111
public void Generate(string path)
1212
{
13-
var configuration = SampleConfigurationData.MasterConfiguration;
13+
var configuration = SampleConfigurationData.MasterConfigurationModel;
1414
var contents = JsonConvert.SerializeObject(configuration, Formatting.Indented);
1515
WriteAllText(path, contents);
1616
WriteAllText(configuration.ConfigTemplate, Resources.config_source);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace XmrStakBootstrap.Core.Runner
2+
{
3+
public interface IRunner
4+
{
5+
void Run();
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace XmrStakBootstrap.Core.Runner
2+
{
3+
public interface IRunnerContext
4+
{
5+
void Execute();
6+
}
7+
}

xmr-stak-bootstrap/Runner.cs renamed to xmr-stak-bootstrap/Core/Runner/Miner/MinerRunner.cs

Lines changed: 42 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -5,80 +5,74 @@
55
using System.Linq;
66
using Newtonsoft.Json;
77
using Unity.Attributes;
8-
using xmr_stak_bootstrap.Model;
8+
using XmrStakBootstrap.Common;
9+
using XmrStakBootstrap.MasterConfiguration.Model;
10+
using XmrStakBootstrap.RunConfiguration.Model;
911

10-
namespace xmr_stak_bootstrap
12+
namespace XmrStakBootstrap.Core.Runner.Miner
1113
{
12-
public class Runner : IRunner
14+
public class MinerRunner : IRunner
1315
{
14-
//TODO: can be refactored further to classes
15-
1616
[Dependency]
1717
public IFinalizer Finalizer { get; set; }
1818

1919
[Dependency]
20-
public Lazy<ISampleConfigurationGenerator> SampleConfigurationGenerator { get; set; }
20+
public RunConfigurationModel RunConfigurationModel { get; set; }
21+
22+
[Dependency]
23+
public MasterConfigurationModel MasterConfigurationModel { get; set; }
2124

22-
public void Run(RunConfiguration args)
25+
public void Run()
2326
{
24-
if (args.GenerateConfigurationOnly)
27+
if (MasterConfigurationModel == null)
2528
{
26-
SampleConfigurationGenerator.Value.Generate(args.MasterConfiguration);
29+
Console.WriteLine(@"Master configuration file '{0}' was not loaded. Try running this program with argument --help.", RunConfigurationModel.MasterConfiguration);
30+
return;
2731
}
28-
else
29-
{
30-
if (!File.Exists(args.MasterConfiguration))
31-
{
32-
Console.WriteLine(@"Configuration file '{0}' does not exist. Try running this program with argument --help.", args.MasterConfiguration);
33-
return;
34-
}
3532

36-
DoRun(args);
37-
}
33+
DoRun();
3834
}
3935

40-
private void DoRun(RunConfiguration args)
36+
private void DoRun()
4137
{
42-
var contents = File.ReadAllText(args.MasterConfiguration);
43-
var configuration = JsonConvert.DeserializeObject<MasterConfiguration>(contents);
44-
45-
var activeSolution = GetActiveSolution(args, configuration);
38+
var activeSolution = GetActiveSolution();
4639
KillMiners();
4740

48-
var solution = configuration.SolutionConfiguration.SolutionProfiles.GetValue(activeSolution);
41+
var solution = MasterConfigurationModel.SolutionConfiguration.SolutionProfiles.GetValue(activeSolution);
4942
foreach (var instances in solution)
5043
{
51-
var outputPools = GetOutputPools(configuration, instances);
44+
var outputPools = GetOutputPools(instances);
5245

5346
if (outputPools.Count == 0)
5447
{
5548
Console.WriteLine(@"Solution does not contain any pool bindings.");
5649
continue;
5750
}
5851

59-
var configArgument = GetConfigurationArgument(configuration, outputPools);
52+
var configArgument = GetConfigurationArgument(outputPools);
6053

6154
foreach (var instance in instances.Value)
6255
{
63-
var entry = configuration.InstanceConfiguration.InstanceProfiles.GetValue(instance);
56+
var entry = MasterConfigurationModel.InstanceConfiguration.InstanceProfiles.GetValue(instance);
6457

65-
var cpuArgument = GetCpuArgument(configuration, entry);
66-
var amdArgument = GetAmdArgument(configuration, entry);
67-
var nvidiaArgument = GetNvidiaArgument(configuration, entry);
58+
var cpuArgument = GetCpuArgument(entry);
59+
var amdArgument = GetAmdArgument(entry);
60+
var nvidiaArgument = GetNvidiaArgument(entry);
6861

6962
RunMiner($"{configArgument} {cpuArgument} {amdArgument} {nvidiaArgument}");
7063
}
7164
}
7265
}
7366

74-
private static string GetActiveSolution(RunConfiguration args, MasterConfiguration configuration)
67+
private string GetActiveSolution()
7568
{
76-
var activeSolution = args.ActiveSolutionConfiguration;
69+
//TODO: rewrite once configuration is changed
70+
var activeSolution = RunConfigurationModel.ActiveSolutionConfiguration;
7771

7872
while (string.IsNullOrEmpty(activeSolution))
7973
{
8074
Console.WriteLine(@"Available solutions: ");
81-
var keys = configuration.SolutionConfiguration.SolutionProfiles.Keys.OrderBy(x => x).ToList();
75+
var keys = MasterConfigurationModel.SolutionConfiguration.SolutionProfiles.Keys.ToList();
8276
var i = 0;
8377
foreach (var key in keys)
8478
{
@@ -96,13 +90,13 @@ private static string GetActiveSolution(RunConfiguration args, MasterConfigurati
9690
return activeSolution;
9791
}
9892

99-
private static List<PrioritizedPoolEntry> GetOutputPools(MasterConfiguration configuration, KeyValuePair<string, IList<string>> instances)
93+
private List<PrioritizedPoolEntry> GetOutputPools(KeyValuePair<string, IList<string>> instances)
10094
{
101-
return configuration
95+
return MasterConfigurationModel
10296
.PoolConfiguration
10397
.PoolSets.GetValue(instances.Key)
10498
.Reverse()
105-
.Select(x => configuration.PoolConfiguration.Pools.GetValue(x))
99+
.Select(x => MasterConfigurationModel.PoolConfiguration.Pools.GetValue(x))
106100
.Select((x, i) => new PrioritizedPoolEntry
107101
{
108102
PoolWeight = i + 1,
@@ -116,7 +110,7 @@ private static List<PrioritizedPoolEntry> GetOutputPools(MasterConfiguration con
116110
.ToList();
117111
}
118112

119-
private void RunMiner(string arguments)
113+
private static void RunMiner(string arguments)
120114
{
121115
var startInfo = new ProcessStartInfo(Path.GetFullPath("xmr-stak.exe"), arguments)
122116
{
@@ -128,51 +122,51 @@ private void RunMiner(string arguments)
128122
Process.Start(startInfo);
129123
}
130124

131-
private string GetConfigurationArgument(MasterConfiguration configuration, List<PrioritizedPoolEntry> pools)
125+
private string GetConfigurationArgument(IReadOnlyCollection<PrioritizedPoolEntry> pools)
132126
{
133-
var configPath = CreateTemporaryConfiguration(configuration.ConfigTemplate, "config", "%POOLS%", pools);
127+
var configPath = CreateTemporaryConfiguration(MasterConfigurationModel.ConfigTemplate, "config", "%POOLS%", pools);
134128
ScheduleFileDelete(configPath);
135129

136130
return $"--config \"{configPath}\"";
137131
}
138132

139-
private string GetCpuArgument(MasterConfiguration configuration, InstanceEntry entry)
133+
private string GetCpuArgument(InstanceEntry entry)
140134
{
141135
if (string.IsNullOrEmpty(entry.CpuProfile))
142136
{
143137
return "--noCPU";
144138
}
145139

146-
var cpuProfile = configuration.CpuConfiguration.Profiles.GetValue(entry.CpuProfile);
147-
var path = CreateTemporaryConfiguration(configuration.CpuTemplate, "cpu", "%THREADS%", cpuProfile);
140+
var cpuProfile = MasterConfigurationModel.CpuConfiguration.Profiles.GetValue(entry.CpuProfile);
141+
var path = CreateTemporaryConfiguration(MasterConfigurationModel.CpuTemplate, "cpu", "%THREADS%", cpuProfile);
148142
ScheduleFileDelete(path);
149143

150144
return $"--cpu \"{path}\"";
151145
}
152146

153-
private string GetAmdArgument(MasterConfiguration configuration, InstanceEntry entry)
147+
private string GetAmdArgument(InstanceEntry entry)
154148
{
155149
if (entry.AmdProfiles == null || entry.AmdProfiles.Count == 0)
156150
{
157151
return "--noAMD";
158152
}
159153

160-
var amdProfile = entry.AmdProfiles.SelectMany(x => configuration.AmdConfiguration.Profiles.GetValue(x)).ToList();
161-
var path = CreateTemporaryConfiguration(configuration.AmdTemplate, "amd", "%THREADS%", amdProfile);
154+
var amdProfile = entry.AmdProfiles.SelectMany(x => MasterConfigurationModel.AmdConfiguration.Profiles.GetValue(x)).ToList();
155+
var path = CreateTemporaryConfiguration(MasterConfigurationModel.AmdTemplate, "amd", "%THREADS%", amdProfile);
162156
ScheduleFileDelete(path);
163157

164158
return $"--amd \"{path}\"";
165159
}
166160

167-
private string GetNvidiaArgument(MasterConfiguration configuration, InstanceEntry entry)
161+
private string GetNvidiaArgument(InstanceEntry entry)
168162
{
169163
if (entry.NvidiaProfiles == null || entry.NvidiaProfiles.Count == 0)
170164
{
171165
return "--noNVIDIA";
172166
}
173167

174-
var nvidiaProfile = entry.NvidiaProfiles.SelectMany(x => configuration.NvidiaConfiguration.Profiles.GetValue(x)).ToList();
175-
var path = CreateTemporaryConfiguration(configuration.NvidiaTemplate, "nvidia", "%THREADS%", nvidiaProfile);
168+
var nvidiaProfile = entry.NvidiaProfiles.SelectMany(x => MasterConfigurationModel.NvidiaConfiguration.Profiles.GetValue(x)).ToList();
169+
var path = CreateTemporaryConfiguration(MasterConfigurationModel.NvidiaTemplate, "nvidia", "%THREADS%", nvidiaProfile);
176170
ScheduleFileDelete(path);
177171

178172
return $"--nvidia \"{path}\"";
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System;
2+
using Unity.Attributes;
3+
4+
namespace XmrStakBootstrap.Core.Runner
5+
{
6+
public class RunnerContext : IRunnerContext
7+
{
8+
[Dependency]
9+
public IRunner Runner { get; set; }
10+
11+
[Dependency]
12+
public IFinalizer Finalizer { get; set; }
13+
14+
public void Execute()
15+
{
16+
try
17+
{
18+
Runner.Run();
19+
}
20+
catch (Exception e)
21+
{
22+
Console.WriteLine(@"Unexpected error occured during runtime: ");
23+
Console.WriteLine(e);
24+
}
25+
finally
26+
{
27+
Finalizer.DoFinalize();
28+
}
29+
}
30+
}
31+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System.Diagnostics.CodeAnalysis;
2+
using Unity;
3+
using Unity.Attributes;
4+
using Unity.Injection;
5+
using XmrStakBootstrap.Core.Runner.Generator;
6+
using XmrStakBootstrap.Core.Runner.Miner;
7+
using XmrStakBootstrap.RunConfiguration.Model;
8+
9+
namespace XmrStakBootstrap.Core.Runner
10+
{
11+
public class RunnerInjectionFactory : InjectionFactory
12+
{
13+
public RunnerInjectionFactory() : base(CreateRunner)
14+
{
15+
}
16+
17+
private static IRunner CreateRunner(IUnityContainer container)
18+
{
19+
return container.Resolve<RunnerFactory>().CreateRunner();
20+
}
21+
22+
// ReSharper disable once ClassNeverInstantiated.Local
23+
[SuppressMessage("ReSharper", "MemberCanBePrivate.Local")]
24+
private class RunnerFactory
25+
{
26+
[Dependency]
27+
public RunConfigurationModel ConfigurationModel { get; set; }
28+
29+
[Dependency]
30+
public IUnityContainer UnityContainer { get; set; }
31+
32+
public IRunner CreateRunner()
33+
{
34+
if (ConfigurationModel.GenerateConfigurationOnly)
35+
{
36+
return UnityContainer.Resolve<ConfigurationGeneratorRunner>();
37+
}
38+
39+
return UnityContainer.Resolve<MinerRunner>();
40+
}
41+
}
42+
}
43+
}

xmr-stak-bootstrap/IConfigurationParser.cs

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)