1 using Byond.TopicSender;
2 using Microsoft.Extensions.Logging;
5 using System.Threading.Tasks;
132 public InstanceFactory(
IIOManager ioManager,
IDatabaseContextFactory databaseContextFactory,
IApplication application, ILoggerFactory loggerFactory, IByondTopicSender byondTopicSender,
ICryptographySuite cryptographySuite,
ISynchronousIOManager synchronousIOManager,
ISymlinkFactory symlinkFactory,
IByondInstaller byondInstaller,
IChatFactory chatFactory,
IProcessExecutor processExecutor,
IPostWriteHandler postWriteHandler,
IWatchdogFactory watchdogFactory,
IJobManager jobManager,
ICredentialsProvider credentialsProvider,
INetworkPromptReaper networkPromptReaper,
IGitHubClientFactory gitHubClientFactory,
IPlatformIdentifier platformIdentifier)
134 this.ioManager = ioManager ??
throw new ArgumentNullException(nameof(ioManager));
135 this.databaseContextFactory = databaseContextFactory ??
throw new ArgumentNullException(nameof(databaseContextFactory));
136 this.application = application ??
throw new ArgumentNullException(nameof(application));
137 this.loggerFactory = loggerFactory ??
throw new ArgumentNullException(nameof(loggerFactory));
138 this.byondTopicSender = byondTopicSender ??
throw new ArgumentNullException(nameof(byondTopicSender));
139 this.cryptographySuite = cryptographySuite ??
throw new ArgumentNullException(nameof(cryptographySuite));
140 this.synchronousIOManager = synchronousIOManager ??
throw new ArgumentNullException(nameof(synchronousIOManager));
141 this.symlinkFactory = symlinkFactory ??
throw new ArgumentNullException(nameof(symlinkFactory));
142 this.byondInstaller = byondInstaller ??
throw new ArgumentNullException(nameof(byondInstaller));
143 this.chatFactory = chatFactory ??
throw new ArgumentNullException(nameof(chatFactory));
144 this.processExecutor = processExecutor ??
throw new ArgumentNullException(nameof(processExecutor));
145 this.postWriteHandler = postWriteHandler ??
throw new ArgumentNullException(nameof(postWriteHandler));
146 this.watchdogFactory = watchdogFactory ??
throw new ArgumentNullException(nameof(watchdogFactory));
147 this.jobManager = jobManager ??
throw new ArgumentNullException(nameof(jobManager));
148 this.credentialsProvider = credentialsProvider ??
throw new ArgumentNullException(nameof(credentialsProvider));
149 this.networkPromptReaper = networkPromptReaper ??
throw new ArgumentNullException(nameof(networkPromptReaper));
150 this.gitHubClientFactory = gitHubClientFactory ??
throw new ArgumentNullException(nameof(gitHubClientFactory));
151 this.platformIdentifier = platformIdentifier ??
throw new ArgumentNullException(nameof(platformIdentifier));
164 var configurationIoManager =
new ResolvingIOManager(instanceIoManager,
"Configuration");
166 var configuration =
new StaticFiles.Configuration(configurationIoManager, synchronousIOManager, symlinkFactory, processExecutor, postWriteHandler, platformIdentifier, loggerFactory.CreateLogger<StaticFiles.Configuration>());
169 var dmbFactory =
new DmbFactory(databaseContextFactory, gameIoManager, loggerFactory.CreateLogger<
DmbFactory>(), metadata.CloneMetadata());
175 var byond =
new ByondManager(byondIOManager, byondInstaller, eventConsumer, loggerFactory.CreateLogger<
ByondManager>());
177 var commandFactory =
new CommandFactory(application, byond, repoManager, databaseContextFactory, metadata);
179 var chat = chatFactory.CreateChat(instanceIoManager, commandFactory, metadata.ChatSettings);
182 var sessionControllerFactory =
new SessionControllerFactory(processExecutor, byond, byondTopicSender, cryptographySuite, application, gameIoManager, chat, networkPromptReaper, platformIdentifier, loggerFactory, metadata.CloneMetadata());
184 var watchdog = watchdogFactory.CreateWatchdog(chat, dmbFactory, reattachInfoHandler, configuration, sessionControllerFactory, metadata.CloneMetadata(), metadata.DreamDaemonSettings);
185 eventConsumer.SetWatchdog(watchdog);
186 commandFactory.SetWatchdog(watchdog);
189 var dreamMaker =
new DreamMaker(byond, gameIoManager, configuration, sessionControllerFactory, dmbFactory, application, eventConsumer, chat, processExecutor, watchdog, loggerFactory.CreateLogger<
DreamMaker>());
191 return new Instance(metadata.CloneMetadata(), repoManager, byond, dreamMaker, watchdog, chat, configuration, dmbFactory, databaseContextFactory, dmbFactory, jobManager, eventConsumer, gitHubClientFactory, loggerFactory.CreateLogger<
Instance>());
207 repoManager.Dispose();
213 dmbFactory.Dispose();
219 public Task StartAsync(CancellationToken cancellationToken) => byondInstaller.CleanCache(cancellationToken);
222 public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
readonly ISynchronousIOManager synchronousIOManager
The ISynchronousIOManager for the InstanceFactory
Manages the runtime of Jobs
readonly IByondInstaller byondInstaller
The IByondInstaller for the InstanceFactory
An IIOManager that resolve relative paths from another IIOManager to a subdirectory of that ...
Configures the ASP.NET Core web application
Use server authentication
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the InstanceFactory
Factory for scoping usage of IDatabaseContexts. Meant for use by Components
For launching IProcess'
readonly IByondTopicSender byondTopicSender
The IByondTopicSender for the InstanceFactory
InstanceFactory(IIOManager ioManager, IDatabaseContextFactory databaseContextFactory, IApplication application, ILoggerFactory loggerFactory, IByondTopicSender byondTopicSender, ICryptographySuite cryptographySuite, ISynchronousIOManager synchronousIOManager, ISymlinkFactory symlinkFactory, IByondInstaller byondInstaller, IChatFactory chatFactory, IProcessExecutor processExecutor, IPostWriteHandler postWriteHandler, IWatchdogFactory watchdogFactory, IJobManager jobManager, ICredentialsProvider credentialsProvider, INetworkPromptReaper networkPromptReaper, IGitHubClientFactory gitHubClientFactory, IPlatformIdentifier platformIdentifier)
Construct an InstanceFactory
readonly ICryptographySuite cryptographySuite
The ICryptographySuite for the InstanceFactory
For creating filesystem symbolic links
readonly IApplication application
The IApplication for the InstanceFactory
Repository(LibGit2Sharp.IRepository repository, IIOManager ioMananger, IEventConsumer eventConsumer, ICredentialsProvider credentialsProvider, ILogger< Repository > logger, Action onDispose)
Construct a Repository
Contains various cryptographic functions
readonly IProcessExecutor processExecutor
The IProcessExecutor for the InstanceFactory
For creating IGitHubClients
readonly INetworkPromptReaper networkPromptReaper
The INetworkPromptReaper for the InstanceFactory
readonly IPostWriteHandler postWriteHandler
The IPostWriteHandler for the InstanceFactory
For downloading and installing BYOND extractions for a given system
For accessing the disk in a synchronous manner
readonly IDatabaseContextFactory databaseContextFactory
The IDatabaseContextFactory for the InstanceFactory
readonly IWatchdogFactory watchdogFactory
The IWatchdogFactory for the InstanceFactory
Factory for creating IInstances
For generating CredentialsHandlers
For interacting with the instance services
readonly ICredentialsProvider credentialsProvider
The ICredentialsProvider for the InstanceFactory
readonly IIOManager ioManager
The IIOManager for the InstanceFactory
readonly IGitHubClientFactory gitHubClientFactory
The IGitHubClientFactory for the InstanceFactory
readonly IPlatformIdentifier platformIdentifier
The IPlatformIdentifier for the InstanceFactory
readonly ISymlinkFactory symlinkFactory
The ISymlinkFactory for the InstanceFactory
readonly IJobManager jobManager
The IJobManager for the InstanceFactory
readonly IChatFactory chatFactory
The IProviderFactory for the InstanceFactory
IInstance CreateInstance(Models.Instance metadata)
Create an IInstance
Interface for using filesystems
On Windows, DreamDaemon will show an unskippable prompt when using /world/proc/OpenPort(). This looks out for those prompts and immediately clicks "Yes" if the owning process has registered for it