/ ProjectPlugins / CodexClient / CodexNodeFactory.cs
CodexNodeFactory.cs
 1  using CodexClient.Hooks;
 2  using FileUtils;
 3  using Logging;
 4  using WebUtils;
 5  
 6  namespace CodexClient
 7  {
 8      public class CodexNodeFactory
 9      {
10          private readonly ILog log;
11          private readonly IFileManager fileManager;
12          private readonly CodexHooksFactory hooksFactory;
13          private readonly IHttpFactory httpFactory;
14          private readonly IProcessControlFactory processControlFactory;
15  
16          public CodexNodeFactory(ILog log, IFileManager fileManager, CodexHooksFactory hooksFactory, IHttpFactory httpFactory, IProcessControlFactory processControlFactory)
17          {
18              this.log = log;
19              this.fileManager = fileManager;
20              this.hooksFactory = hooksFactory;
21              this.httpFactory = httpFactory;
22              this.processControlFactory = processControlFactory;
23          }
24  
25          public CodexNodeFactory(ILog log, HttpFactory httpFactory, string dataDir)
26              : this(log, new FileManager(log, dataDir), new CodexHooksFactory(), httpFactory, new DoNothingProcessControlFactory())
27          {
28          }
29  
30          public CodexNodeFactory(ILog log, string dataDir)
31              : this(log, new HttpFactory(log), dataDir)
32          {
33          }
34  
35          public ICodexNode CreateCodexNode(ICodexInstance instance)
36          {
37              var processControl = processControlFactory.CreateProcessControl(instance);
38              var access = new CodexAccess(log, httpFactory, processControl, instance);
39              var hooks = hooksFactory.CreateHooks(access.GetName());
40              var marketplaceAccess = CreateMarketplaceAccess(instance, access, hooks);
41              var node =  new CodexNode(log, access, fileManager, marketplaceAccess, hooks);
42              node.Initialize();
43              return node;
44          }
45  
46          private IMarketplaceAccess CreateMarketplaceAccess(ICodexInstance instance, CodexAccess access, ICodexNodeHooks hooks)
47          {
48              if (instance.EthAccount == null) return new MarketplaceUnavailable();
49              return new MarketplaceAccess(log, access, hooks);
50          }
51      }
52  }