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 }