diff --git a/_api_headers_8cs_source.html b/_api_headers_8cs_source.html index 41fbdb9238..6beb858f9d 100644 --- a/_api_headers_8cs_source.html +++ b/_api_headers_8cs_source.html @@ -242,7 +242,7 @@ $(document).ready(function() { init_codefold(0); });
244 else
245 {
246 var auth = authorization.First();
-
247 var splits = new List<string>(auth.Split(' '));
+
247 var splits = new List<string>(auth?.Split(' ') ?? Enumerable.Empty<string>());
248 var scheme = splits.First();
249 if (String.IsNullOrWhiteSpace(scheme))
250 AddError(HeaderErrorTypes.AuthorizationInvalid, "Missing authentication scheme!");
diff --git a/_application_8cs_source.html b/_application_8cs_source.html index 7933f6c738..30f90c9361 100644 --- a/_application_8cs_source.html +++ b/_application_8cs_source.html @@ -580,244 +580,247 @@ $(document).ready(function() { init_codefold(0); });
518 }
519
-
-
533 public void Configure(
-
534 IApplicationBuilder applicationBuilder,
-
535 IServerControl serverControl,
-
536 ITokenFactory tokenFactory,
-
537 IServerPortProvider serverPortProvider,
-
538 IAssemblyInformationProvider assemblyInformationProvider,
-
539 IOptions<ControlPanelConfiguration> controlPanelConfigurationOptions,
-
540 IOptions<GeneralConfiguration> generalConfigurationOptions,
-
541 IOptions<SwarmConfiguration> swarmConfigurationOptions,
-
542 IOptions<InternalConfiguration> internalConfigurationOptions,
-
543 ILogger<Application> logger)
-
544 {
-
545 ArgumentNullException.ThrowIfNull(applicationBuilder);
-
546 ArgumentNullException.ThrowIfNull(serverControl);
-
547
-
548 this.tokenFactory = tokenFactory ?? throw new ArgumentNullException(nameof(tokenFactory));
+
+
534 public void Configure(
+
535 IApplicationBuilder applicationBuilder,
+
536 IServerControl serverControl,
+ +
538 IServerPortProvider serverPortProvider,
+
539 IAssemblyInformationProvider assemblyInformationProvider,
+
540 IOptions<ControlPanelConfiguration> controlPanelConfigurationOptions,
+
541 IOptions<GeneralConfiguration> generalConfigurationOptions,
+
542 IOptions<DatabaseConfiguration> databaseConfigurationOptions,
+
543 IOptions<SwarmConfiguration> swarmConfigurationOptions,
+
544 IOptions<InternalConfiguration> internalConfigurationOptions,
+
545 ILogger<Application> logger)
+
546 {
+
547 ArgumentNullException.ThrowIfNull(applicationBuilder);
+
548 ArgumentNullException.ThrowIfNull(serverControl);
549
-
550 ArgumentNullException.ThrowIfNull(serverPortProvider);
-
551 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
-
552
-
553 var controlPanelConfiguration = controlPanelConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(controlPanelConfigurationOptions));
-
554 var generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions));
-
555 var swarmConfiguration = swarmConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(swarmConfigurationOptions));
-
556 var internalConfiguration = internalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(internalConfigurationOptions));
-
557
-
558 ArgumentNullException.ThrowIfNull(logger);
-
559
-
560 logger.LogDebug("Content Root: {contentRoot}", hostingEnvironment.ContentRootPath);
-
561 logger.LogTrace("Web Root: {webRoot}", hostingEnvironment.WebRootPath);
+
550 this.tokenFactory = tokenFactory ?? throw new ArgumentNullException(nameof(tokenFactory));
+
551
+
552 ArgumentNullException.ThrowIfNull(serverPortProvider);
+
553 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
+
554
+
555 var controlPanelConfiguration = controlPanelConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(controlPanelConfigurationOptions));
+
556 var generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions));
+
557 var databaseConfiguration = databaseConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(databaseConfigurationOptions));
+
558 var swarmConfiguration = swarmConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(swarmConfigurationOptions));
+
559 var internalConfiguration = internalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(internalConfigurationOptions));
+
560
+
561 ArgumentNullException.ThrowIfNull(logger);
562
-
563 // setup the HTTP request pipeline
-
564 // Add additional logging context to the request
-
565 applicationBuilder.UseAdditionalRequestLoggingContext(swarmConfiguration);
+
563 logger.LogDebug("Database provider: {provider}", databaseConfiguration.DatabaseType);
+
564 logger.LogDebug("Content Root: {contentRoot}", hostingEnvironment.ContentRootPath);
+
565 logger.LogTrace("Web Root: {webRoot}", hostingEnvironment.WebRootPath);
566
-
567 // Wrap exceptions in a 500 (ErrorMessage) response
-
568 applicationBuilder.UseServerErrorHandling();
-
569
-
570 // Add the X-Powered-By response header
-
571 applicationBuilder.UseServerBranding(assemblyInformationProvider);
-
572
-
573 // Add the X-Accel-Buffering response header
-
574 applicationBuilder.UseDisabledNginxProxyBuffering();
-
575
-
576 // suppress OperationCancelledExceptions, they are just aborted HTTP requests
-
577 applicationBuilder.UseCancelledRequestSuppression();
-
578
-
579 // 503 requests made while the application is starting
-
580 applicationBuilder.UseAsyncInitialization<IInstanceManager>(
-
581 (instanceManager, cancellationToken) => instanceManager.Ready.WaitAsync(cancellationToken));
+
567 // setup the HTTP request pipeline
+
568 // Add additional logging context to the request
+
569 applicationBuilder.UseAdditionalRequestLoggingContext(swarmConfiguration);
+
570
+
571 // Wrap exceptions in a 500 (ErrorMessage) response
+
572 applicationBuilder.UseServerErrorHandling();
+
573
+
574 // Add the X-Powered-By response header
+
575 applicationBuilder.UseServerBranding(assemblyInformationProvider);
+
576
+
577 // Add the X-Accel-Buffering response header
+
578 applicationBuilder.UseDisabledNginxProxyBuffering();
+
579
+
580 // suppress OperationCancelledExceptions, they are just aborted HTTP requests
+
581 applicationBuilder.UseCancelledRequestSuppression();
582
-
583 if (generalConfiguration.HostApiDocumentation)
-
584 {
-
585 var siteDocPath = Routes.ApiRoot + $"doc/{SwaggerConfiguration.DocumentName}.json";
-
586 if (!String.IsNullOrWhiteSpace(controlPanelConfiguration.PublicPath))
-
587 siteDocPath = controlPanelConfiguration.PublicPath.TrimEnd('/') + siteDocPath;
-
588
-
589 applicationBuilder.UseSwagger(options =>
-
590 {
-
591 options.RouteTemplate = Routes.ApiRoot + "doc/{documentName}.{json|yaml}";
-
592 });
-
593 applicationBuilder.UseSwaggerUI(options =>
+
583 // 503 requests made while the application is starting
+
584 applicationBuilder.UseAsyncInitialization<IInstanceManager>(
+
585 (instanceManager, cancellationToken) => instanceManager.Ready.WaitAsync(cancellationToken));
+
586
+
587 if (generalConfiguration.HostApiDocumentation)
+
588 {
+
589 var siteDocPath = Routes.ApiRoot + $"doc/{SwaggerConfiguration.DocumentName}.json";
+
590 if (!String.IsNullOrWhiteSpace(controlPanelConfiguration.PublicPath))
+
591 siteDocPath = controlPanelConfiguration.PublicPath.TrimEnd('/') + siteDocPath;
+
592
+
593 applicationBuilder.UseSwagger(options =>
594 {
- -
596 options.SwaggerEndpoint(siteDocPath, "TGS API");
-
597 });
-
598 logger.LogTrace("Swagger API generation enabled");
-
599 }
-
600
-
601 // spa loading if necessary
-
602 if (controlPanelConfiguration.Enable)
-
603 {
-
604 logger.LogInformation("Web control panel enabled.");
-
605 applicationBuilder.UseFileServer(new FileServerOptions
-
606 {
- -
608 EnableDefaultFiles = true,
-
609 EnableDirectoryBrowsing = false,
-
610 RedirectToAppendTrailingSlash = false,
-
611 });
-
612 }
-
613 else
-
614#if NO_WEBPANEL
-
615 logger.LogDebug("Web control panel was not included in TGS build!");
-
616#else
-
617 logger.LogTrace("Web control panel disabled!");
-
618#endif
-
619
-
620 // Enable endpoint routing
-
621 applicationBuilder.UseRouting();
-
622
-
623 // Set up CORS based on configuration if necessary
-
624 Action<CorsPolicyBuilder>? corsBuilder = null;
-
625 if (controlPanelConfiguration.AllowAnyOrigin)
-
626 {
-
627 logger.LogTrace("Access-Control-Allow-Origin: *");
-
628 corsBuilder = builder => builder.SetIsOriginAllowed(_ => true);
-
629 }
-
630 else if (controlPanelConfiguration.AllowedOrigins?.Count > 0)
-
631 {
-
632 logger.LogTrace("Access-Control-Allow-Origin: {allowedOrigins}", String.Join(',', controlPanelConfiguration.AllowedOrigins));
-
633 corsBuilder = builder => builder.WithOrigins([.. controlPanelConfiguration.AllowedOrigins]);
-
634 }
-
635
-
636 var originalBuilder = corsBuilder;
-
637 corsBuilder = builder =>
-
638 {
-
639 builder
-
640 .AllowAnyHeader()
-
641 .AllowAnyMethod()
-
642 .AllowCredentials()
-
643 .SetPreflightMaxAge(TimeSpan.FromDays(1));
-
644 originalBuilder?.Invoke(builder);
-
645 };
-
646 applicationBuilder.UseCors(corsBuilder);
-
647
-
648 // validate the API version
-
649 applicationBuilder.UseApiCompatibility();
-
650
-
651 // authenticate JWT tokens using our security pipeline if present, returns 401 if bad
-
652 applicationBuilder.UseAuthentication();
-
653
-
654 // enable authorization on endpoints
-
655 applicationBuilder.UseAuthorization();
-
656
-
657 // suppress and log database exceptions
-
658 applicationBuilder.UseDbConflictHandling();
-
659
-
660 // setup endpoints
-
661 applicationBuilder.UseEndpoints(endpoints =>
-
662 {
-
663 // access to the signalR jobs hub
-
664 endpoints.MapHub<JobsHub>(
- -
666 options =>
-
667 {
-
668 options.Transports = HttpTransportType.ServerSentEvents;
-
669 options.CloseOnAuthenticationExpiration = true;
-
670 })
-
671 .RequireAuthorization()
-
672 .RequireCors(corsBuilder);
-
673
-
674 // majority of handling is done in the controllers
-
675 endpoints.MapControllers();
-
676
-
677 if (internalConfiguration.EnableGraphQL)
-
678 {
-
679 logger.LogWarning("Enabling GraphQL. This API is experimental and breaking changes may occur at any time!");
-
680 var gqlOptions = new GraphQLServerOptions
-
681 {
-
682 EnableBatching = true,
-
683 };
-
684
-
685 gqlOptions.Tool.Enable = generalConfiguration.HostApiDocumentation;
-
686
-
687 endpoints
-
688 .MapGraphQL(Routes.GraphQL)
-
689 .WithOptions(gqlOptions);
-
690 }
-
691 });
-
692
-
693 // 404 anything that gets this far
-
694 // End of request pipeline setup
-
695 logger.LogTrace("Configuration version: {configVersion}", GeneralConfiguration.CurrentConfigVersion);
-
696 logger.LogTrace("DMAPI Interop version: {interopVersion}", DMApiConstants.InteropVersion);
-
697 if (controlPanelConfiguration.Enable)
-
698 logger.LogTrace("Webpanel version: {webCPVersion}", MasterVersionsAttribute.Instance.RawWebpanelVersion);
-
699
-
700 logger.LogDebug("Starting hosting on port {httpApiPort}...", serverPortProvider.HttpApiPort);
-
701 }
+
595 options.RouteTemplate = Routes.ApiRoot + "doc/{documentName}.{json|yaml}";
+
596 });
+
597 applicationBuilder.UseSwaggerUI(options =>
+
598 {
+ +
600 options.SwaggerEndpoint(siteDocPath, "TGS API");
+
601 });
+
602 logger.LogTrace("Swagger API generation enabled");
+
603 }
+
604
+
605 // spa loading if necessary
+
606 if (controlPanelConfiguration.Enable)
+
607 {
+
608 logger.LogInformation("Web control panel enabled.");
+
609 applicationBuilder.UseFileServer(new FileServerOptions
+
610 {
+ +
612 EnableDefaultFiles = true,
+
613 EnableDirectoryBrowsing = false,
+
614 RedirectToAppendTrailingSlash = false,
+
615 });
+
616 }
+
617 else
+
618#if NO_WEBPANEL
+
619 logger.LogDebug("Web control panel was not included in TGS build!");
+
620#else
+
621 logger.LogTrace("Web control panel disabled!");
+
622#endif
+
623
+
624 // Enable endpoint routing
+
625 applicationBuilder.UseRouting();
+
626
+
627 // Set up CORS based on configuration if necessary
+
628 Action<CorsPolicyBuilder>? corsBuilder = null;
+
629 if (controlPanelConfiguration.AllowAnyOrigin)
+
630 {
+
631 logger.LogTrace("Access-Control-Allow-Origin: *");
+
632 corsBuilder = builder => builder.SetIsOriginAllowed(_ => true);
+
633 }
+
634 else if (controlPanelConfiguration.AllowedOrigins?.Count > 0)
+
635 {
+
636 logger.LogTrace("Access-Control-Allow-Origin: {allowedOrigins}", String.Join(',', controlPanelConfiguration.AllowedOrigins));
+
637 corsBuilder = builder => builder.WithOrigins([.. controlPanelConfiguration.AllowedOrigins]);
+
638 }
+
639
+
640 var originalBuilder = corsBuilder;
+
641 corsBuilder = builder =>
+
642 {
+
643 builder
+
644 .AllowAnyHeader()
+
645 .AllowAnyMethod()
+
646 .AllowCredentials()
+
647 .SetPreflightMaxAge(TimeSpan.FromDays(1));
+
648 originalBuilder?.Invoke(builder);
+
649 };
+
650 applicationBuilder.UseCors(corsBuilder);
+
651
+
652 // validate the API version
+
653 applicationBuilder.UseApiCompatibility();
+
654
+
655 // authenticate JWT tokens using our security pipeline if present, returns 401 if bad
+
656 applicationBuilder.UseAuthentication();
+
657
+
658 // enable authorization on endpoints
+
659 applicationBuilder.UseAuthorization();
+
660
+
661 // suppress and log database exceptions
+
662 applicationBuilder.UseDbConflictHandling();
+
663
+
664 // setup endpoints
+
665 applicationBuilder.UseEndpoints(endpoints =>
+
666 {
+
667 // access to the signalR jobs hub
+
668 endpoints.MapHub<JobsHub>(
+ +
670 options =>
+
671 {
+
672 options.Transports = HttpTransportType.ServerSentEvents;
+
673 options.CloseOnAuthenticationExpiration = true;
+
674 })
+
675 .RequireAuthorization()
+
676 .RequireCors(corsBuilder);
+
677
+
678 // majority of handling is done in the controllers
+
679 endpoints.MapControllers();
+
680
+
681 if (internalConfiguration.EnableGraphQL)
+
682 {
+
683 logger.LogWarning("Enabling GraphQL. This API is experimental and breaking changes may occur at any time!");
+
684 var gqlOptions = new GraphQLServerOptions
+
685 {
+
686 EnableBatching = true,
+
687 };
+
688
+
689 gqlOptions.Tool.Enable = generalConfiguration.HostApiDocumentation;
+
690
+
691 endpoints
+
692 .MapGraphQL(Routes.GraphQL)
+
693 .WithOptions(gqlOptions);
+
694 }
+
695 });
+
696
+
697 // 404 anything that gets this far
+
698 // End of request pipeline setup
+
699 logger.LogTrace("Configuration version: {configVersion}", GeneralConfiguration.CurrentConfigVersion);
+
700 logger.LogTrace("DMAPI Interop version: {interopVersion}", DMApiConstants.InteropVersion);
+
701 if (controlPanelConfiguration.Enable)
+
702 logger.LogTrace("Webpanel version: {webCPVersion}", MasterVersionsAttribute.Instance.RawWebpanelVersion);
+
703
+
704 logger.LogDebug("Starting hosting on port {httpApiPort}...", serverPortProvider.HttpApiPort);
+
705 }
-
702
-
704 protected override void ConfigureHostedService(IServiceCollection services)
-
705 => services.AddSingleton<IHostedService>(x => x.GetRequiredService<InstanceManager>());
706
-
-
711 void ConfigureAuthenticationPipeline(IServiceCollection services)
-
712 {
-
713 services.AddHttpContextAccessor();
-
714 services.AddScoped<IApiHeadersProvider, ApiHeadersProvider>();
-
715 services.AddScoped<AuthenticationContextFactory>();
-
716 services.AddScoped<ITokenValidator>(provider => provider.GetRequiredService<AuthenticationContextFactory>());
-
717
-
718 // what if you
-
719 // wanted to just do this:
-
720 // return provider.GetRequiredService<AuthenticationContextFactory>().CurrentAuthenticationContext
-
721 // But M$ said
-
722 // https://stackoverflow.com/questions/56792917/scoped-services-in-asp-net-core-with-signalr-hubs
-
723 services.AddScoped(provider => (provider
-
724 .GetRequiredService<IHttpContextAccessor>()
-
725 .HttpContext ?? throw new InvalidOperationException($"Unable to resolve {nameof(IAuthenticationContext)} due to no HttpContext being available!"))
-
726 .RequestServices
-
727 .GetRequiredService<AuthenticationContextFactory>()
-
728 .CurrentAuthenticationContext);
- -
730
-
731 services
-
732 .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
-
733 .AddJwtBearer(jwtBearerOptions =>
-
734 {
-
735 // this line isn't actually run until the first request is made
-
736 // at that point tokenFactory will be populated
-
737 jwtBearerOptions.TokenValidationParameters = tokenFactory?.ValidationParameters ?? throw new InvalidOperationException("tokenFactory not initialized!");
-
738 jwtBearerOptions.MapInboundClaims = false;
-
739 jwtBearerOptions.Events = new JwtBearerEvents
-
740 {
-
741 OnMessageReceived = context =>
-
742 {
-
743 if (String.IsNullOrWhiteSpace(context.Token))
-
744 {
-
745 var accessToken = context.Request.Query["access_token"];
-
746 var path = context.HttpContext.Request.Path;
-
747
-
748 if (!String.IsNullOrWhiteSpace(accessToken) &&
-
749 path.StartsWithSegments(Routes.HubsRoot, StringComparison.OrdinalIgnoreCase))
-
750 {
-
751 context.Token = accessToken;
-
752 }
-
753 }
-
754
-
755 return Task.CompletedTask;
-
756 },
-
757 OnTokenValidated = context => context
-
758 .HttpContext
-
759 .RequestServices
-
760 .GetRequiredService<ITokenValidator>()
-
761 .ValidateToken(
-
762 context,
-
763 context
-
764 .HttpContext
-
765 .RequestAborted),
-
766 };
-
767 });
-
768 }
+
708 protected override void ConfigureHostedService(IServiceCollection services)
+
709 => services.AddSingleton<IHostedService>(x => x.GetRequiredService<InstanceManager>());
+
710
+
+
715 void ConfigureAuthenticationPipeline(IServiceCollection services)
+
716 {
+
717 services.AddHttpContextAccessor();
+
718 services.AddScoped<IApiHeadersProvider, ApiHeadersProvider>();
+
719 services.AddScoped<AuthenticationContextFactory>();
+
720 services.AddScoped<ITokenValidator>(provider => provider.GetRequiredService<AuthenticationContextFactory>());
+
721
+
722 // what if you
+
723 // wanted to just do this:
+
724 // return provider.GetRequiredService<AuthenticationContextFactory>().CurrentAuthenticationContext
+
725 // But M$ said
+
726 // https://stackoverflow.com/questions/56792917/scoped-services-in-asp-net-core-with-signalr-hubs
+
727 services.AddScoped(provider => (provider
+
728 .GetRequiredService<IHttpContextAccessor>()
+
729 .HttpContext ?? throw new InvalidOperationException($"Unable to resolve {nameof(IAuthenticationContext)} due to no HttpContext being available!"))
+
730 .RequestServices
+
731 .GetRequiredService<AuthenticationContextFactory>()
+
732 .CurrentAuthenticationContext);
+ +
734
+
735 services
+
736 .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
+
737 .AddJwtBearer(jwtBearerOptions =>
+
738 {
+
739 // this line isn't actually run until the first request is made
+
740 // at that point tokenFactory will be populated
+
741 jwtBearerOptions.TokenValidationParameters = tokenFactory?.ValidationParameters ?? throw new InvalidOperationException("tokenFactory not initialized!");
+
742 jwtBearerOptions.MapInboundClaims = false;
+
743 jwtBearerOptions.Events = new JwtBearerEvents
+
744 {
+
745 OnMessageReceived = context =>
+
746 {
+
747 if (String.IsNullOrWhiteSpace(context.Token))
+
748 {
+
749 var accessToken = context.Request.Query["access_token"];
+
750 var path = context.HttpContext.Request.Path;
+
751
+
752 if (!String.IsNullOrWhiteSpace(accessToken) &&
+
753 path.StartsWithSegments(Routes.HubsRoot, StringComparison.OrdinalIgnoreCase))
+
754 {
+
755 context.Token = accessToken;
+
756 }
+
757 }
+
758
+
759 return Task.CompletedTask;
+
760 },
+
761 OnTokenValidated = context => context
+
762 .HttpContext
+
763 .RequestServices
+
764 .GetRequiredService<ITokenValidator>()
+
765 .ValidateToken(
+
766 context,
+
767 context
+
768 .HttpContext
+
769 .RequestAborted),
+
770 };
+
771 });
+
772 }
-
769 }
+
773 }
-
770}
+
774}
IActionResultExecutor
IClaimsTransformation
@@ -879,10 +882,10 @@ $(document).ready(function() { init_codefold(0); });
Tgstation.Server.Host.Core.Application.AddWatchdog< TSystemWatchdogFactory >
static void AddWatchdog< TSystemWatchdogFactory >(IServiceCollection services, IPostSetupServices postSetupServices)
Adds the IWatchdogFactory implementation.
Definition Application.cs:113
Tgstation.Server.Host.Core.Application.ConfigureServices
void ConfigureServices(IServiceCollection services, IAssemblyInformationProvider assemblyInformationProvider, IIOManager ioManager, IPostSetupServices postSetupServices)
Configure the Application's services .
Definition Application.cs:142
Tgstation.Server.Host.Core.Application.CreateDefaultServerFactory
static IServerFactory CreateDefaultServerFactory()
Create the default IServerFactory.
Definition Application.cs:98
-
Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline
void ConfigureAuthenticationPipeline(IServiceCollection services)
Configure the services for the authentication pipeline.
Definition Application.cs:711
+
Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline
void ConfigureAuthenticationPipeline(IServiceCollection services)
Configure the services for the authentication pipeline.
Definition Application.cs:715
Tgstation.Server.Host.Core.Application.tokenFactory
ITokenFactory? tokenFactory
The ITokenFactory for the Application.
Definition Application.cs:92
Tgstation.Server.Host.Core.Application.Application
Application(IConfiguration configuration, IWebHostEnvironment hostingEnvironment)
Initializes a new instance of the Application class.
Definition Application.cs:127
-
Tgstation.Server.Host.Core.Application.Configure
void Configure(IApplicationBuilder applicationBuilder, IServerControl serverControl, ITokenFactory tokenFactory, IServerPortProvider serverPortProvider, IAssemblyInformationProvider assemblyInformationProvider, IOptions< ControlPanelConfiguration > controlPanelConfigurationOptions, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< SwarmConfiguration > swarmConfigurationOptions, IOptions< InternalConfiguration > internalConfigurationOptions, ILogger< Application > logger)
Configure the Application.
Definition Application.cs:533
+
Tgstation.Server.Host.Core.Application.Configure
void Configure(IApplicationBuilder applicationBuilder, IServerControl serverControl, ITokenFactory tokenFactory, IServerPortProvider serverPortProvider, IAssemblyInformationProvider assemblyInformationProvider, IOptions< ControlPanelConfiguration > controlPanelConfigurationOptions, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< DatabaseConfiguration > databaseConfigurationOptions, IOptions< SwarmConfiguration > swarmConfigurationOptions, IOptions< InternalConfiguration > internalConfigurationOptions, ILogger< Application > logger)
Configure the Application.
Definition Application.cs:534
Tgstation.Server.Host.Core.Application.hostingEnvironment
readonly IWebHostEnvironment hostingEnvironment
The IWebHostEnvironment for the Application.
Definition Application.cs:87
Tgstation.Server.Host.Core.CommandPipeManager
Reads from the command pipe opened by the host watchdog.
Definition CommandPipeManager.cs:22
Tgstation.Server.Host.Core.ServerPortProivder
Definition ServerPortProivder.cs:14
diff --git a/_basic_watchdog_8cs_source.html b/_basic_watchdog_8cs_source.html index 4bb272d94e..5818cdaae2 100644 --- a/_basic_watchdog_8cs_source.html +++ b/_basic_watchdog_8cs_source.html @@ -383,9 +383,9 @@ $(document).ready(function() { init_codefold(0); });
Tgstation.Server.Host.Components.Deployment.DmbFactory
Standard IDmbFactory.
Definition DmbFactory.cs:29
Tgstation.Server.Host.Components.Deployment.DmbFactory.LockNextDmb
IDmbProvider LockNextDmb(string reason, [CallerFilePath] string? callerFile=null, [CallerLineNumber] int callerLine=default)
Gets the next IDmbProvider. DmbAvailable is a precondition.A new IDmbProvider.
Definition DmbFactory.cs:195
Tgstation.Server.Host.Components.Session.ReattachInformation
Parameters necessary for duplicating a ISessionController session.
Definition ReattachInformation.cs:14
-
Tgstation.Server.Host.Components.Session.SessionControllerFactory
Definition SessionControllerFactory.cs:33
-
Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew
async ValueTask< ISessionController > LaunchNew(IDmbProvider dmbProvider, IEngineExecutableLock? currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, CancellationToken cancellationToken)
Create a ISessionController from a freshly launch DreamDaemon instance.A ValueTask<TResult> resulting...
Definition SessionControllerFactory.cs:234
-
Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach
async ValueTask< ISessionController?> Reattach(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Create a ISessionController from an existing DreamDaemon instance.A ValueTask<TResult> resulting in a...
Definition SessionControllerFactory.cs:398
+
Tgstation.Server.Host.Components.Session.SessionControllerFactory
Definition SessionControllerFactory.cs:34
+
Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew
async ValueTask< ISessionController > LaunchNew(IDmbProvider dmbProvider, IEngineExecutableLock? currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, CancellationToken cancellationToken)
Create a ISessionController from a freshly launch DreamDaemon instance.A ValueTask<TResult> resulting...
Definition SessionControllerFactory.cs:235
+
Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach
async ValueTask< ISessionController?> Reattach(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Create a ISessionController from an existing DreamDaemon instance.A ValueTask<TResult> resulting in a...
Definition SessionControllerFactory.cs:399
Tgstation.Server.Host.Components.Session.SessionPersistor
Definition SessionPersistor.cs:18
Tgstation.Server.Host.Components.Session.SessionPersistor.Update
ValueTask Update(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Update some reattachInformation .A ValueTask representing the running operation.
Tgstation.Server.Host.Components.Session.SessionPersistor.Save
ValueTask Save(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Save some reattachInformation .A ValueTask representing the running operation.
diff --git a/_error_message_filter_8cs_source.html b/_error_message_filter_8cs_source.html index 692bca1a25..494c6506d8 100644 --- a/_error_message_filter_8cs_source.html +++ b/_error_message_filter_8cs_source.html @@ -115,7 +115,7 @@ $(document).ready(function() { init_codefold(0); });
38 return error;
39
40 var errorBuilder = ErrorBuilder.FromError(error)
-
41 .RemoveException()
+
41 .SetException(null)
42 .ClearExtensions();
43
44 const string ErrorCodeFieldName = "errorCode";
diff --git a/_event_type_8cs.html b/_event_type_8cs.html index 48c02f1fe0..43febc71f7 100644 --- a/_event_type_8cs.html +++ b/_event_type_8cs.html @@ -133,6 +133,8 @@ Enumerations , Tgstation.Server.Host.Components.Events.DeploymentCleanup , Tgstation.Server.Host.Components.Events.DeploymentActivation , Tgstation.Server.Host.Components.Events.EngineInstallComplete +,
+  Tgstation.Server.Host.Components.Events.DreamDaemonPreLaunch
}  Types of events. Mirror in tgs.dm. Prefer last listed name for script. More...
diff --git a/_event_type_8cs_source.html b/_event_type_8cs_source.html index 6d4d72eef0..d64bbb4042 100644 --- a/_event_type_8cs_source.html +++ b/_event_type_8cs_source.html @@ -170,9 +170,12 @@ $(document).ready(function() { init_codefold(0); });
170
174 [EventScript("EngineInstallComplete")]
175 EngineInstallComplete,
-
176 }
+
176
+
180 [EventScript("DreamDaemonPreLaunch")]
+
181 DreamDaemonPreLaunch,
+
182 }
-
177}
+
183}
Tgstation.Server.Host.Components.Events
Definition EventConsumer.cs:10
Tgstation.Server.Host.Components.Events.EventType
EventType
Types of events. Mirror in tgs.dm. Prefer last listed name for script.
Definition EventType.cs:7
Tgstation.Server.Host.Components.Events.EventType.EngineInstallComplete
@ EngineInstallComplete
Parameters: Version being installed.
@@ -185,6 +188,7 @@ $(document).ready(function() { init_codefold(0); });
Tgstation.Server.Host.Components.Events.EventType.WatchdogLaunch
@ WatchdogLaunch
Before the watchdog launches. No parameters.
Tgstation.Server.Host.Components.Events.EventType.WatchdogShutdown
@ WatchdogShutdown
Before the watchdog shuts down. Not sent for graceful shutdowns. No parameters.
Tgstation.Server.Host.Components.Events.EventType.EngineInstallStart
@ EngineInstallStart
Parameters: Version being installed.
+
Tgstation.Server.Host.Components.Events.EventType.DreamDaemonPreLaunch
@ DreamDaemonPreLaunch
Before game server process is created. No parameters.
Tgstation.Server.Host.Components.Events.EventType.WorldEndProcess
@ WorldEndProcess
In between watchdog DreamDaemon restarts if the process has been force-ended by the DMAPI (TgsEndProc...
Tgstation.Server.Host.Components.Events.EventType.PreDreamMaker
@ PreDreamMaker
After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path,...
Tgstation.Server.Host.Components.Events.EventType.RepoMergeConflict
@ RepoMergeConflict
Parameters: Base sha, target sha, base reference, target reference, all conflicting files.
diff --git a/_instance_factory_8cs_source.html b/_instance_factory_8cs_source.html index 8769d4ec6c..09e7ca62c1 100644 --- a/_instance_factory_8cs_source.html +++ b/_instance_factory_8cs_source.html @@ -437,7 +437,7 @@ $(document).ready(function() { init_codefold(0); });
Tgstation.Server.Host.Components.InstanceFactory.loggerFactory
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the InstanceFactory.
Definition InstanceFactory.cs:51
Tgstation.Server.Host.Components.Instance
Definition Instance.cs:32
Tgstation.Server.Host.Components.Instance.DisposeAsync
async ValueTask DisposeAsync()
Definition Instance.cs:176
-
Tgstation.Server.Host.Components.Session.SessionControllerFactory
Definition SessionControllerFactory.cs:33
+
Tgstation.Server.Host.Components.Session.SessionControllerFactory
Definition SessionControllerFactory.cs:34
Tgstation.Server.Host.Components.Session.SessionPersistor
Definition SessionPersistor.cs:18
Tgstation.Server.Host.Configuration.GeneralConfiguration
General configuration options.
Definition GeneralConfiguration.cs:23
Tgstation.Server.Host.Configuration.SessionConfiguration
Configuration options for the game sessions.
Definition SessionConfiguration.cs:7
diff --git a/_session_controller_factory_8cs_source.html b/_session_controller_factory_8cs_source.html index 34b9c1ac7f..1a5a23570c 100644 --- a/_session_controller_factory_8cs_source.html +++ b/_session_controller_factory_8cs_source.html @@ -85,560 +85,568 @@ $(document).ready(function() { init_codefold(0); }); Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Globalization;
-
4using System.Net.Sockets;
-
5using System.Text;
-
6using System.Threading;
-
7using System.Threading.Tasks;
-
8
-
9using Microsoft.Extensions.Logging;
-
10
-
11using Tgstation.Server.Api.Models;
-
12using Tgstation.Server.Api.Models.Internal;
-
13using Tgstation.Server.Common.Extensions;
-
14using Tgstation.Server.Host.Components.Chat;
-
15using Tgstation.Server.Host.Components.Deployment;
-
16using Tgstation.Server.Host.Components.Engine;
-
17using Tgstation.Server.Host.Components.Events;
-
18using Tgstation.Server.Host.Components.Interop;
-
19using Tgstation.Server.Host.Components.Interop.Bridge;
-
20using Tgstation.Server.Host.Configuration;
-
21using Tgstation.Server.Host.Core;
-
22using Tgstation.Server.Host.Extensions;
-
23using Tgstation.Server.Host.IO;
-
24using Tgstation.Server.Host.Jobs;
-
25using Tgstation.Server.Host.Security;
-
26using Tgstation.Server.Host.System;
-
27using Tgstation.Server.Host.Utils;
-
28
-
29namespace Tgstation.Server.Host.Components.Session
-
30{
-
- -
33 {
-
37 const string DreamDaemonLogsPath = "DreamDaemonLogs";
-
38
- -
43
- -
48
- -
53
- -
58
- -
63
- -
68
- -
73
- -
78
- -
83
- -
88
- -
93
- -
98
- -
103
- -
108
- -
113
-
117 readonly ILoggerFactory loggerFactory;
-
118
-
122 readonly ILogger<SessionControllerFactory> logger;
-
123
- -
128
- -
133
-
-
141 async ValueTask PortBindTest(ushort port, EngineType engineType, CancellationToken cancellationToken)
-
142 {
-
143 logger.LogTrace("Bind test: {port}", port);
-
144 try
-
145 {
-
146 // GIVE ME THE FUCKING PORT BACK WINDOWS!!!!
-
147 const int MaxAttempts = 5;
-
148 for (var i = 0; i < MaxAttempts; ++i)
-
149 try
-
150 {
-
151 SocketExtensions.BindTest(platformIdentifier, port, false, engineType == EngineType.OpenDream);
-
152 if (i > 0)
-
153 logger.LogDebug("Clearing the socket took {iterations} attempts :/", i + 1);
-
154
-
155 break;
-
156 }
-
157 catch (SocketException ex) when (platformIdentifier.IsWindows && ex.SocketErrorCode == SocketError.AddressAlreadyInUse && i < (MaxAttempts - 1))
-
158 {
-
159 await asyncDelayer.Delay(TimeSpan.FromSeconds(1), cancellationToken);
-
160 }
-
161 }
-
162 catch (SocketException ex) when (ex.SocketErrorCode == SocketError.AddressAlreadyInUse)
-
163 {
-
164 throw new JobException(ErrorCode.GameServerPortInUse, ex);
-
165 }
-
166 }
+
4using System.Linq;
+
5using System.Net.Sockets;
+
6using System.Text;
+
7using System.Threading;
+
8using System.Threading.Tasks;
+
9
+
10using Microsoft.Extensions.Logging;
+
11
+ + + + + + + + + + + + + + + + + +
29
+ +
31{
+
+ +
34 {
+
38 const string DreamDaemonLogsPath = "DreamDaemonLogs";
+
39
+ +
44
+ +
49
+ +
54
+ +
59
+ +
64
+ +
69
+ +
74
+ +
79
+ +
84
+ +
89
+ +
94
+ +
99
+ +
104
+ +
109
+ +
114
+
118 readonly ILoggerFactory loggerFactory;
+
119
+
123 readonly ILogger<SessionControllerFactory> logger;
+
124
+ +
129
+ +
134
+
+
142 async ValueTask PortBindTest(ushort port, EngineType engineType, CancellationToken cancellationToken)
+
143 {
+
144 logger.LogTrace("Bind test: {port}", port);
+
145 try
+
146 {
+
147 // GIVE ME THE FUCKING PORT BACK WINDOWS!!!!
+
148 const int MaxAttempts = 5;
+
149 for (var i = 0; i < MaxAttempts; ++i)
+
150 try
+
151 {
+
152 SocketExtensions.BindTest(platformIdentifier, port, false, engineType == EngineType.OpenDream);
+
153 if (i > 0)
+
154 logger.LogDebug("Clearing the socket took {iterations} attempts :/", i + 1);
+
155
+
156 break;
+
157 }
+
158 catch (SocketException ex) when (platformIdentifier.IsWindows && ex.SocketErrorCode == SocketError.AddressAlreadyInUse && i < (MaxAttempts - 1))
+
159 {
+
160 await asyncDelayer.Delay(TimeSpan.FromSeconds(1), cancellationToken);
+
161 }
+
162 }
+
163 catch (SocketException ex) when (ex.SocketErrorCode == SocketError.AddressAlreadyInUse)
+
164 {
+
165 throw new JobException(ErrorCode.GameServerPortInUse, ex);
+
166 }
+
167 }
-
167
-
- - - - - - - - - - - - - - - - -
206 ILoggerFactory loggerFactory,
-
207 ILogger<SessionControllerFactory> logger,
- -
209 Api.Models.Instance instance)
-
210 {
-
211 this.processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor));
-
212 this.engineManager = engineManager ?? throw new ArgumentNullException(nameof(engineManager));
-
213 this.topicClientFactory = topicClientFactory ?? throw new ArgumentNullException(nameof(topicClientFactory));
-
214 this.cryptographySuite = cryptographySuite ?? throw new ArgumentNullException(nameof(cryptographySuite));
-
215 this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
-
216 this.gameIOManager = gameIOManager ?? throw new ArgumentNullException(nameof(gameIOManager));
-
217 this.diagnosticsIOManager = diagnosticsIOManager ?? throw new ArgumentNullException(nameof(diagnosticsIOManager));
-
218 this.chat = chat ?? throw new ArgumentNullException(nameof(chat));
-
219 this.networkPromptReaper = networkPromptReaper ?? throw new ArgumentNullException(nameof(networkPromptReaper));
-
220 this.platformIdentifier = platformIdentifier ?? throw new ArgumentNullException(nameof(platformIdentifier));
-
221 this.bridgeRegistrar = bridgeRegistrar ?? throw new ArgumentNullException(nameof(bridgeRegistrar));
-
222 this.serverPortProvider = serverPortProvider ?? throw new ArgumentNullException(nameof(serverPortProvider));
-
223 this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
-
224 this.asyncDelayer = asyncDelayer ?? throw new ArgumentNullException(nameof(asyncDelayer));
-
225 this.dotnetDumpService = dotnetDumpService ?? throw new ArgumentNullException(nameof(dotnetDumpService));
-
226 this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
-
227 this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
-
228 this.sessionConfiguration = sessionConfiguration ?? throw new ArgumentNullException(nameof(sessionConfiguration));
-
229 this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
-
230 }
+
168
+
+ + + + + + + + + + + + + + + + +
207 ILoggerFactory loggerFactory,
+
208 ILogger<SessionControllerFactory> logger,
+ +
210 Api.Models.Instance instance)
+
211 {
+
212 this.processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor));
+
213 this.engineManager = engineManager ?? throw new ArgumentNullException(nameof(engineManager));
+
214 this.topicClientFactory = topicClientFactory ?? throw new ArgumentNullException(nameof(topicClientFactory));
+
215 this.cryptographySuite = cryptographySuite ?? throw new ArgumentNullException(nameof(cryptographySuite));
+
216 this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
+
217 this.gameIOManager = gameIOManager ?? throw new ArgumentNullException(nameof(gameIOManager));
+
218 this.diagnosticsIOManager = diagnosticsIOManager ?? throw new ArgumentNullException(nameof(diagnosticsIOManager));
+
219 this.chat = chat ?? throw new ArgumentNullException(nameof(chat));
+
220 this.networkPromptReaper = networkPromptReaper ?? throw new ArgumentNullException(nameof(networkPromptReaper));
+
221 this.platformIdentifier = platformIdentifier ?? throw new ArgumentNullException(nameof(platformIdentifier));
+
222 this.bridgeRegistrar = bridgeRegistrar ?? throw new ArgumentNullException(nameof(bridgeRegistrar));
+
223 this.serverPortProvider = serverPortProvider ?? throw new ArgumentNullException(nameof(serverPortProvider));
+
224 this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
+
225 this.asyncDelayer = asyncDelayer ?? throw new ArgumentNullException(nameof(asyncDelayer));
+
226 this.dotnetDumpService = dotnetDumpService ?? throw new ArgumentNullException(nameof(dotnetDumpService));
+
227 this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
+
228 this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
+
229 this.sessionConfiguration = sessionConfiguration ?? throw new ArgumentNullException(nameof(sessionConfiguration));
+
230 this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
+
231 }
-
231
-
233 #pragma warning disable CA1506 // TODO: Decomplexify
-
-
234 public async ValueTask<ISessionController> LaunchNew(
-
235 IDmbProvider dmbProvider,
-
236 IEngineExecutableLock? currentByondLock,
-
237 DreamDaemonLaunchParameters launchParameters,
-
238 bool apiValidate,
-
239 CancellationToken cancellationToken)
-
240 {
-
241 logger.LogTrace("Begin session launch...");
-
242 if (!launchParameters.Port.HasValue)
-
243 throw new InvalidOperationException("Given port is null!");
-
244
-
245 switch (dmbProvider.CompileJob.MinimumSecurityLevel)
-
246 {
-
247 case DreamDaemonSecurity.Ultrasafe:
-
248 break;
-
249 case DreamDaemonSecurity.Safe:
-
250 if (launchParameters.SecurityLevel == DreamDaemonSecurity.Ultrasafe)
-
251 {
-
252 logger.LogTrace("Boosting security level to minimum of Safe");
-
253 launchParameters.SecurityLevel = DreamDaemonSecurity.Safe;
-
254 }
-
255
-
256 break;
-
257 case DreamDaemonSecurity.Trusted:
-
258 if (launchParameters.SecurityLevel != DreamDaemonSecurity.Trusted)
-
259 logger.LogTrace("Boosting security level to minimum of Trusted");
-
260
-
261 launchParameters.SecurityLevel = DreamDaemonSecurity.Trusted;
-
262 break;
-
263 default:
-
264 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid DreamDaemonSecurity value: {0}", dmbProvider.CompileJob.MinimumSecurityLevel));
-
265 }
-
266
-
267 // get the byond lock
-
268 var engineLock = currentByondLock ?? await engineManager.UseExecutables(
-
269 dmbProvider.EngineVersion,
-
270 gameIOManager.ConcatPath(dmbProvider.Directory, dmbProvider.DmbName),
-
271 cancellationToken);
-
272 try
-
273 {
-
274 logger.LogDebug(
-
275 "Launching session with CompileJob {compileJobId}...",
-
276 dmbProvider.CompileJob.Id);
-
277
-
278 // mad this isn't abstracted but whatever
-
279 var engineType = dmbProvider.EngineVersion.Engine!.Value;
-
280 if (engineType == EngineType.Byond)
- -
282
-
283 await PortBindTest(launchParameters.Port.Value, engineType, cancellationToken);
-
284
-
285 string? outputFilePath = null;
-
286 var preserveLogFile = true;
-
287
-
288 var hasStandardOutput = engineLock.HasStandardOutput;
-
289 if (launchParameters.LogOutput!.Value)
-
290 {
-
291 var now = DateTimeOffset.UtcNow;
-
292 var dateDirectory = diagnosticsIOManager.ConcatPath(DreamDaemonLogsPath, now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
-
293 await diagnosticsIOManager.CreateDirectory(dateDirectory, cancellationToken);
-
294 outputFilePath = diagnosticsIOManager.ResolvePath(
- -
296 dateDirectory,
-
297 $"server-utc-{now.ToString("yyyy-MM-dd-HH-mm-ss", CultureInfo.InvariantCulture)}{(apiValidate ? "-dmapi" : String.Empty)}.log"));
-
298
-
299 logger.LogInformation("Logging server output to {path}...", outputFilePath);
-
300 }
-
301 else if (!hasStandardOutput)
-
302 {
-
303 outputFilePath = gameIOManager.ConcatPath(dmbProvider.Directory, $"{Guid.NewGuid()}.server.log");
-
304 preserveLogFile = false;
-
305 }
-
306
-
307 var accessIdentifier = cryptographySuite.GetSecureString();
-
308
-
309 if (!apiValidate && dmbProvider.CompileJob.DMApiVersion == null)
-
310 logger.LogDebug("Session will have no DMAPI support!");
-
311
-
312 // launch dd
-
313 var process = await CreateGameServerProcess(
-
314 dmbProvider,
-
315 engineLock,
-
316 launchParameters,
-
317 accessIdentifier,
-
318 outputFilePath,
-
319 apiValidate,
-
320 cancellationToken);
-
321
-
322 try
-
323 {
-
324 var chatTrackingContext = chat.CreateTrackingContext();
-
325
-
326 try
-
327 {
-
328 var runtimeInformation = CreateRuntimeInformation(
-
329 dmbProvider,
-
330 chatTrackingContext,
-
331 launchParameters.SecurityLevel!.Value,
-
332 launchParameters.Visibility!.Value,
-
333 apiValidate);
-
334
-
335 var reattachInformation = new ReattachInformation(
-
336 dmbProvider,
-
337 process,
-
338 runtimeInformation,
-
339 accessIdentifier,
-
340 launchParameters.Port.Value);
-
341
-
342 var byondTopicSender = topicClientFactory.CreateTopicClient(
-
343 TimeSpan.FromMilliseconds(
-
344 launchParameters.TopicRequestTimeout!.Value));
-
345
-
346 var sessionController = new SessionController(
-
347 reattachInformation,
-
348 instance,
-
349 process,
-
350 engineLock,
-
351 byondTopicSender,
-
352 chatTrackingContext,
- -
354 chat,
- - - - -
359 loggerFactory.CreateLogger<SessionController>(),
-
360 () => LogDDOutput(
-
361 process,
-
362 outputFilePath,
-
363 hasStandardOutput,
-
364 preserveLogFile,
-
365 CancellationToken.None), // DCT: None available
-
366 launchParameters.StartupTimeout,
-
367 false,
-
368 apiValidate);
-
369
-
370 return sessionController;
-
371 }
-
372 catch
-
373 {
-
374 chatTrackingContext.Dispose();
-
375 throw;
-
376 }
-
377 }
-
378 catch
-
379 {
-
380 await using (process)
-
381 {
-
382 process.Terminate();
-
383 await process.Lifetime;
-
384 throw;
-
385 }
-
386 }
-
387 }
-
388 catch
-
389 {
-
390 if (currentByondLock == null)
-
391 engineLock.Dispose();
-
392 throw;
-
393 }
-
394 }
+
232
+
234 #pragma warning disable CA1506 // TODO: Decomplexify
+
+
235 public async ValueTask<ISessionController> LaunchNew(
+
236 IDmbProvider dmbProvider,
+
237 IEngineExecutableLock? currentByondLock,
+
238 DreamDaemonLaunchParameters launchParameters,
+
239 bool apiValidate,
+
240 CancellationToken cancellationToken)
+
241 {
+
242 logger.LogTrace("Begin session launch...");
+
243 if (!launchParameters.Port.HasValue)
+
244 throw new InvalidOperationException("Given port is null!");
+
245
+
246 switch (dmbProvider.CompileJob.MinimumSecurityLevel)
+
247 {
+
248 case DreamDaemonSecurity.Ultrasafe:
+
249 break;
+
250 case DreamDaemonSecurity.Safe:
+
251 if (launchParameters.SecurityLevel == DreamDaemonSecurity.Ultrasafe)
+
252 {
+
253 logger.LogTrace("Boosting security level to minimum of Safe");
+
254 launchParameters.SecurityLevel = DreamDaemonSecurity.Safe;
+
255 }
+
256
+
257 break;
+
258 case DreamDaemonSecurity.Trusted:
+
259 if (launchParameters.SecurityLevel != DreamDaemonSecurity.Trusted)
+
260 logger.LogTrace("Boosting security level to minimum of Trusted");
+
261
+
262 launchParameters.SecurityLevel = DreamDaemonSecurity.Trusted;
+
263 break;
+
264 default:
+
265 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid DreamDaemonSecurity value: {0}", dmbProvider.CompileJob.MinimumSecurityLevel));
+
266 }
+
267
+
268 // get the byond lock
+
269 var engineLock = currentByondLock ?? await engineManager.UseExecutables(
+
270 dmbProvider.EngineVersion,
+
271 gameIOManager.ConcatPath(dmbProvider.Directory, dmbProvider.DmbName),
+
272 cancellationToken);
+
273 try
+
274 {
+
275 logger.LogDebug(
+
276 "Launching session with CompileJob {compileJobId}...",
+
277 dmbProvider.CompileJob.Id);
+
278
+
279 // mad this isn't abstracted but whatever
+
280 var engineType = dmbProvider.EngineVersion.Engine!.Value;
+
281 if (engineType == EngineType.Byond)
+ +
283
+
284 await PortBindTest(launchParameters.Port.Value, engineType, cancellationToken);
+
285
+
286 string? outputFilePath = null;
+
287 var preserveLogFile = true;
+
288
+
289 var hasStandardOutput = engineLock.HasStandardOutput;
+
290 if (launchParameters.LogOutput!.Value)
+
291 {
+
292 var now = DateTimeOffset.UtcNow;
+
293 var dateDirectory = diagnosticsIOManager.ConcatPath(DreamDaemonLogsPath, now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
+
294 await diagnosticsIOManager.CreateDirectory(dateDirectory, cancellationToken);
+
295 outputFilePath = diagnosticsIOManager.ResolvePath(
+ +
297 dateDirectory,
+
298 $"server-utc-{now.ToString("yyyy-MM-dd-HH-mm-ss", CultureInfo.InvariantCulture)}{(apiValidate ? "-dmapi" : String.Empty)}.log"));
+
299
+
300 logger.LogInformation("Logging server output to {path}...", outputFilePath);
+
301 }
+
302 else if (!hasStandardOutput)
+
303 {
+
304 outputFilePath = gameIOManager.ConcatPath(dmbProvider.Directory, $"{Guid.NewGuid()}.server.log");
+
305 preserveLogFile = false;
+
306 }
+
307
+
308 var accessIdentifier = cryptographySuite.GetSecureString();
+
309
+
310 if (!apiValidate && dmbProvider.CompileJob.DMApiVersion == null)
+
311 logger.LogDebug("Session will have no DMAPI support!");
+
312
+
313 // launch dd
+
314 var process = await CreateGameServerProcess(
+
315 dmbProvider,
+
316 engineLock,
+
317 launchParameters,
+
318 accessIdentifier,
+
319 outputFilePath,
+
320 apiValidate,
+
321 cancellationToken);
+
322
+
323 try
+
324 {
+
325 var chatTrackingContext = chat.CreateTrackingContext();
+
326
+
327 try
+
328 {
+
329 var runtimeInformation = CreateRuntimeInformation(
+
330 dmbProvider,
+
331 chatTrackingContext,
+
332 launchParameters.SecurityLevel!.Value,
+
333 launchParameters.Visibility!.Value,
+
334 apiValidate);
+
335
+
336 var reattachInformation = new ReattachInformation(
+
337 dmbProvider,
+
338 process,
+
339 runtimeInformation,
+
340 accessIdentifier,
+
341 launchParameters.Port.Value);
+
342
+
343 var byondTopicSender = topicClientFactory.CreateTopicClient(
+
344 TimeSpan.FromMilliseconds(
+
345 launchParameters.TopicRequestTimeout!.Value));
+
346
+
347 var sessionController = new SessionController(
+
348 reattachInformation,
+
349 instance,
+
350 process,
+
351 engineLock,
+
352 byondTopicSender,
+
353 chatTrackingContext,
+ +
355 chat,
+ + + + +
360 loggerFactory.CreateLogger<SessionController>(),
+
361 () => LogDDOutput(
+
362 process,
+
363 outputFilePath,
+
364 hasStandardOutput,
+
365 preserveLogFile,
+
366 CancellationToken.None), // DCT: None available
+
367 launchParameters.StartupTimeout,
+
368 false,
+
369 apiValidate);
+
370
+
371 return sessionController;
+
372 }
+
373 catch
+
374 {
+
375 chatTrackingContext.Dispose();
+
376 throw;
+
377 }
+
378 }
+
379 catch
+
380 {
+
381 await using (process)
+
382 {
+
383 process.Terminate();
+
384 await process.Lifetime;
+
385 throw;
+
386 }
+
387 }
+
388 }
+
389 catch
+
390 {
+
391 if (currentByondLock == null)
+
392 engineLock.Dispose();
+
393 throw;
+
394 }
+
395 }
-
395#pragma warning restore CA1506
-
396
-
-
398 public async ValueTask<ISessionController?> Reattach(
-
399 ReattachInformation reattachInformation,
-
400 CancellationToken cancellationToken)
-
401 {
-
402 ArgumentNullException.ThrowIfNull(reattachInformation);
-
403
-
404 logger.LogTrace("Begin session reattach...");
-
405 var byondTopicSender = topicClientFactory.CreateTopicClient(reattachInformation.TopicRequestTimeout);
-
406 var engineLock = await engineManager.UseExecutables(
-
407 reattachInformation.Dmb.EngineVersion,
-
408 null, // Doesn't matter if it's trusted or not on reattach
-
409 cancellationToken);
-
410
-
411 try
-
412 {
-
413 logger.LogDebug(
-
414 "Attaching to session PID: {pid}, CompileJob: {compileJobId}...",
-
415 reattachInformation.ProcessId,
-
416 reattachInformation.Dmb.CompileJob.Id);
-
417
-
418 var process = processExecutor.GetProcess(reattachInformation.ProcessId);
-
419 if (process == null)
-
420 return null;
-
421
-
422 try
-
423 {
-
424 if (engineLock.PromptsForNetworkAccess)
- -
426
-
427 var chatTrackingContext = chat.CreateTrackingContext();
-
428 try
-
429 {
-
430 var runtimeInformation = CreateRuntimeInformation(
-
431 reattachInformation.Dmb,
-
432 chatTrackingContext,
-
433 reattachInformation.LaunchSecurityLevel,
-
434 reattachInformation.LaunchVisibility,
-
435 false);
-
436 reattachInformation.SetRuntimeInformation(runtimeInformation);
-
437
-
438 var controller = new SessionController(
-
439 reattachInformation,
-
440 instance,
-
441 process,
-
442 engineLock,
-
443 byondTopicSender,
-
444 chatTrackingContext,
- -
446 chat,
- - - - -
451 loggerFactory.CreateLogger<SessionController>(),
-
452 () => ValueTask.CompletedTask,
-
453 null,
-
454 true,
-
455 false);
-
456
-
457 process = null;
-
458 engineLock = null;
-
459 chatTrackingContext = null;
-
460
-
461 return controller;
-
462 }
-
463 catch
-
464 {
-
465 chatTrackingContext?.Dispose();
-
466 throw;
-
467 }
-
468 }
-
469 catch
-
470 {
-
471 if (process != null)
-
472 await process.DisposeAsync();
-
473
-
474 throw;
-
475 }
-
476 }
-
477 catch
-
478 {
-
479 engineLock?.Dispose();
-
480 throw;
-
481 }
-
482 }
+
396#pragma warning restore CA1506
+
397
+
+
399 public async ValueTask<ISessionController?> Reattach(
+
400 ReattachInformation reattachInformation,
+
401 CancellationToken cancellationToken)
+
402 {
+
403 ArgumentNullException.ThrowIfNull(reattachInformation);
+
404
+
405 logger.LogTrace("Begin session reattach...");
+
406 var byondTopicSender = topicClientFactory.CreateTopicClient(reattachInformation.TopicRequestTimeout);
+
407 var engineLock = await engineManager.UseExecutables(
+
408 reattachInformation.Dmb.EngineVersion,
+
409 null, // Doesn't matter if it's trusted or not on reattach
+
410 cancellationToken);
+
411
+
412 try
+
413 {
+
414 logger.LogDebug(
+
415 "Attaching to session PID: {pid}, CompileJob: {compileJobId}...",
+
416 reattachInformation.ProcessId,
+
417 reattachInformation.Dmb.CompileJob.Id);
+
418
+
419 var process = processExecutor.GetProcess(reattachInformation.ProcessId);
+
420 if (process == null)
+
421 return null;
+
422
+
423 try
+
424 {
+
425 if (engineLock.PromptsForNetworkAccess)
+ +
427
+
428 var chatTrackingContext = chat.CreateTrackingContext();
+
429 try
+
430 {
+
431 var runtimeInformation = CreateRuntimeInformation(
+
432 reattachInformation.Dmb,
+
433 chatTrackingContext,
+
434 reattachInformation.LaunchSecurityLevel,
+
435 reattachInformation.LaunchVisibility,
+
436 false);
+
437 reattachInformation.SetRuntimeInformation(runtimeInformation);
+
438
+
439 var controller = new SessionController(
+
440 reattachInformation,
+
441 instance,
+
442 process,
+
443 engineLock,
+
444 byondTopicSender,
+
445 chatTrackingContext,
+ +
447 chat,
+ + + + +
452 loggerFactory.CreateLogger<SessionController>(),
+
453 () => ValueTask.CompletedTask,
+
454 null,
+
455 true,
+
456 false);
+
457
+
458 process = null;
+
459 engineLock = null;
+
460 chatTrackingContext = null;
+
461
+
462 return controller;
+
463 }
+
464 catch
+
465 {
+
466 chatTrackingContext?.Dispose();
+
467 throw;
+
468 }
+
469 }
+
470 catch
+
471 {
+
472 if (process != null)
+
473 await process.DisposeAsync();
+
474
+
475 throw;
+
476 }
+
477 }
+
478 catch
+
479 {
+
480 engineLock?.Dispose();
+
481 throw;
+
482 }
+
483 }
-
483
-
-
495 async ValueTask<IProcess> CreateGameServerProcess(
-
496 IDmbProvider dmbProvider,
-
497 IEngineExecutableLock engineLock,
-
498 DreamDaemonLaunchParameters launchParameters,
-
499 string accessIdentifier,
-
500 string? logFilePath,
-
501 bool apiValidate,
-
502 CancellationToken cancellationToken)
-
503 {
-
504 // important to run on all ports to allow port changing
-
505 var environment = await engineLock.LoadEnv(logger, false, cancellationToken);
-
506 var arguments = engineLock.FormatServerArguments(
-
507 dmbProvider,
-
508 new Dictionary<string, string>
-
509 {
- -
511 { DMApiConstants.ParamServerPort, serverPortProvider.HttpApiPort.ToString(CultureInfo.InvariantCulture) },
-
512 { DMApiConstants.ParamAccessIdentifier, accessIdentifier },
-
513 },
-
514 launchParameters,
-
515 !engineLock.HasStandardOutput || engineLock.PreferFileLogging
-
516 ? logFilePath
-
517 : null);
-
518
-
519 var process = await processExecutor.LaunchProcess(
-
520 engineLock.ServerExePath,
-
521 dmbProvider.Directory,
-
522 arguments,
-
523 cancellationToken,
-
524 environment,
-
525 logFilePath,
-
526 engineLock.HasStandardOutput,
-
527 true);
-
528
-
529 try
-
530 {
-
531 if (!apiValidate)
-
532 {
- -
534 process.AdjustPriority(true);
-
535 }
- -
537 process.AdjustPriority(false);
-
538
-
539 if (!engineLock.HasStandardOutput)
- -
541
-
542 // If this isnt a staging DD (From a Deployment), fire off an event
-
543 if (!apiValidate)
- -
545 EventType.DreamDaemonLaunch,
-
546 new List<string>
-
547 {
-
548 process.Id.ToString(CultureInfo.InvariantCulture),
-
549 },
-
550 false,
-
551 cancellationToken);
-
552
-
553 return process;
-
554 }
-
555 catch
-
556 {
-
557 await using (process)
-
558 {
-
559 process.Terminate();
-
560 await process.Lifetime;
-
561 throw;
-
562 }
-
563 }
-
564 }
+
484
+
+
496 async ValueTask<IProcess> CreateGameServerProcess(
+
497 IDmbProvider dmbProvider,
+
498 IEngineExecutableLock engineLock,
+
499 DreamDaemonLaunchParameters launchParameters,
+
500 string accessIdentifier,
+
501 string? logFilePath,
+
502 bool apiValidate,
+
503 CancellationToken cancellationToken)
+
504 {
+
505 // important to run on all ports to allow port changing
+
506 var environment = await engineLock.LoadEnv(logger, false, cancellationToken);
+
507 var arguments = engineLock.FormatServerArguments(
+
508 dmbProvider,
+
509 new Dictionary<string, string>
+
510 {
+ +
512 { DMApiConstants.ParamServerPort, serverPortProvider.HttpApiPort.ToString(CultureInfo.InvariantCulture) },
+
513 { DMApiConstants.ParamAccessIdentifier, accessIdentifier },
+
514 },
+
515 launchParameters,
+
516 !engineLock.HasStandardOutput || engineLock.PreferFileLogging
+
517 ? logFilePath
+
518 : null);
+
519
+
520 // If this isnt a staging DD (From a Deployment), fire off events
+
521 if (!apiValidate)
+ +
523 EventType.DreamDaemonPreLaunch,
+
524 Enumerable.Empty<string?>(),
+
525 false,
+
526 cancellationToken);
+
527
+
528 var process = await processExecutor.LaunchProcess(
+
529 engineLock.ServerExePath,
+
530 dmbProvider.Directory,
+
531 arguments,
+
532 cancellationToken,
+
533 environment,
+
534 logFilePath,
+
535 engineLock.HasStandardOutput,
+
536 true);
+
537
+
538 try
+
539 {
+
540 if (!apiValidate)
+
541 {
+ +
543 process.AdjustPriority(true);
+
544 }
+ +
546 process.AdjustPriority(false);
+
547
+
548 if (!engineLock.HasStandardOutput)
+ +
550
+
551 if (!apiValidate)
+ +
553 EventType.DreamDaemonLaunch,
+
554 new List<string>
+
555 {
+
556 process.Id.ToString(CultureInfo.InvariantCulture),
+
557 },
+
558 false,
+
559 cancellationToken);
+
560
+
561 return process;
+
562 }
+
563 catch
+
564 {
+
565 await using (process)
+
566 {
+
567 process.Terminate();
+
568 await process.Lifetime;
+
569 throw;
+
570 }
+
571 }
+
572 }
-
565
-
-
575 async ValueTask LogDDOutput(IProcess process, string? outputFilePath, bool cliSupported, bool preserveFile, CancellationToken cancellationToken)
-
576 {
-
577 try
-
578 {
-
579 string? ddOutput = null;
-
580 if (cliSupported)
-
581 ddOutput = (await process.GetCombinedOutput(cancellationToken))!;
-
582
-
583 if (ddOutput == null)
-
584 try
-
585 {
-
586 var dreamDaemonLogBytes = await gameIOManager.ReadAllBytes(
-
587 outputFilePath!,
-
588 cancellationToken);
-
589
-
590 ddOutput = Encoding.UTF8.GetString(dreamDaemonLogBytes);
-
591 }
-
592 finally
+
573
+
+
583 async ValueTask LogDDOutput(IProcess process, string? outputFilePath, bool cliSupported, bool preserveFile, CancellationToken cancellationToken)
+
584 {
+
585 try
+
586 {
+
587 string? ddOutput = null;
+
588 if (cliSupported)
+
589 ddOutput = (await process.GetCombinedOutput(cancellationToken))!;
+
590
+
591 if (ddOutput == null)
+
592 try
593 {
-
594 if (!preserveFile)
-
595 try
-
596 {
-
597 logger.LogTrace("Deleting temporary log file {path}...", outputFilePath);
-
598 await gameIOManager.DeleteFile(outputFilePath!, cancellationToken);
-
599 }
-
600 catch (Exception ex)
-
601 {
-
602 // this is expected on OD at time of the support changes.
-
603 // I've open a change to fix it: https://github.com/space-wizards/RobustToolbox/pull/4501
-
604 logger.LogWarning(ex, "Failed to delete server log file {outputFilePath}!", outputFilePath);
-
605 }
-
606 }
-
607
-
608 logger.LogTrace(
-
609 "Server Output:{newLine}{output}",
-
610 Environment.NewLine,
-
611 ddOutput);
-
612 }
-
613 catch (Exception ex)
-
614 {
-
615 logger.LogWarning(ex, "Error reading server output!");
-
616 }
-
617 }
+
594 var dreamDaemonLogBytes = await gameIOManager.ReadAllBytes(
+
595 outputFilePath!,
+
596 cancellationToken);
+
597
+
598 ddOutput = Encoding.UTF8.GetString(dreamDaemonLogBytes);
+
599 }
+
600 finally
+
601 {
+
602 if (!preserveFile)
+
603 try
+
604 {
+
605 logger.LogTrace("Deleting temporary log file {path}...", outputFilePath);
+
606 await gameIOManager.DeleteFile(outputFilePath!, cancellationToken);
+
607 }
+
608 catch (Exception ex)
+
609 {
+
610 // this is expected on OD at time of the support changes.
+
611 // I've open a change to fix it: https://github.com/space-wizards/RobustToolbox/pull/4501
+
612 logger.LogWarning(ex, "Failed to delete server log file {outputFilePath}!", outputFilePath);
+
613 }
+
614 }
+
615
+
616 logger.LogTrace(
+
617 "Server Output:{newLine}{output}",
+
618 Environment.NewLine,
+
619 ddOutput);
+
620 }
+
621 catch (Exception ex)
+
622 {
+
623 logger.LogWarning(ex, "Error reading server output!");
+
624 }
+
625 }
-
618
- -
629 IDmbProvider dmbProvider,
-
630 IChatTrackingContext chatTrackingContext,
-
631 DreamDaemonSecurity securityLevel,
-
632 DreamDaemonVisibility visibility,
-
633 bool apiValidateOnly)
-
634 => new(
-
635 chatTrackingContext,
-
636 dmbProvider,
- -
638 instance.Name!,
-
639 securityLevel,
-
640 visibility,
- -
642 apiValidateOnly);
-
643
-
-
648 async ValueTask CheckPagerIsNotRunning()
-
649 {
- -
651 return;
-
652
-
653 await using var otherProcess = processExecutor.GetProcessByName("byond");
-
654 if (otherProcess == null)
-
655 return;
-
656
-
657 var otherUsername = otherProcess.GetExecutingUsername();
-
658
-
659 await using var ourProcess = processExecutor.GetCurrentProcess();
-
660 var ourUsername = ourProcess.GetExecutingUsername();
-
661
-
662 if (otherUsername.Equals(ourUsername, StringComparison.Ordinal))
-
663 throw new JobException(ErrorCode.DreamDaemonPagerRunning);
-
664 }
+
626
+ +
637 IDmbProvider dmbProvider,
+
638 IChatTrackingContext chatTrackingContext,
+
639 DreamDaemonSecurity securityLevel,
+
640 DreamDaemonVisibility visibility,
+
641 bool apiValidateOnly)
+
642 => new(
+
643 chatTrackingContext,
+
644 dmbProvider,
+ +
646 instance.Name!,
+
647 securityLevel,
+
648 visibility,
+ +
650 apiValidateOnly);
+
651
+
+
656 async ValueTask CheckPagerIsNotRunning()
+
657 {
+ +
659 return;
+
660
+
661 await using var otherProcess = processExecutor.GetProcessByName("byond");
+
662 if (otherProcess == null)
+
663 return;
+
664
+
665 var otherUsername = otherProcess.GetExecutingUsername();
+
666
+
667 await using var ourProcess = processExecutor.GetCurrentProcess();
+
668 var ourUsername = ourProcess.GetExecutingUsername();
+
669
+
670 if (otherUsername.Equals(ourUsername, StringComparison.Ordinal))
+
671 throw new JobException(ErrorCode.DreamDaemonPagerRunning);
+
672 }
-
665 }
+
673 }
-
666}
+
674}
virtual ? long Id
The ID of the entity.
Definition EntityId.cs:14
@@ -662,35 +670,35 @@ $(document).ready(function() { init_codefold(0); });
TimeSpan TopicRequestTimeout
The TimeSpan which indicates when topic requests should timeout.
void SetRuntimeInformation(RuntimeInformation runtimeInformation)
Set the RuntimeInformation post construction.
IDmbProvider Dmb
The IDmbProvider used by DreamDaemon.
- -
SessionControllerFactory(IProcessExecutor processExecutor, IEngineManager engineManager, ITopicClientFactory topicClientFactory, ICryptographySuite cryptographySuite, IAssemblyInformationProvider assemblyInformationProvider, IIOManager gameIOManager, IIOManager diagnosticsIOManager, IChatManager chat, INetworkPromptReaper networkPromptReaper, IPlatformIdentifier platformIdentifier, IBridgeRegistrar bridgeRegistrar, IServerPortProvider serverPortProvider, IEventConsumer eventConsumer, IAsyncDelayer asyncDelayer, IDotnetDumpService dotnetDumpService, ILoggerFactory loggerFactory, ILogger< SessionControllerFactory > logger, SessionConfiguration sessionConfiguration, Api.Models.Instance instance)
Initializes a new instance of the SessionControllerFactory class.
-
readonly IEventConsumer eventConsumer
The IEventConsumer for the SessionControllerFactory.
-
readonly ITopicClientFactory topicClientFactory
The ITopicClientFactory for the SessionControllerFactory.
-
readonly SessionConfiguration sessionConfiguration
The SessionConfiguration for the SessionControllerFactory.
-
readonly IServerPortProvider serverPortProvider
The IServerPortProvider for the SessionControllerFactory.
-
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the SessionControllerFactory.
-
readonly IProcessExecutor processExecutor
The IProcessExecutor for the SessionControllerFactory.
-
readonly IIOManager gameIOManager
The IIOManager for the Game directory.
-
async ValueTask CheckPagerIsNotRunning()
Make sure the BYOND pager is not running.
-
readonly IPlatformIdentifier platformIdentifier
The IPlatformIdentifier for the SessionControllerFactory.
-
async ValueTask LogDDOutput(IProcess process, string? outputFilePath, bool cliSupported, bool preserveFile, CancellationToken cancellationToken)
Attempts to log DreamDaemon output.
+ +
SessionControllerFactory(IProcessExecutor processExecutor, IEngineManager engineManager, ITopicClientFactory topicClientFactory, ICryptographySuite cryptographySuite, IAssemblyInformationProvider assemblyInformationProvider, IIOManager gameIOManager, IIOManager diagnosticsIOManager, IChatManager chat, INetworkPromptReaper networkPromptReaper, IPlatformIdentifier platformIdentifier, IBridgeRegistrar bridgeRegistrar, IServerPortProvider serverPortProvider, IEventConsumer eventConsumer, IAsyncDelayer asyncDelayer, IDotnetDumpService dotnetDumpService, ILoggerFactory loggerFactory, ILogger< SessionControllerFactory > logger, SessionConfiguration sessionConfiguration, Api.Models.Instance instance)
Initializes a new instance of the SessionControllerFactory class.
+
readonly IEventConsumer eventConsumer
The IEventConsumer for the SessionControllerFactory.
+
readonly ITopicClientFactory topicClientFactory
The ITopicClientFactory for the SessionControllerFactory.
+
readonly SessionConfiguration sessionConfiguration
The SessionConfiguration for the SessionControllerFactory.
+
readonly IServerPortProvider serverPortProvider
The IServerPortProvider for the SessionControllerFactory.
+
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the SessionControllerFactory.
+
readonly IProcessExecutor processExecutor
The IProcessExecutor for the SessionControllerFactory.
+
readonly IIOManager gameIOManager
The IIOManager for the Game directory.
+
async ValueTask CheckPagerIsNotRunning()
Make sure the BYOND pager is not running.
+
readonly IPlatformIdentifier platformIdentifier
The IPlatformIdentifier for the SessionControllerFactory.
+
async ValueTask LogDDOutput(IProcess process, string? outputFilePath, bool cliSupported, bool preserveFile, CancellationToken cancellationToken)
Attempts to log DreamDaemon output.
RuntimeInformation CreateRuntimeInformation(IDmbProvider dmbProvider, IChatTrackingContext chatTrackingContext, DreamDaemonSecurity securityLevel, DreamDaemonVisibility visibility, bool apiValidateOnly)
Create RuntimeInformation.
-
readonly ICryptographySuite cryptographySuite
The ICryptographySuite for the SessionControllerFactory.
-
async ValueTask< IProcess > CreateGameServerProcess(IDmbProvider dmbProvider, IEngineExecutableLock engineLock, DreamDaemonLaunchParameters launchParameters, string accessIdentifier, string? logFilePath, bool apiValidate, CancellationToken cancellationToken)
Creates the game server IProcess.
-
readonly IBridgeRegistrar bridgeRegistrar
The IBridgeRegistrar for the SessionControllerFactory.
-
async ValueTask PortBindTest(ushort port, EngineType engineType, CancellationToken cancellationToken)
Check if a given port can be bound to.
-
const string DreamDaemonLogsPath
Path in Diagnostics folder to DreamDaemon logs.
-
readonly Api.Models.Instance instance
The Api.Models.Instance for the SessionControllerFactory.
-
readonly INetworkPromptReaper networkPromptReaper
The INetworkPromptReaper for the SessionControllerFactory.
-
readonly ILogger< SessionControllerFactory > logger
The ILogger for the SessionControllerFactory.
-
readonly IChatManager chat
The IChatManager for the SessionControllerFactory.
-
readonly IAssemblyInformationProvider assemblyInformationProvider
The IAssemblyInformationProvider for the SessionControllerFactory.
-
async ValueTask< ISessionController > LaunchNew(IDmbProvider dmbProvider, IEngineExecutableLock? currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, CancellationToken cancellationToken)
Create a ISessionController from a freshly launch DreamDaemon instance.A ValueTask<TResult> resulting...
-
readonly IDotnetDumpService dotnetDumpService
The IDotnetDumpService for the SessionControllerFactory.
-
readonly IEngineManager engineManager
The IEngineManager for the SessionControllerFactory.
-
async ValueTask< ISessionController?> Reattach(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Create a ISessionController from an existing DreamDaemon instance.A ValueTask<TResult> resulting in a...
-
readonly IAsyncDelayer asyncDelayer
The IAsyncDelayer for the SessionControllerFactory.
-
readonly IIOManager diagnosticsIOManager
The IIOManager for the Diagnostics directory.
+
readonly ICryptographySuite cryptographySuite
The ICryptographySuite for the SessionControllerFactory.
+
async ValueTask< IProcess > CreateGameServerProcess(IDmbProvider dmbProvider, IEngineExecutableLock engineLock, DreamDaemonLaunchParameters launchParameters, string accessIdentifier, string? logFilePath, bool apiValidate, CancellationToken cancellationToken)
Creates the game server IProcess.
+
readonly IBridgeRegistrar bridgeRegistrar
The IBridgeRegistrar for the SessionControllerFactory.
+
async ValueTask PortBindTest(ushort port, EngineType engineType, CancellationToken cancellationToken)
Check if a given port can be bound to.
+
const string DreamDaemonLogsPath
Path in Diagnostics folder to DreamDaemon logs.
+
readonly Api.Models.Instance instance
The Api.Models.Instance for the SessionControllerFactory.
+
readonly INetworkPromptReaper networkPromptReaper
The INetworkPromptReaper for the SessionControllerFactory.
+
readonly ILogger< SessionControllerFactory > logger
The ILogger for the SessionControllerFactory.
+
readonly IChatManager chat
The IChatManager for the SessionControllerFactory.
+
readonly IAssemblyInformationProvider assemblyInformationProvider
The IAssemblyInformationProvider for the SessionControllerFactory.
+
async ValueTask< ISessionController > LaunchNew(IDmbProvider dmbProvider, IEngineExecutableLock? currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, CancellationToken cancellationToken)
Create a ISessionController from a freshly launch DreamDaemon instance.A ValueTask<TResult> resulting...
+
readonly IDotnetDumpService dotnetDumpService
The IDotnetDumpService for the SessionControllerFactory.
+
readonly IEngineManager engineManager
The IEngineManager for the SessionControllerFactory.
+
async ValueTask< ISessionController?> Reattach(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Create a ISessionController from an existing DreamDaemon instance.A ValueTask<TResult> resulting in a...
+
readonly IAsyncDelayer asyncDelayer
The IAsyncDelayer for the SessionControllerFactory.
+
readonly IIOManager diagnosticsIOManager
The IIOManager for the Diagnostics directory.
Configuration options for the game sessions.
bool HighPriorityLiveDreamDaemon
If the public DreamDaemon instances are set to be above normal priority processes.
diff --git a/_watchdog_8cs_source.html b/_watchdog_8cs_source.html index 4b07cd6749..bf2e46f754 100644 --- a/_watchdog_8cs_source.html +++ b/_watchdog_8cs_source.html @@ -247,294 +247,298 @@ $(document).ready(function() { init_codefold(0); });
177
178 var watchdogVersion = executingAssembly.GetName().Version?.Semver().ToString();
179
-
180 while (!cancellationToken.IsCancellationRequested)
+
180 var serializerOptions = new JsonSerializerOptions
181 {
-
182 if (!File.Exists(assemblyPath))
-
183 {
-
184 logger.LogCritical("Unable to locate host assembly!");
-
185 return false;
-
186 }
-
187
-
188 var fileVersion = FileVersionInfo.GetVersionInfo(assemblyPath).FileVersion;
-
189 if (fileVersion == null)
-
190 {
-
191 logger.LogCritical("Failed to parse version info from {assemblyPath}!", assemblyPath);
-
192 return false;
-
193 }
-
194
-
195 if (bootstrappable)
-
196 {
-
197 if (!Version.TryParse(fileVersion, out var bootstrappedVersion))
-
198 {
-
199 logger.LogCritical("Failed to parse bootstrapped version prior to launch: {fileVersion}", fileVersion);
-
200 }
-
201 else
+
182 WriteIndented = true,
+
183 };
+
184 while (!cancellationToken.IsCancellationRequested)
+
185 {
+
186 if (!File.Exists(assemblyPath))
+
187 {
+
188 logger.LogCritical("Unable to locate host assembly!");
+
189 return false;
+
190 }
+
191
+
192 var fileVersion = FileVersionInfo.GetVersionInfo(assemblyPath).FileVersion;
+
193 if (fileVersion == null)
+
194 {
+
195 logger.LogCritical("Failed to parse version info from {assemblyPath}!", assemblyPath);
+
196 return false;
+
197 }
+
198
+
199 if (bootstrappable)
+
200 {
+
201 if (!Version.TryParse(fileVersion, out var bootstrappedVersion))
202 {
-
203 // save bootstrapper settings
-
204 var oldUrl = bootstrapSettings?.ServerUpdatePackageUrlFormatter;
-
205 bootstrapSettings = new BootstrapSettings
-
206 {
-
207 TgsVersion = bootstrappedVersion.Semver(),
-
208 };
-
209
-
210 bootstrapSettings.ServerUpdatePackageUrlFormatter = oldUrl ?? bootstrapSettings.ServerUpdatePackageUrlFormatter;
-
211
-
212 Directory.CreateDirectory(homeDirectory);
-
213 await File.WriteAllTextAsync(
-
214 bootstrapperSettingsFile,
-
215 JsonSerializer.Serialize(
-
216 bootstrapSettings,
-
217 new JsonSerializerOptions
-
218 {
-
219 WriteIndented = true,
-
220 }),
-
221 cancellationToken);
-
222 }
-
223 }
-
224
-
225 using (logger.BeginScope("Host invocation"))
-
226 {
-
227 initialHostVersionTcs.SetResult(
-
228 Version.Parse(
-
229 fileVersion));
-
230
-
231 updateDirectory = Path.GetFullPath(Path.Combine(assemblyStoragePath, Guid.NewGuid().ToString()));
-
232 logger.LogInformation("Update path set to {updateDirectory}", updateDirectory);
-
233 using (var process = new Process())
-
234 {
-
235 process.StartInfo.FileName = dotnetPath;
-
236 process.StartInfo.WorkingDirectory = rootLocation; // for appsettings
-
237
-
238 var arguments = new List<string>
-
239 {
-
240 $"\"{assemblyPath}\"",
-
241 $"\"{updateDirectory}\"",
-
242 $"\"{watchdogVersion}\"",
-
243 };
-
244
-
245 if (args.Any(x => x.Equals("--attach-host-debugger", StringComparison.OrdinalIgnoreCase)))
-
246 arguments.Add("--attach-debugger");
-
247
-
248 if (runConfigure)
-
249 {
-
250 logger.LogInformation("Running configuration check and wizard...");
-
251 arguments.Add("--General:SetupWizardMode=Only");
-
252 }
-
253
-
254 arguments.AddRange(args);
-
255
-
256 process.StartInfo.Arguments = String.Join(" ", arguments);
-
257
-
258 process.StartInfo.UseShellExecute = false; // runs in the same console
-
259
-
260 var killedHostProcess = false;
-
261 try
-
262 {
-
263 Task? processTask = null;
-
264 (int, Task) StartProcess(string? additionalArg)
-
265 {
-
266 if (additionalArg != null)
-
267 process.StartInfo.Arguments += $" {additionalArg}";
-
268
-
269 logger.LogInformation("Launching host with arguments: {arguments}", process.StartInfo.Arguments);
+
203 logger.LogCritical("Failed to parse bootstrapped version prior to launch: {fileVersion}", fileVersion);
+
204 }
+
205 else
+
206 {
+
207 // save bootstrapper settings
+
208 var oldUrl = bootstrapSettings?.ServerUpdatePackageUrlFormatter;
+
209 bootstrapSettings = new BootstrapSettings
+
210 {
+
211 TgsVersion = bootstrappedVersion.Semver(),
+
212 };
+
213
+
214 bootstrapSettings.ServerUpdatePackageUrlFormatter = oldUrl ?? bootstrapSettings.ServerUpdatePackageUrlFormatter;
+
215
+
216 Directory.CreateDirectory(homeDirectory);
+
217 await File.WriteAllTextAsync(
+
218 bootstrapperSettingsFile,
+
219 JsonSerializer.Serialize(
+
220 bootstrapSettings,
+
221 serializerOptions),
+
222 cancellationToken);
+
223 }
+
224 }
+
225
+
226 using (logger.BeginScope("Host invocation"))
+
227 {
+
228 initialHostVersionTcs.SetResult(
+
229 Version.Parse(
+
230 fileVersion));
+
231
+
232 updateDirectory = Path.GetFullPath(Path.Combine(assemblyStoragePath, Guid.NewGuid().ToString()));
+
233 logger.LogInformation("Update path set to {updateDirectory}", updateDirectory);
+
234 using (var process = new Process())
+
235 {
+
236 process.StartInfo.FileName = dotnetPath;
+
237 process.StartInfo.WorkingDirectory = rootLocation; // for appsettings
+
238
+
239 var arguments = new List<string>
+
240 {
+
241 $"\"{assemblyPath}\"",
+
242 $"\"{updateDirectory}\"",
+
243 $"\"{watchdogVersion}\"",
+
244 };
+
245
+
246 if (args.Any(x => x.Equals("--attach-host-debugger", StringComparison.OrdinalIgnoreCase)))
+
247 arguments.Add("--attach-debugger");
+
248
+
249 if (runConfigure)
+
250 {
+
251 logger.LogInformation("Running configuration check and wizard...");
+
252 arguments.Add("--General:SetupWizardMode=Only");
+
253 }
+
254
+
255 arguments.AddRange(args);
+
256
+
257 process.StartInfo.Arguments = String.Join(" ", arguments);
+
258
+
259 process.StartInfo.UseShellExecute = false; // runs in the same console
+
260
+
261 var killedHostProcess = false;
+
262 var createdShutdownFile = false;
+
263 try
+
264 {
+
265 Task? processTask = null;
+
266 (int, Task) StartProcess(string? additionalArg)
+
267 {
+
268 if (additionalArg != null)
+
269 process.StartInfo.Arguments += $" {additionalArg}";
270
-
271 process.Start();
-
272 return (process.Id, processTask = process.WaitForExitAsync(cancellationToken));
-
273 }
-
274
-
275 using (var processCts = new CancellationTokenSource())
-
276 using (cancellationToken.Register(() =>
-
277 {
-
278 if (!Directory.Exists(updateDirectory))
-
279 {
-
280 logger.LogInformation("Cancellation requested! Writing shutdown lock file...");
-
281 File.WriteAllBytes(updateDirectory, Array.Empty<byte>());
-
282 }
-
283 else
-
284 logger.LogWarning("Cancellation requested while update directory exists!");
-
285
-
286 logger.LogInformation("Will force close host process if it doesn't exit in 10 seconds...");
-
287
-
288 try
-
289 {
-
290 processCts.CancelAfter(TimeSpan.FromSeconds(10));
-
291 }
-
292 catch (ObjectDisposedException ex)
-
293 {
-
294 // race conditions
-
295 logger.LogWarning(ex, "Error triggering timeout!");
-
296 }
-
297 }))
-
298 {
-
299 using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
-
300
-
301 var checkerTask = signalChecker.CheckSignals(StartProcess, cts.Token);
-
302 try
-
303 {
-
304 await processTask!;
-
305 }
-
306 finally
-
307 {
-
308 cts.Cancel();
-
309 await checkerTask;
-
310 }
-
311 }
-
312 }
-
313 catch (InvalidOperationException ex)
-
314 {
-
315 logger.LogWarning(ex, "Error triggering timeout!");
-
316 }
-
317 finally
-
318 {
-
319 try
-
320 {
-
321 if (!process.HasExited)
-
322 {
-
323 killedHostProcess = true;
-
324 process.Kill();
-
325 process.WaitForExit();
-
326 }
-
327 }
-
328 catch (InvalidOperationException ex2)
-
329 {
-
330 logger.LogWarning(ex2, "Error killing host process!");
-
331 }
-
332
-
333 try
-
334 {
-
335 if (File.Exists(updateDirectory))
-
336 File.Delete(updateDirectory);
-
337 }
-
338 catch (Exception ex2)
-
339 {
-
340 logger.LogWarning(ex2, "Error deleting comms file!");
-
341 }
-
342
-
343 logger.LogInformation("Host exited!");
-
344 }
-
345
-
346 if (runConfigure)
-
347 {
-
348 logger.LogInformation("Exiting due to configure intent...");
-
349 return true;
-
350 }
-
351
-
352 switch ((HostExitCode)process.ExitCode)
-
353 {
-
354 case HostExitCode.CompleteExecution:
-
355 return true;
-
356 case HostExitCode.RestartRequested:
-
357 if (!cancellationToken.IsCancellationRequested)
-
358 logger.LogInformation("Watchdog will restart host..."); // just a restart
-
359 else
-
360 logger.LogWarning("Host requested restart but watchdog shutdown is in progress!");
-
361 break;
-
362 case HostExitCode.Error:
-
363 // update path is now an exception document
-
364 logger.LogCritical("Host crashed, propagating exception dump...");
-
365
-
366 var data = "(NOT PRESENT)";
-
367 if (File.Exists(updateDirectory))
-
368 data = File.ReadAllText(updateDirectory);
+
271 logger.LogInformation("Launching host with arguments: {arguments}", process.StartInfo.Arguments);
+
272
+
273 process.Start();
+
274 return (process.Id, processTask = process.WaitForExitAsync(cancellationToken));
+
275 }
+
276
+
277 using (var processCts = new CancellationTokenSource())
+
278 using (cancellationToken.Register(() =>
+
279 {
+
280 if (!Directory.Exists(updateDirectory))
+
281 {
+
282 logger.LogInformation("Cancellation requested! Writing shutdown lock file...");
+
283 File.WriteAllBytes(updateDirectory, Array.Empty<byte>());
+
284 createdShutdownFile = true;
+
285 }
+
286 else
+
287 logger.LogWarning("Cancellation requested while update directory exists!");
+
288
+
289 logger.LogInformation("Will force close host process if it doesn't exit in 10 seconds...");
+
290
+
291 try
+
292 {
+
293 processCts.CancelAfter(TimeSpan.FromSeconds(10));
+
294 }
+
295 catch (ObjectDisposedException ex)
+
296 {
+
297 // race conditions
+
298 logger.LogWarning(ex, "Error triggering timeout!");
+
299 }
+
300 }))
+
301 {
+
302 using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
303
+
304 var checkerTask = signalChecker.CheckSignals(StartProcess, cts.Token);
+
305 try
+
306 {
+
307 await processTask!;
+
308 }
+
309 finally
+
310 {
+
311 cts.Cancel();
+
312 await checkerTask;
+
313 }
+
314 }
+
315 }
+
316 catch (InvalidOperationException ex)
+
317 {
+
318 logger.LogWarning(ex, "Error triggering timeout!");
+
319 }
+
320 finally
+
321 {
+
322 try
+
323 {
+
324 if (!process.HasExited)
+
325 {
+
326 killedHostProcess = true;
+
327 process.Kill();
+
328 process.WaitForExit();
+
329 }
+
330 }
+
331 catch (InvalidOperationException ex2)
+
332 {
+
333 logger.LogWarning(ex2, "Error killing host process!");
+
334 }
+
335
+
336 if (createdShutdownFile)
+
337 try
+
338 {
+
339 if (File.Exists(updateDirectory))
+
340 File.Delete(updateDirectory);
+
341 }
+
342 catch (Exception ex2)
+
343 {
+
344 logger.LogWarning(ex2, "Error deleting comms file!");
+
345 }
+
346
+
347 logger.LogInformation("Host exited!");
+
348 }
+
349
+
350 if (runConfigure)
+
351 {
+
352 logger.LogInformation("Exiting due to configure intent...");
+
353 return true;
+
354 }
+
355
+
356 switch ((HostExitCode)process.ExitCode)
+
357 {
+
358 case HostExitCode.CompleteExecution:
+
359 return true;
+
360 case HostExitCode.RestartRequested:
+
361 if (!cancellationToken.IsCancellationRequested)
+
362 logger.LogInformation("Watchdog will restart host..."); // just a restart
+
363 else
+
364 logger.LogWarning("Host requested restart but watchdog shutdown is in progress!");
+
365 break;
+
366 case HostExitCode.Error:
+
367 // update path is now an exception document
+
368 logger.LogCritical("Host crashed, propagating exception dump...");
369
-
370 try
-
371 {
-
372 File.Delete(updateDirectory);
-
373 }
-
374 catch (Exception e)
+
370 var data = "(NOT PRESENT)";
+
371 if (File.Exists(updateDirectory))
+
372 data = File.ReadAllText(updateDirectory);
+
373
+
374 try
375 {
-
376 logger.LogWarning(e, "Unable to delete exception dump file at {updateDirectory}!", updateDirectory);
+
376 File.Delete(updateDirectory);
377 }
-
378
-
379#pragma warning disable CA2201 // Do not raise reserved exception types
-
380 throw new Exception(String.Format(CultureInfo.InvariantCulture, "Host propagated exception: {0}", data));
-
381#pragma warning restore CA2201 // Do not raise reserved exception types
-
382 default:
-
383 if (killedHostProcess)
-
384 {
-
385 logger.LogWarning("Watchdog forced to kill host process!");
-
386 cancellationToken.ThrowIfCancellationRequested();
-
387 }
-
388
-
389#pragma warning disable CA2201 // Do not raise reserved exception types
-
390 throw new Exception(String.Format(CultureInfo.InvariantCulture, "Host crashed with exit code {0}!", process.ExitCode));
-
391#pragma warning restore CA2201 // Do not raise reserved exception types
-
392 }
-
393 }
-
394
-
395 // HEY YOU
-
396 // BE WARNED THAT IF YOU DEBUGGED THE HOST PROCESS THAT JUST LAUNCHED THE DEBUGGER WILL HOLD A LOCK ON THE DIRECTORY
-
397 // THIS MEANS THE FIRST DIRECTORY.MOVE WILL THROW
-
398 if (Directory.Exists(updateDirectory))
-
399 {
-
400 logger.LogInformation("Applying server update...");
-
401 if (isWindows)
-
402 {
-
403 // windows dick sucking resource unlocking
-
404 GC.Collect(Int32.MaxValue, GCCollectionMode.Default, true);
-
405 await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken).ConfigureAwait(false);
-
406 }
-
407
-
408 var tempPath = Path.Combine(assemblyStoragePath, Guid.NewGuid().ToString());
-
409 try
-
410 {
-
411 Directory.Move(defaultAssemblyPath, tempPath);
-
412 try
-
413 {
-
414 Directory.Move(updateDirectory, defaultAssemblyPath);
-
415 logger.LogInformation("Server update complete, deleting old server...");
-
416 try
-
417 {
-
418 Directory.Delete(tempPath, true);
-
419 }
-
420 catch (Exception e)
+
378 catch (Exception e)
+
379 {
+
380 logger.LogWarning(e, "Unable to delete exception dump file at {updateDirectory}!", updateDirectory);
+
381 }
+
382
+
383#pragma warning disable CA2201 // Do not raise reserved exception types
+
384 throw new Exception(String.Format(CultureInfo.InvariantCulture, "Host propagated exception: {0}", data));
+
385#pragma warning restore CA2201 // Do not raise reserved exception types
+
386 default:
+
387 if (killedHostProcess)
+
388 {
+
389 logger.LogWarning("Watchdog forced to kill host process!");
+
390 cancellationToken.ThrowIfCancellationRequested();
+
391 }
+
392
+
393#pragma warning disable CA2201 // Do not raise reserved exception types
+
394 throw new Exception(String.Format(CultureInfo.InvariantCulture, "Host crashed with exit code {0}!", process.ExitCode));
+
395#pragma warning restore CA2201 // Do not raise reserved exception types
+
396 }
+
397 }
+
398
+
399 // HEY YOU
+
400 // BE WARNED THAT IF YOU DEBUGGED THE HOST PROCESS THAT JUST LAUNCHED THE DEBUGGER WILL HOLD A LOCK ON THE DIRECTORY
+
401 // THIS MEANS THE FIRST DIRECTORY.MOVE WILL THROW
+
402 if (Directory.Exists(updateDirectory))
+
403 {
+
404 logger.LogInformation("Applying server update...");
+
405 if (isWindows)
+
406 {
+
407 // windows dick sucking resource unlocking
+
408 GC.Collect(Int32.MaxValue, GCCollectionMode.Default, true);
+
409 await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken).ConfigureAwait(false);
+
410 }
+
411
+
412 var tempPath = Path.Combine(assemblyStoragePath, Guid.NewGuid().ToString());
+
413 try
+
414 {
+
415 Directory.Move(defaultAssemblyPath, tempPath);
+
416 try
+
417 {
+
418 Directory.Move(updateDirectory, defaultAssemblyPath);
+
419 logger.LogInformation("Server update complete, deleting old server...");
+
420 try
421 {
-
422 logger.LogWarning(e, "Error deleting old server at {tempPath}!", tempPath);
+
422 Directory.Delete(tempPath, true);
423 }
-
424 }
-
425 catch (Exception e)
-
426 {
-
427 logger.LogError(e, "Error moving updated server directory, attempting revert!");
-
428 Directory.Delete(defaultAssemblyPath, true);
-
429 Directory.Move(tempPath, defaultAssemblyPath);
-
430 logger.LogInformation("Revert successful!");
-
431 }
-
432 }
-
433 catch (Exception e)
-
434 {
-
435 logger.LogWarning(e, "Failed to move out active host assembly!");
+
424 catch (Exception e)
+
425 {
+
426 logger.LogWarning(e, "Error deleting old server at {tempPath}!", tempPath);
+
427 }
+
428 }
+
429 catch (Exception e)
+
430 {
+
431 logger.LogError(e, "Error moving updated server directory, attempting revert!");
+
432 Directory.Delete(defaultAssemblyPath, true);
+
433 Directory.Move(tempPath, defaultAssemblyPath);
+
434 logger.LogInformation("Revert successful!");
+
435 }
436 }
-
437 }
-
438 }
-
439 }
-
440 }
-
441 catch (OperationCanceledException ex)
-
442 {
-
443 logger.LogDebug(ex, "Exiting due to cancellation...");
-
444 if (updateDirectory != null)
-
445 if (!Directory.Exists(updateDirectory))
-
446 File.Delete(updateDirectory);
-
447 else
-
448 Directory.Delete(updateDirectory, true);
-
449 }
-
450 catch (Exception ex)
-
451 {
-
452 logger.LogCritical(ex, "Host watchdog error!");
-
453 return false;
-
454 }
-
455 finally
-
456 {
-
457 logger.LogInformation("Host watchdog exiting...");
+
437 catch (Exception e)
+
438 {
+
439 logger.LogWarning(e, "Failed to move out active host assembly!");
+
440 }
+
441 }
+
442 }
+
443 }
+
444 }
+
445 catch (OperationCanceledException ex)
+
446 {
+
447 logger.LogDebug(ex, "Exiting due to cancellation...");
+
448 if (updateDirectory != null)
+
449 if (!Directory.Exists(updateDirectory))
+
450 File.Delete(updateDirectory);
+
451 else
+
452 Directory.Delete(updateDirectory, true);
+
453 }
+
454 catch (Exception ex)
+
455 {
+
456 logger.LogCritical(ex, "Host watchdog error!");
+
457 return false;
458 }
-
459
-
460 return true;
-
461 }
+
459 finally
+
460 {
+
461 logger.LogInformation("Host watchdog exiting...");
+
462 }
+
463
+
464 return true;
+
465 }
-
462#pragma warning restore CA1502
-
463#pragma warning restore CA1506
-
464 }
+
466#pragma warning restore CA1502
+
467#pragma warning restore CA1506
+
468 }
-
465}
+
469}
Settings for the bootstrapper feature.
diff --git a/_watchdog_base_8cs_source.html b/_watchdog_base_8cs_source.html index 3232cdf4f7..37a9f4ea2e 100644 --- a/_watchdog_base_8cs_source.html +++ b/_watchdog_base_8cs_source.html @@ -1224,7 +1224,7 @@ $(document).ready(function() { init_codefold(0); });
static TopicParameters CreateBroadcastParameters(string broadcastMessage)
Initializes a new instance of the TopicParameters class.
Parameters necessary for duplicating a ISessionController session.
- +
async ValueTask< ReattachInformation?> Load(CancellationToken cancellationToken)
Load a saved ReattachInformation.A ValueTask<TResult> resulting in the stored ReattachInformation if ...
ValueTask Clear(CancellationToken cancellationToken)
Clear any stored ReattachInformation.A ValueTask representing the running operation.
diff --git a/_web_host_builder_extensions_8cs_source.html b/_web_host_builder_extensions_8cs_source.html index e3e550df03..e09ec53708 100644 --- a/_web_host_builder_extensions_8cs_source.html +++ b/_web_host_builder_extensions_8cs_source.html @@ -137,12 +137,13 @@ $(document).ready(function() { init_codefold(0); });
65 applicationBuilder.ApplicationServices.GetRequiredService<IAssemblyInformationProvider>(),
66 applicationBuilder.ApplicationServices.GetRequiredService<IOptions<ControlPanelConfiguration>>(),
67 applicationBuilder.ApplicationServices.GetRequiredService<IOptions<GeneralConfiguration>>(),
-
68 applicationBuilder.ApplicationServices.GetRequiredService<IOptions<SwarmConfiguration>>(),
-
69 applicationBuilder.ApplicationServices.GetRequiredService<IOptions<InternalConfiguration>>(),
-
70 applicationBuilder.ApplicationServices.GetRequiredService<ILogger<Application>>());
-
71 }
+
68 applicationBuilder.ApplicationServices.GetRequiredService<IOptions<DatabaseConfiguration>>(),
+
69 applicationBuilder.ApplicationServices.GetRequiredService<IOptions<SwarmConfiguration>>(),
+
70 applicationBuilder.ApplicationServices.GetRequiredService<IOptions<InternalConfiguration>>(),
+
71 applicationBuilder.ApplicationServices.GetRequiredService<ILogger<Application>>());
+
72 }
-
72}
+
73}
Sets up dependency injection.
Extension methods for the IWebHostBuilder class.
static void ConfigureApplication(IApplicationBuilder applicationBuilder)
Configures a given applicationBuilder .
diff --git a/architecture.html b/architecture.html index 2aa3f25e3a..1229f77f43 100644 --- a/architecture.html +++ b/architecture.html @@ -125,7 +125,7 @@ Main Server

Server Initialization

The server's entrypoint is in the Tgstation.Server.Host.Program class. This class mainly determines if the Host watchdog is present and creates and runs the Tgstation.Server.Host.Server class. That class then builds an ASP.NET Core web host using the Tgstation.Server.Host.Core.Application class.

-

The Tgstation.Server.Host.Core.Application class has two methods called by the framework. First the Tgstation.Server.Host.Core.Application.ConfigureServices method sets up dependency injection of interfaces for Controllers, the Tgstation.Server.Host.Database.DatabaseContext, and the component factories of the server. The framework handles constructing these things once the application starts. Configuration is loaded from the appropriate appsettings.yml into the Tgstation.Server.Host.Configuration classes for injection as well. Then Tgstation.Server.Host.Core.Application.Configure method is run which sets up the web request pipeline which currently has the following stack of handlers:

+

The Tgstation.Server.Host.Core.Application class has two methods called by the framework. First the Tgstation.Server.Host.Core.Application.ConfigureServices method sets up dependency injection of interfaces for Controllers, the Tgstation.Server.Host.Database.DatabaseContext, and the component factories of the server. The framework handles constructing these things once the application starts. Configuration is loaded from the appropriate appsettings.yml into the Tgstation.Server.Host.Configuration classes for injection as well. Then Tgstation.Server.Host.Core.Application.Configure method is run which sets up the web request pipeline which currently has the following stack of handlers:

  • Catch any exceptions and respond with 500 and detailed HTML error page
  • Respond with 503 if the application is still starting or shutting down
  • diff --git a/changelog.yml b/changelog.yml index 0ca1e9b6e6..11dab370a8 100644 --- a/changelog.yml +++ b/changelog.yml @@ -175,8 +175,7 @@ Components: Core: - Version: 6.13.0 ComponentVersions: - Core: 6.12.3 - HttpApi: 10.12.0 + HttpApi: 10.12.1 GraphQLApi: 0.5.0 DreamMakerApi: 7.3.1 Configuration: 5.4.0 @@ -186,7 +185,13 @@ Components: NugetApi: 17.0.1 NugetClient: 20.0.0 WebControlPanel: 6.7.3 - Changes: [] + Changes: + - Descriptions: + - Added `DreamDaemonPreLaunch` event. + - Database provider in use is now logged at startup. + - 'Nix: Added wants configuration option to service.' + Author: Cyberboss + PullRequest: 2105 Unreleased: true - Version: 6.12.4 ComponentVersions: @@ -3797,6 +3802,13 @@ Components: Author: Cyberboss PullRequest: 956 HostWatchdog: + - Version: 1.6.0 + Changes: + - Descriptions: + - Fixed exception propagation from core server not working. + Author: Cyberboss + PullRequest: 2105 + Unreleased: true - Version: 1.4.0 Changes: - Descriptions: diff --git a/class_tgstation_1_1_server_1_1_api_1_1_api_headers.html b/class_tgstation_1_1_server_1_1_api_1_1_api_headers.html index 4435ea1923..88a3c6cffb 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_api_headers.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_api_headers.html @@ -485,7 +485,7 @@ Static Private Attributes
    244 else
    245 {
    246 var auth = authorization.First();
    -
    247 var splits = new List<string>(auth.Split(' '));
    +
    247 var splits = new List<string>(auth?.Split(' ') ?? Enumerable.Empty<string>());
    248 var scheme = splits.First();
    249 if (String.IsNullOrWhiteSpace(scheme))
    250 AddError(HeaderErrorTypes.AuthorizationInvalid, "Missing authentication scheme!");
    diff --git a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_engine_version.html b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_engine_version.html index fc55c34c18..5fd051bc3a 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_engine_version.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_engine_version.html @@ -714,7 +714,7 @@ Here is the caller graph for this function:

Definition at line 24 of file EngineVersion.cs.

24{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Watchdog.WindowsWatchdog.ApplyInitialDmb(), Tgstation.Server.Host.Components.Engine.ByondInstallation.ByondInstallation(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.CanUseSwappableDmbProvider(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.ChangeSettings(), Tgstation.Server.Host.Components.Engine.EngineManager.CheckVersionParameter(), Tgstation.Server.Host.Components.Engine.EngineInstallerBase.CheckVersionValidity(), Tgstation.Server.Host.Components.Engine.DelegatingEngineInstaller.DelegateCall< TReturn >(), Tgstation.Server.Api.Models.EngineVersion.EngineVersion(), Tgstation.Server.Api.Models.EngineVersion.Equals(), Tgstation.Server.Host.Components.Chat.Commands.EngineCommand.Invoke(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Engine.OpenDreamInstallation.OpenDreamInstallation(), Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage(), Tgstation.Server.Api.Models.EngineVersion.ToString(), and Tgstation.Server.Api.Models.EngineVersion.TryParse().

+

Referenced by Tgstation.Server.Host.Components.Watchdog.WindowsWatchdog.ApplyInitialDmb(), Tgstation.Server.Host.Components.Engine.ByondInstallation.ByondInstallation(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.CanUseSwappableDmbProvider(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.ChangeSettings(), Tgstation.Server.Host.Components.Engine.EngineManager.CheckVersionParameter(), Tgstation.Server.Host.Components.Engine.EngineInstallerBase.CheckVersionValidity(), Tgstation.Server.Host.Components.Engine.DelegatingEngineInstaller.DelegateCall< TReturn >(), Tgstation.Server.Api.Models.EngineVersion.EngineVersion(), Tgstation.Server.Api.Models.EngineVersion.Equals(), Tgstation.Server.Host.Components.Chat.Commands.EngineCommand.Invoke(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Engine.OpenDreamInstallation.OpenDreamInstallation(), Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage(), Tgstation.Server.Api.Models.EngineVersion.ToString(), and Tgstation.Server.Api.Models.EngineVersion.TryParse().

diff --git a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_entity_id.html b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_entity_id.html index d8a65d04cc..4cecd266eb 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_entity_id.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_entity_id.html @@ -193,7 +193,7 @@ Properties

Definition at line 14 of file EntityId.cs.

14{ get; set; }
-

Referenced by Tgstation.Server.Host.Authority.LoginAuthority.AttemptLogin(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.BeforeApplyDmb(), Tgstation.Server.Host.Jobs.JobService.CancelJob(), Tgstation.Server.Host.Controllers.ChatController.Create(), Tgstation.Server.Host.Controllers.RepositoryController.Create(), Tgstation.Server.Client.InstanceManagerClient.CreateClient(), Tgstation.Server.Host.Components.Deployment.DeploymentLockManager.CreateLock(), Tgstation.Server.Api.Models.UserName.CreateUserName< TResultType >(), Tgstation.Server.Host.Controllers.RepositoryController.Delete(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Delete(), Tgstation.Server.Host.Controllers.JobController.Delete(), Tgstation.Server.Host.Components.Deployment.DeploymentLockManager.DeploymentLockManager(), Tgstation.Server.Host.Components.Deployment.DmbFactory.FromCompileJobInternal(), Tgstation.Server.Host.Authority.UserAuthority.GetId(), Tgstation.Server.Host.Controllers.ChatController.GetId(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.GetId(), Tgstation.Server.Host.Controllers.JobController.GetId(), Tgstation.Server.Host.Controllers.UserController.GetId(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.HandleNewDmbAvailable(), Tgstation.Server.Host.Controllers.ApiController.HookExecuteAction(), Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.InitController(), Tgstation.Server.Client.Components.InstanceClient.InstanceClient(), Tgstation.Server.Host.Models.Job.Job(), Tgstation.Server.Host.Models.Job.Job(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Controllers.ChatController.List(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.PerformDmbSwap(), Tgstation.Server.Host.Controllers.DreamMakerController.Read(), Tgstation.Server.Host.Controllers.RepositoryController.Read(), Tgstation.Server.Client.Components.ConfigurationClient.Read(), Tgstation.Server.Host.Controllers.DreamDaemonController.ReadImpl(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Controllers.RepositoryController.Reclone(), Tgstation.Server.Host.Jobs.JobService.RegisterOperation(), Tgstation.Server.Host.Jobs.JobService.RunJob(), Tgstation.Server.Client.Components.EngineClient.SetActiveVersion(), Tgstation.Server.Host.GraphQL.Mutations.UserMutations.SetCurrentOAuthConnections(), Tgstation.Server.Host.GraphQL.Mutations.UserMutations.SetCurrentUserPassword(), Tgstation.Server.Host.Models.ChatBot.ToApi(), Tgstation.Server.Host.Models.CompileJob.ToApi(), Tgstation.Server.Host.Models.Instance.ToApi(), Tgstation.Server.Host.Models.Job.ToApi(), Tgstation.Server.Host.Models.UserGroup.ToApi(), Tgstation.Server.Host.Controllers.ChatController.Update(), Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), Tgstation.Server.Host.Controllers.DreamMakerController.Update(), Tgstation.Server.Host.Controllers.EngineController.Update(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Update(), Tgstation.Server.Host.Controllers.RepositoryController.Update(), Tgstation.Server.Host.Jobs.JobsHubGroupMapper.UserDisabled(), and Tgstation.Server.Client.Components.ConfigurationClient.Write().

+

Referenced by Tgstation.Server.Host.Authority.LoginAuthority.AttemptLogin(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.BeforeApplyDmb(), Tgstation.Server.Host.Jobs.JobService.CancelJob(), Tgstation.Server.Host.Controllers.ChatController.Create(), Tgstation.Server.Host.Controllers.RepositoryController.Create(), Tgstation.Server.Client.InstanceManagerClient.CreateClient(), Tgstation.Server.Host.Components.Deployment.DeploymentLockManager.CreateLock(), Tgstation.Server.Api.Models.UserName.CreateUserName< TResultType >(), Tgstation.Server.Host.Controllers.RepositoryController.Delete(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Delete(), Tgstation.Server.Host.Controllers.JobController.Delete(), Tgstation.Server.Host.Components.Deployment.DeploymentLockManager.DeploymentLockManager(), Tgstation.Server.Host.Components.Deployment.DmbFactory.FromCompileJobInternal(), Tgstation.Server.Host.Authority.UserAuthority.GetId(), Tgstation.Server.Host.Controllers.ChatController.GetId(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.GetId(), Tgstation.Server.Host.Controllers.JobController.GetId(), Tgstation.Server.Host.Controllers.UserController.GetId(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.HandleNewDmbAvailable(), Tgstation.Server.Host.Controllers.ApiController.HookExecuteAction(), Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.InitController(), Tgstation.Server.Client.Components.InstanceClient.InstanceClient(), Tgstation.Server.Host.Models.Job.Job(), Tgstation.Server.Host.Models.Job.Job(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Controllers.ChatController.List(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.PerformDmbSwap(), Tgstation.Server.Host.Controllers.DreamMakerController.Read(), Tgstation.Server.Host.Controllers.RepositoryController.Read(), Tgstation.Server.Client.Components.ConfigurationClient.Read(), Tgstation.Server.Host.Controllers.DreamDaemonController.ReadImpl(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Controllers.RepositoryController.Reclone(), Tgstation.Server.Host.Jobs.JobService.RegisterOperation(), Tgstation.Server.Host.Jobs.JobService.RunJob(), Tgstation.Server.Client.Components.EngineClient.SetActiveVersion(), Tgstation.Server.Host.GraphQL.Mutations.UserMutations.SetCurrentOAuthConnections(), Tgstation.Server.Host.GraphQL.Mutations.UserMutations.SetCurrentUserPassword(), Tgstation.Server.Host.Models.ChatBot.ToApi(), Tgstation.Server.Host.Models.CompileJob.ToApi(), Tgstation.Server.Host.Models.Instance.ToApi(), Tgstation.Server.Host.Models.Job.ToApi(), Tgstation.Server.Host.Models.UserGroup.ToApi(), Tgstation.Server.Host.Controllers.ChatController.Update(), Tgstation.Server.Host.Controllers.DreamDaemonController.Update(), Tgstation.Server.Host.Controllers.DreamMakerController.Update(), Tgstation.Server.Host.Controllers.EngineController.Update(), Tgstation.Server.Host.Controllers.InstancePermissionSetController.Update(), Tgstation.Server.Host.Controllers.RepositoryController.Update(), Tgstation.Server.Host.Jobs.JobsHubGroupMapper.UserDisabled(), and Tgstation.Server.Client.Components.ConfigurationClient.Write().

diff --git a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_compile_job.html b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_compile_job.html index 3f6c842ff2..77f89e71b4 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_compile_job.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_compile_job.html @@ -190,7 +190,7 @@ Properties

Definition at line 43 of file CompileJob.cs.

43{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Session.SessionController.GetLaunchResult(), Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.HandleNewDmbAvailable(), Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.HandleNormalReboot(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionController.SendTopicRequest(), and Tgstation.Server.Host.Components.Session.SessionController.SessionController().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionController.GetLaunchResult(), Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.HandleNewDmbAvailable(), Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.HandleNormalReboot(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionController.SendTopicRequest(), and Tgstation.Server.Host.Components.Session.SessionController.SessionController().

@@ -249,7 +249,7 @@ Properties

Definition at line 35 of file CompileJob.cs.

35{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Models.CompileJob.ToApi().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Models.CompileJob.ToApi().

diff --git a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_daemon_launch_parameters.html b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_daemon_launch_parameters.html index 3dee1b78fe..5b6ed32f27 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_daemon_launch_parameters.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_daemon_launch_parameters.html @@ -371,7 +371,7 @@ Properties

Definition at line 107 of file DreamDaemonLaunchParameters.cs.

107{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob().

+

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob().

@@ -487,7 +487,7 @@ Properties

Definition at line 51 of file DreamDaemonLaunchParameters.cs.

51{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), Tgstation.Server.Host.Components.Engine.ByondInstallation.FormatServerArguments(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), Tgstation.Server.Host.Components.Engine.ByondInstallation.FormatServerArguments(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

@@ -517,7 +517,7 @@ Properties

Definition at line 42 of file DreamDaemonLaunchParameters.cs.

42{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), Tgstation.Server.Host.Components.Engine.ByondInstallation.FormatServerArguments(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), Tgstation.Server.Host.Components.Engine.ByondInstallation.FormatServerArguments(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

@@ -576,7 +576,7 @@ Properties

Definition at line 68 of file DreamDaemonLaunchParameters.cs.

68{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.HandleNormalReboot(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob().

+

Referenced by Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.HandleNormalReboot(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob().

@@ -606,7 +606,7 @@ Properties

Definition at line 92 of file DreamDaemonLaunchParameters.cs.

92{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

@@ -636,7 +636,7 @@ Properties

Definition at line 33 of file DreamDaemonLaunchParameters.cs.

33{ get; set; }
-

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), Tgstation.Server.Host.Components.Engine.ByondInstallation.FormatServerArguments(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.CanApplyWithoutReboot(), Tgstation.Server.Host.Components.Engine.ByondInstallation.FormatServerArguments(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

diff --git a/class_tgstation_1_1_server_1_1_api_1_1_routes.html b/class_tgstation_1_1_server_1_1_api_1_1_routes.html index dbbb50f890..9f9cb194f4 100644 --- a/class_tgstation_1_1_server_1_1_api_1_1_routes.html +++ b/class_tgstation_1_1_server_1_1_api_1_1_routes.html @@ -615,7 +615,7 @@ Here is the caller graph for this function:

Definition at line 18 of file Routes.cs.

-

Referenced by Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Controllers.RootController.Index(), and Tgstation.Server.Client.GraphQL.GraphQLServerClientFactory.SetupServiceProvider().

+

Referenced by Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Controllers.RootController.Index(), and Tgstation.Server.Client.GraphQL.GraphQLServerClientFactory.SetupServiceProvider().

@@ -643,7 +643,7 @@ Here is the caller graph for this function:

Definition at line 23 of file Routes.cs.

-

Referenced by Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline().

+

Referenced by Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline().

@@ -749,7 +749,7 @@ Here is the caller graph for this function:

Definition at line 118 of file Routes.cs.

-

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Client.ApiClient.CreateHubConnection< THubImplementation >().

+

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Client.ApiClient.CreateHubConnection< THubImplementation >().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_factory.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_factory.html index 11784e9aa7..64fdf0bf6f 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_factory.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_factory.html @@ -843,7 +843,7 @@ Here is the call graph for this function:
Tgstation.Server.Host.Components.Deployment.DreamMaker
Definition DreamMaker.cs:32
Tgstation.Server.Host.Components.Engine.EngineManager
Definition EngineManager.cs:23
Tgstation.Server.Host.Components.Events.EventConsumer
Definition EventConsumer.cs:13
-
Tgstation.Server.Host.Components.Session.SessionControllerFactory
Definition SessionControllerFactory.cs:33
+
Tgstation.Server.Host.Components.Session.SessionControllerFactory
Definition SessionControllerFactory.cs:34
Tgstation.Server.Host.Components.Session.SessionPersistor
Definition SessionPersistor.cs:18
Tgstation.Server.Host.IO.ResolvingIOManager
An IIOManager that resolve relative paths from another IIOManager to a subdirectory of that.
Definition ResolvingIOManager.cs:10
Tgstation.Server.Host.Components.Chat.IChatManagerFactory.CreateChatManager
IChatManager CreateChatManager(ICommandFactory commandFactory, IEnumerable< Models.ChatBot > initialChatBots)
Create a IChatManager.
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_d_m_api_constants.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_d_m_api_constants.html index 573ff2dbfc..3b2fedcc89 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_d_m_api_constants.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_d_m_api_constants.html @@ -159,7 +159,7 @@ Static Public Attributes

Definition at line 56 of file DMApiConstants.cs.

-

Referenced by Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand(), and Tgstation.Server.Host.Controllers.ApiRootController.ServerInfo().

+

Referenced by Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand(), and Tgstation.Server.Host.Controllers.ApiRootController.ServerInfo().

@@ -268,7 +268,7 @@ Static Public Attributes

Definition at line 30 of file DMApiConstants.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Engine.OpenDreamInstallation.FormatServerArguments().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Engine.OpenDreamInstallation.FormatServerArguments().

@@ -296,7 +296,7 @@ Static Public Attributes

Definition at line 20 of file DMApiConstants.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

@@ -324,7 +324,7 @@ Static Public Attributes

Definition at line 25 of file DMApiConstants.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_reattach_information.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_reattach_information.html index a13a720a45..bc46722b08 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_reattach_information.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_reattach_information.html @@ -305,7 +305,7 @@ Additional Inherited Members

References Tgstation.Server.Host.Components.Session.ReattachInformation.runtimeInformationLock.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

Here is the caller graph for this function:
@@ -376,7 +376,7 @@ Here is the caller graph for this function:

Definition at line 18 of file ReattachInformation.cs.

18{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Session.SessionController.DisposeAsync(), Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Components.Session.ReattachInformation.ReattachInformation(), Tgstation.Server.Host.Components.Session.SessionController.Release(), Tgstation.Server.Host.Components.Session.SessionController.ReplaceDmbProvider(), Tgstation.Server.Host.Components.Session.SessionController.SendTopicRequest(), Tgstation.Server.Host.Components.Session.SessionController.SessionController(), and Tgstation.Server.Host.Components.Session.SessionController.TriggerCustomEvent().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionController.DisposeAsync(), Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Components.Session.ReattachInformation.ReattachInformation(), Tgstation.Server.Host.Components.Session.SessionController.Release(), Tgstation.Server.Host.Components.Session.SessionController.ReplaceDmbProvider(), Tgstation.Server.Host.Components.Session.SessionController.SendTopicRequest(), Tgstation.Server.Host.Components.Session.SessionController.SessionController(), and Tgstation.Server.Host.Components.Session.SessionController.TriggerCustomEvent().

@@ -463,7 +463,7 @@ Here is the caller graph for this function:

Definition at line 33 of file ReattachInformation.cs.

33{ get; }
-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.ReattachInformation.ReattachInformation().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.ReattachInformation.ReattachInformation().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_session_controller_factory.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_session_controller_factory.html index 7bc732882f..0f285d3ed9 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_session_controller_factory.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_session_controller_factory.html @@ -274,7 +274,7 @@ Static Private Attributes

Detailed Description

-

Definition at line 32 of file SessionControllerFactory.cs.

+

Definition at line 33 of file SessionControllerFactory.cs.

Constructor & Destructor Documentation

◆ SessionControllerFactory()

@@ -430,49 +430,49 @@ Static Private Attributes -

Definition at line 190 of file SessionControllerFactory.cs.

-
210 {
-
211 this.processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor));
-
212 this.engineManager = engineManager ?? throw new ArgumentNullException(nameof(engineManager));
-
213 this.topicClientFactory = topicClientFactory ?? throw new ArgumentNullException(nameof(topicClientFactory));
-
214 this.cryptographySuite = cryptographySuite ?? throw new ArgumentNullException(nameof(cryptographySuite));
-
215 this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
-
216 this.gameIOManager = gameIOManager ?? throw new ArgumentNullException(nameof(gameIOManager));
-
217 this.diagnosticsIOManager = diagnosticsIOManager ?? throw new ArgumentNullException(nameof(diagnosticsIOManager));
-
218 this.chat = chat ?? throw new ArgumentNullException(nameof(chat));
-
219 this.networkPromptReaper = networkPromptReaper ?? throw new ArgumentNullException(nameof(networkPromptReaper));
-
220 this.platformIdentifier = platformIdentifier ?? throw new ArgumentNullException(nameof(platformIdentifier));
-
221 this.bridgeRegistrar = bridgeRegistrar ?? throw new ArgumentNullException(nameof(bridgeRegistrar));
-
222 this.serverPortProvider = serverPortProvider ?? throw new ArgumentNullException(nameof(serverPortProvider));
-
223 this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
-
224 this.asyncDelayer = asyncDelayer ?? throw new ArgumentNullException(nameof(asyncDelayer));
-
225 this.dotnetDumpService = dotnetDumpService ?? throw new ArgumentNullException(nameof(dotnetDumpService));
-
226 this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
-
227 this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
-
228 this.sessionConfiguration = sessionConfiguration ?? throw new ArgumentNullException(nameof(sessionConfiguration));
-
229 this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
-
230 }
-
readonly IEventConsumer eventConsumer
The IEventConsumer for the SessionControllerFactory.
-
readonly ITopicClientFactory topicClientFactory
The ITopicClientFactory for the SessionControllerFactory.
-
readonly SessionConfiguration sessionConfiguration
The SessionConfiguration for the SessionControllerFactory.
-
readonly IServerPortProvider serverPortProvider
The IServerPortProvider for the SessionControllerFactory.
-
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the SessionControllerFactory.
-
readonly IProcessExecutor processExecutor
The IProcessExecutor for the SessionControllerFactory.
-
readonly IIOManager gameIOManager
The IIOManager for the Game directory.
-
readonly IPlatformIdentifier platformIdentifier
The IPlatformIdentifier for the SessionControllerFactory.
-
readonly ICryptographySuite cryptographySuite
The ICryptographySuite for the SessionControllerFactory.
-
readonly IBridgeRegistrar bridgeRegistrar
The IBridgeRegistrar for the SessionControllerFactory.
-
readonly Api.Models.Instance instance
The Api.Models.Instance for the SessionControllerFactory.
-
readonly INetworkPromptReaper networkPromptReaper
The INetworkPromptReaper for the SessionControllerFactory.
-
readonly ILogger< SessionControllerFactory > logger
The ILogger for the SessionControllerFactory.
-
readonly IChatManager chat
The IChatManager for the SessionControllerFactory.
-
readonly IAssemblyInformationProvider assemblyInformationProvider
The IAssemblyInformationProvider for the SessionControllerFactory.
-
readonly IDotnetDumpService dotnetDumpService
The IDotnetDumpService for the SessionControllerFactory.
-
readonly IEngineManager engineManager
The IEngineManager for the SessionControllerFactory.
-
readonly IAsyncDelayer asyncDelayer
The IAsyncDelayer for the SessionControllerFactory.
-
readonly IIOManager diagnosticsIOManager
The IIOManager for the Diagnostics directory.
+

Definition at line 191 of file SessionControllerFactory.cs.

+
211 {
+
212 this.processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor));
+
213 this.engineManager = engineManager ?? throw new ArgumentNullException(nameof(engineManager));
+
214 this.topicClientFactory = topicClientFactory ?? throw new ArgumentNullException(nameof(topicClientFactory));
+
215 this.cryptographySuite = cryptographySuite ?? throw new ArgumentNullException(nameof(cryptographySuite));
+
216 this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
+
217 this.gameIOManager = gameIOManager ?? throw new ArgumentNullException(nameof(gameIOManager));
+
218 this.diagnosticsIOManager = diagnosticsIOManager ?? throw new ArgumentNullException(nameof(diagnosticsIOManager));
+
219 this.chat = chat ?? throw new ArgumentNullException(nameof(chat));
+
220 this.networkPromptReaper = networkPromptReaper ?? throw new ArgumentNullException(nameof(networkPromptReaper));
+
221 this.platformIdentifier = platformIdentifier ?? throw new ArgumentNullException(nameof(platformIdentifier));
+
222 this.bridgeRegistrar = bridgeRegistrar ?? throw new ArgumentNullException(nameof(bridgeRegistrar));
+
223 this.serverPortProvider = serverPortProvider ?? throw new ArgumentNullException(nameof(serverPortProvider));
+
224 this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
+
225 this.asyncDelayer = asyncDelayer ?? throw new ArgumentNullException(nameof(asyncDelayer));
+
226 this.dotnetDumpService = dotnetDumpService ?? throw new ArgumentNullException(nameof(dotnetDumpService));
+
227 this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
+
228 this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
+
229 this.sessionConfiguration = sessionConfiguration ?? throw new ArgumentNullException(nameof(sessionConfiguration));
+
230 this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
+
231 }
+
readonly IEventConsumer eventConsumer
The IEventConsumer for the SessionControllerFactory.
+
readonly ITopicClientFactory topicClientFactory
The ITopicClientFactory for the SessionControllerFactory.
+
readonly SessionConfiguration sessionConfiguration
The SessionConfiguration for the SessionControllerFactory.
+
readonly IServerPortProvider serverPortProvider
The IServerPortProvider for the SessionControllerFactory.
+
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the SessionControllerFactory.
+
readonly IProcessExecutor processExecutor
The IProcessExecutor for the SessionControllerFactory.
+
readonly IIOManager gameIOManager
The IIOManager for the Game directory.
+
readonly IPlatformIdentifier platformIdentifier
The IPlatformIdentifier for the SessionControllerFactory.
+
readonly ICryptographySuite cryptographySuite
The ICryptographySuite for the SessionControllerFactory.
+
readonly IBridgeRegistrar bridgeRegistrar
The IBridgeRegistrar for the SessionControllerFactory.
+
readonly Api.Models.Instance instance
The Api.Models.Instance for the SessionControllerFactory.
+
readonly INetworkPromptReaper networkPromptReaper
The INetworkPromptReaper for the SessionControllerFactory.
+
readonly ILogger< SessionControllerFactory > logger
The ILogger for the SessionControllerFactory.
+
readonly IChatManager chat
The IChatManager for the SessionControllerFactory.
+
readonly IAssemblyInformationProvider assemblyInformationProvider
The IAssemblyInformationProvider for the SessionControllerFactory.
+
readonly IDotnetDumpService dotnetDumpService
The IDotnetDumpService for the SessionControllerFactory.
+
readonly IEngineManager engineManager
The IEngineManager for the SessionControllerFactory.
+
readonly IAsyncDelayer asyncDelayer
The IAsyncDelayer for the SessionControllerFactory.
+
readonly IIOManager diagnosticsIOManager
The IIOManager for the Diagnostics directory.
-

References Tgstation.Server.Host.Components.Session.SessionControllerFactory.assemblyInformationProvider, Tgstation.Server.Host.Components.Session.SessionControllerFactory.asyncDelayer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.bridgeRegistrar, Tgstation.Server.Host.Components.Session.SessionControllerFactory.chat, Tgstation.Server.Host.Components.Session.SessionControllerFactory.cryptographySuite, Tgstation.Server.Host.Components.Session.SessionControllerFactory.diagnosticsIOManager, Tgstation.Server.Host.Components.Session.SessionControllerFactory.dotnetDumpService, Tgstation.Server.Host.Components.Session.SessionControllerFactory.engineManager, Tgstation.Server.Host.Components.Session.SessionControllerFactory.eventConsumer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.gameIOManager, Tgstation.Server.Host.Components.Session.SessionControllerFactory.instance, Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, Tgstation.Server.Host.Components.Session.SessionControllerFactory.loggerFactory, Tgstation.Server.Host.Components.Session.SessionControllerFactory.networkPromptReaper, Tgstation.Server.Host.Components.Session.SessionControllerFactory.platformIdentifier, Tgstation.Server.Host.Components.Session.SessionControllerFactory.processExecutor, Tgstation.Server.Host.Components.Session.SessionControllerFactory.serverPortProvider, Tgstation.Server.Host.Components.Session.SessionControllerFactory.sessionConfiguration, and Tgstation.Server.Host.Components.Session.SessionControllerFactory.topicClientFactory.

+

References Tgstation.Server.Host.Components.Session.SessionControllerFactory.assemblyInformationProvider, Tgstation.Server.Host.Components.Session.SessionControllerFactory.asyncDelayer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.bridgeRegistrar, Tgstation.Server.Host.Components.Session.SessionControllerFactory.chat, Tgstation.Server.Host.Components.Session.SessionControllerFactory.cryptographySuite, Tgstation.Server.Host.Components.Session.SessionControllerFactory.diagnosticsIOManager, Tgstation.Server.Host.Components.Session.SessionControllerFactory.dotnetDumpService, Tgstation.Server.Host.Components.Session.SessionControllerFactory.engineManager, Tgstation.Server.Host.Components.Session.SessionControllerFactory.eventConsumer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.gameIOManager, Tgstation.Server.Host.Components.Session.SessionControllerFactory.instance, Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, Tgstation.Server.Host.Components.Session.SessionControllerFactory.loggerFactory, Tgstation.Server.Host.Components.Session.SessionControllerFactory.networkPromptReaper, Tgstation.Server.Host.Components.Session.SessionControllerFactory.platformIdentifier, Tgstation.Server.Host.Components.Session.SessionControllerFactory.processExecutor, Tgstation.Server.Host.Components.Session.SessionControllerFactory.serverPortProvider, Tgstation.Server.Host.Components.Session.SessionControllerFactory.sessionConfiguration, and Tgstation.Server.Host.Components.Session.SessionControllerFactory.topicClientFactory.

@@ -503,23 +503,23 @@ Static Private Attributes

Make sure the BYOND pager is not running.

Returns
A ValueTask representing the running operation.
-

Definition at line 648 of file SessionControllerFactory.cs.

-
649 {
-
650 if (!platformIdentifier.IsWindows)
-
651 return;
-
652
-
653 await using var otherProcess = processExecutor.GetProcessByName("byond");
-
654 if (otherProcess == null)
-
655 return;
-
656
-
657 var otherUsername = otherProcess.GetExecutingUsername();
-
658
-
659 await using var ourProcess = processExecutor.GetCurrentProcess();
-
660 var ourUsername = ourProcess.GetExecutingUsername();
-
661
-
662 if (otherUsername.Equals(ourUsername, StringComparison.Ordinal))
-
663 throw new JobException(ErrorCode.DreamDaemonPagerRunning);
-
664 }
+

Definition at line 656 of file SessionControllerFactory.cs.

+
657 {
+ +
659 return;
+
660
+
661 await using var otherProcess = processExecutor.GetProcessByName("byond");
+
662 if (otherProcess == null)
+
663 return;
+
664
+
665 var otherUsername = otherProcess.GetExecutingUsername();
+
666
+
667 await using var ourProcess = processExecutor.GetCurrentProcess();
+
668 var ourUsername = ourProcess.GetExecutingUsername();
+
669
+
670 if (otherUsername.Equals(ourUsername, StringComparison.Ordinal))
+
671 throw new JobException(ErrorCode.DreamDaemonPagerRunning);
+
672 }
Operation exceptions thrown from the context of a Models.Job.
bool IsWindows
If the current platform is a Windows platform.
IProcess GetCurrentProcess()
Get a IProcess representing the running executable.
@@ -527,9 +527,9 @@ Static Private Attributes
string GetExecutingUsername()
Get the name of the account executing the IProcess.
ErrorCode
Types of Response.ErrorMessageResponses that the API may return.
Definition ErrorCode.cs:12
-

References Tgstation.Server.Host.System.IProcessExecutor.GetCurrentProcess(), Tgstation.Server.Host.System.IProcess.GetExecutingUsername(), Tgstation.Server.Host.System.IProcessExecutor.GetProcessByName(), Tgstation.Server.Host.System.IPlatformIdentifier.IsWindows, Tgstation.Server.Host.Components.Session.SessionControllerFactory.platformIdentifier, and Tgstation.Server.Host.Components.Session.SessionControllerFactory.processExecutor.

+

References Tgstation.Server.Host.System.IProcessExecutor.GetCurrentProcess(), Tgstation.Server.Host.System.IProcess.GetExecutingUsername(), Tgstation.Server.Host.System.IProcessExecutor.GetProcessByName(), Tgstation.Server.Host.System.IPlatformIdentifier.IsWindows, Tgstation.Server.Host.Components.Session.SessionControllerFactory.platformIdentifier, and Tgstation.Server.Host.Components.Session.SessionControllerFactory.processExecutor.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

Here is the call graph for this function:
@@ -638,69 +638,76 @@ Here is the caller graph for this function:
Returns
A ValueTask<TResult> resulting in the DreamDaemon IProcess.
-

Definition at line 495 of file SessionControllerFactory.cs.

-
503 {
-
504 // important to run on all ports to allow port changing
-
505 var environment = await engineLock.LoadEnv(logger, false, cancellationToken);
-
506 var arguments = engineLock.FormatServerArguments(
-
507 dmbProvider,
-
508 new Dictionary<string, string>
-
509 {
- -
511 { DMApiConstants.ParamServerPort, serverPortProvider.HttpApiPort.ToString(CultureInfo.InvariantCulture) },
-
512 { DMApiConstants.ParamAccessIdentifier, accessIdentifier },
-
513 },
-
514 launchParameters,
-
515 !engineLock.HasStandardOutput || engineLock.PreferFileLogging
-
516 ? logFilePath
-
517 : null);
-
518
-
519 var process = await processExecutor.LaunchProcess(
-
520 engineLock.ServerExePath,
-
521 dmbProvider.Directory,
-
522 arguments,
-
523 cancellationToken,
-
524 environment,
-
525 logFilePath,
-
526 engineLock.HasStandardOutput,
-
527 true);
-
528
-
529 try
-
530 {
-
531 if (!apiValidate)
-
532 {
- -
534 process.AdjustPriority(true);
-
535 }
- -
537 process.AdjustPriority(false);
-
538
-
539 if (!engineLock.HasStandardOutput)
- -
541
-
542 // If this isnt a staging DD (From a Deployment), fire off an event
-
543 if (!apiValidate)
- -
545 EventType.DreamDaemonLaunch,
-
546 new List<string>
-
547 {
-
548 process.Id.ToString(CultureInfo.InvariantCulture),
-
549 },
-
550 false,
-
551 cancellationToken);
-
552
-
553 return process;
-
554 }
-
555 catch
-
556 {
-
557 await using (process)
-
558 {
-
559 process.Terminate();
-
560 await process.Lifetime;
-
561 throw;
-
562 }
-
563 }
-
564 }
+

Definition at line 496 of file SessionControllerFactory.cs.

+
504 {
+
505 // important to run on all ports to allow port changing
+
506 var environment = await engineLock.LoadEnv(logger, false, cancellationToken);
+
507 var arguments = engineLock.FormatServerArguments(
+
508 dmbProvider,
+
509 new Dictionary<string, string>
+
510 {
+ +
512 { DMApiConstants.ParamServerPort, serverPortProvider.HttpApiPort.ToString(CultureInfo.InvariantCulture) },
+
513 { DMApiConstants.ParamAccessIdentifier, accessIdentifier },
+
514 },
+
515 launchParameters,
+
516 !engineLock.HasStandardOutput || engineLock.PreferFileLogging
+
517 ? logFilePath
+
518 : null);
+
519
+
520 // If this isnt a staging DD (From a Deployment), fire off events
+
521 if (!apiValidate)
+ +
523 EventType.DreamDaemonPreLaunch,
+
524 Enumerable.Empty<string?>(),
+
525 false,
+
526 cancellationToken);
+
527
+
528 var process = await processExecutor.LaunchProcess(
+
529 engineLock.ServerExePath,
+
530 dmbProvider.Directory,
+
531 arguments,
+
532 cancellationToken,
+
533 environment,
+
534 logFilePath,
+
535 engineLock.HasStandardOutput,
+
536 true);
+
537
+
538 try
+
539 {
+
540 if (!apiValidate)
+
541 {
+ +
543 process.AdjustPriority(true);
+
544 }
+ +
546 process.AdjustPriority(false);
+
547
+
548 if (!engineLock.HasStandardOutput)
+ +
550
+
551 if (!apiValidate)
+ +
553 EventType.DreamDaemonLaunch,
+
554 new List<string>
+
555 {
+
556 process.Id.ToString(CultureInfo.InvariantCulture),
+
557 },
+
558 false,
+
559 cancellationToken);
+
560
+
561 return process;
+
562 }
+
563 catch
+
564 {
+
565 await using (process)
+
566 {
+
567 process.Terminate();
+
568 await process.Lifetime;
+
569 throw;
+
570 }
+
571 }
+
572 }
Constants used for communication with the DMAPI.
const string ParamServerPort
Identifies the Core.IServerPortProvider.HttpApiPort of the server.
const string ParamAccessIdentifier
Identifies the DMApiParameters.AccessIdentifier for the session.
@@ -719,9 +726,9 @@ Here is the caller graph for this function:
ValueTask< IProcess > LaunchProcess(string fileName, string workingDirectory, string arguments, CancellationToken cancellationToken, IReadOnlyDictionary< string, string >? environment=null, string? fileRedirect=null, bool readStandardHandles=false, bool noShellExecute=false)
Launch a IProcess.
EventType
Types of events. Mirror in tgs.dm. Prefer last listed name for script.
Definition EventType.cs:7
-

References Tgstation.Server.Host.Components.Deployment.IDmbProvider.Directory, Tgstation.Server.Host.Components.Session.SessionControllerFactory.eventConsumer, Tgstation.Server.Host.Components.Engine.IEngineInstallation.FormatServerArguments(), Tgstation.Server.Host.Components.Events.IEventConsumer.HandleEvent(), Tgstation.Server.Host.Components.Engine.IEngineInstallation.HasStandardOutput, Tgstation.Server.Host.Configuration.SessionConfiguration.HighPriorityLiveDreamDaemon, Tgstation.Server.Host.Core.IServerPortProvider.HttpApiPort, Tgstation.Server.Host.Components.Interop.DMApiConstants.InteropVersion, Tgstation.Server.Host.System.IProcessExecutor.LaunchProcess(), Tgstation.Server.Host.Components.Engine.IEngineInstallation.LoadEnv(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, Tgstation.Server.Host.Configuration.SessionConfiguration.LowPriorityDeploymentProcesses, Tgstation.Server.Host.Components.Session.SessionControllerFactory.networkPromptReaper, Tgstation.Server.Host.Components.Interop.DMApiConstants.ParamAccessIdentifier, Tgstation.Server.Host.Components.Interop.DMApiConstants.ParamApiVersion, Tgstation.Server.Host.Components.Interop.DMApiConstants.ParamServerPort, Tgstation.Server.Host.Components.Session.SessionControllerFactory.processExecutor, Tgstation.Server.Host.System.INetworkPromptReaper.RegisterProcess(), Tgstation.Server.Host.Components.Engine.IEngineInstallation.ServerExePath, Tgstation.Server.Host.Components.Session.SessionControllerFactory.serverPortProvider, and Tgstation.Server.Host.Components.Session.SessionControllerFactory.sessionConfiguration.

+

References Tgstation.Server.Host.Components.Deployment.IDmbProvider.Directory, Tgstation.Server.Host.Components.Session.SessionControllerFactory.eventConsumer, Tgstation.Server.Host.Components.Engine.IEngineInstallation.FormatServerArguments(), Tgstation.Server.Host.Components.Events.IEventConsumer.HandleEvent(), Tgstation.Server.Host.Components.Engine.IEngineInstallation.HasStandardOutput, Tgstation.Server.Host.Configuration.SessionConfiguration.HighPriorityLiveDreamDaemon, Tgstation.Server.Host.Core.IServerPortProvider.HttpApiPort, Tgstation.Server.Host.Components.Interop.DMApiConstants.InteropVersion, Tgstation.Server.Host.System.IProcessExecutor.LaunchProcess(), Tgstation.Server.Host.Components.Engine.IEngineInstallation.LoadEnv(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, Tgstation.Server.Host.Configuration.SessionConfiguration.LowPriorityDeploymentProcesses, Tgstation.Server.Host.Components.Session.SessionControllerFactory.networkPromptReaper, Tgstation.Server.Host.Components.Interop.DMApiConstants.ParamAccessIdentifier, Tgstation.Server.Host.Components.Interop.DMApiConstants.ParamApiVersion, Tgstation.Server.Host.Components.Interop.DMApiConstants.ParamServerPort, Tgstation.Server.Host.Components.Session.SessionControllerFactory.processExecutor, Tgstation.Server.Host.System.INetworkPromptReaper.RegisterProcess(), Tgstation.Server.Host.Components.Engine.IEngineInstallation.ServerExePath, Tgstation.Server.Host.Components.Session.SessionControllerFactory.serverPortProvider, and Tgstation.Server.Host.Components.Session.SessionControllerFactory.sessionConfiguration.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

Here is the call graph for this function:
@@ -820,7 +827,7 @@ Here is the caller graph for this function:
Returns
A new RuntimeInformation class.
-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

Here is the caller graph for this function:
@@ -898,162 +905,162 @@ Here is the caller graph for this function:

Implements Tgstation.Server.Host.Components.Session.ISessionControllerFactory.

-

Definition at line 234 of file SessionControllerFactory.cs.

-
240 {
-
241 logger.LogTrace("Begin session launch...");
-
242 if (!launchParameters.Port.HasValue)
-
243 throw new InvalidOperationException("Given port is null!");
-
244
-
245 switch (dmbProvider.CompileJob.MinimumSecurityLevel)
-
246 {
-
247 case DreamDaemonSecurity.Ultrasafe:
-
248 break;
-
249 case DreamDaemonSecurity.Safe:
-
250 if (launchParameters.SecurityLevel == DreamDaemonSecurity.Ultrasafe)
-
251 {
-
252 logger.LogTrace("Boosting security level to minimum of Safe");
-
253 launchParameters.SecurityLevel = DreamDaemonSecurity.Safe;
-
254 }
-
255
-
256 break;
-
257 case DreamDaemonSecurity.Trusted:
-
258 if (launchParameters.SecurityLevel != DreamDaemonSecurity.Trusted)
-
259 logger.LogTrace("Boosting security level to minimum of Trusted");
-
260
-
261 launchParameters.SecurityLevel = DreamDaemonSecurity.Trusted;
-
262 break;
-
263 default:
-
264 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid DreamDaemonSecurity value: {0}", dmbProvider.CompileJob.MinimumSecurityLevel));
-
265 }
-
266
-
267 // get the byond lock
-
268 var engineLock = currentByondLock ?? await engineManager.UseExecutables(
-
269 dmbProvider.EngineVersion,
-
270 gameIOManager.ConcatPath(dmbProvider.Directory, dmbProvider.DmbName),
-
271 cancellationToken);
-
272 try
-
273 {
-
274 logger.LogDebug(
-
275 "Launching session with CompileJob {compileJobId}...",
-
276 dmbProvider.CompileJob.Id);
-
277
-
278 // mad this isn't abstracted but whatever
-
279 var engineType = dmbProvider.EngineVersion.Engine!.Value;
-
280 if (engineType == EngineType.Byond)
- -
282
-
283 await PortBindTest(launchParameters.Port.Value, engineType, cancellationToken);
-
284
-
285 string? outputFilePath = null;
-
286 var preserveLogFile = true;
-
287
-
288 var hasStandardOutput = engineLock.HasStandardOutput;
-
289 if (launchParameters.LogOutput!.Value)
-
290 {
-
291 var now = DateTimeOffset.UtcNow;
-
292 var dateDirectory = diagnosticsIOManager.ConcatPath(DreamDaemonLogsPath, now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
-
293 await diagnosticsIOManager.CreateDirectory(dateDirectory, cancellationToken);
-
294 outputFilePath = diagnosticsIOManager.ResolvePath(
- -
296 dateDirectory,
-
297 $"server-utc-{now.ToString("yyyy-MM-dd-HH-mm-ss", CultureInfo.InvariantCulture)}{(apiValidate ? "-dmapi" : String.Empty)}.log"));
-
298
-
299 logger.LogInformation("Logging server output to {path}...", outputFilePath);
-
300 }
-
301 else if (!hasStandardOutput)
-
302 {
-
303 outputFilePath = gameIOManager.ConcatPath(dmbProvider.Directory, $"{Guid.NewGuid()}.server.log");
-
304 preserveLogFile = false;
-
305 }
-
306
-
307 var accessIdentifier = cryptographySuite.GetSecureString();
-
308
-
309 if (!apiValidate && dmbProvider.CompileJob.DMApiVersion == null)
-
310 logger.LogDebug("Session will have no DMAPI support!");
-
311
-
312 // launch dd
-
313 var process = await CreateGameServerProcess(
-
314 dmbProvider,
-
315 engineLock,
-
316 launchParameters,
-
317 accessIdentifier,
-
318 outputFilePath,
-
319 apiValidate,
-
320 cancellationToken);
-
321
-
322 try
-
323 {
-
324 var chatTrackingContext = chat.CreateTrackingContext();
-
325
-
326 try
-
327 {
-
328 var runtimeInformation = CreateRuntimeInformation(
-
329 dmbProvider,
-
330 chatTrackingContext,
-
331 launchParameters.SecurityLevel!.Value,
-
332 launchParameters.Visibility!.Value,
-
333 apiValidate);
-
334
-
335 var reattachInformation = new ReattachInformation(
-
336 dmbProvider,
-
337 process,
-
338 runtimeInformation,
-
339 accessIdentifier,
-
340 launchParameters.Port.Value);
-
341
-
342 var byondTopicSender = topicClientFactory.CreateTopicClient(
-
343 TimeSpan.FromMilliseconds(
-
344 launchParameters.TopicRequestTimeout!.Value));
-
345
-
346 var sessionController = new SessionController(
-
347 reattachInformation,
-
348 instance,
-
349 process,
-
350 engineLock,
-
351 byondTopicSender,
-
352 chatTrackingContext,
- -
354 chat,
- - - - -
359 loggerFactory.CreateLogger<SessionController>(),
-
360 () => LogDDOutput(
-
361 process,
-
362 outputFilePath,
-
363 hasStandardOutput,
-
364 preserveLogFile,
-
365 CancellationToken.None), // DCT: None available
-
366 launchParameters.StartupTimeout,
-
367 false,
-
368 apiValidate);
-
369
-
370 return sessionController;
-
371 }
-
372 catch
-
373 {
-
374 chatTrackingContext.Dispose();
-
375 throw;
-
376 }
-
377 }
-
378 catch
-
379 {
-
380 await using (process)
-
381 {
-
382 process.Terminate();
-
383 await process.Lifetime;
-
384 throw;
-
385 }
-
386 }
-
387 }
-
388 catch
-
389 {
-
390 if (currentByondLock == null)
-
391 engineLock.Dispose();
-
392 throw;
-
393 }
-
394 }
+

Definition at line 235 of file SessionControllerFactory.cs.

+
241 {
+
242 logger.LogTrace("Begin session launch...");
+
243 if (!launchParameters.Port.HasValue)
+
244 throw new InvalidOperationException("Given port is null!");
+
245
+
246 switch (dmbProvider.CompileJob.MinimumSecurityLevel)
+
247 {
+
248 case DreamDaemonSecurity.Ultrasafe:
+
249 break;
+
250 case DreamDaemonSecurity.Safe:
+
251 if (launchParameters.SecurityLevel == DreamDaemonSecurity.Ultrasafe)
+
252 {
+
253 logger.LogTrace("Boosting security level to minimum of Safe");
+
254 launchParameters.SecurityLevel = DreamDaemonSecurity.Safe;
+
255 }
+
256
+
257 break;
+
258 case DreamDaemonSecurity.Trusted:
+
259 if (launchParameters.SecurityLevel != DreamDaemonSecurity.Trusted)
+
260 logger.LogTrace("Boosting security level to minimum of Trusted");
+
261
+
262 launchParameters.SecurityLevel = DreamDaemonSecurity.Trusted;
+
263 break;
+
264 default:
+
265 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid DreamDaemonSecurity value: {0}", dmbProvider.CompileJob.MinimumSecurityLevel));
+
266 }
+
267
+
268 // get the byond lock
+
269 var engineLock = currentByondLock ?? await engineManager.UseExecutables(
+
270 dmbProvider.EngineVersion,
+
271 gameIOManager.ConcatPath(dmbProvider.Directory, dmbProvider.DmbName),
+
272 cancellationToken);
+
273 try
+
274 {
+
275 logger.LogDebug(
+
276 "Launching session with CompileJob {compileJobId}...",
+
277 dmbProvider.CompileJob.Id);
+
278
+
279 // mad this isn't abstracted but whatever
+
280 var engineType = dmbProvider.EngineVersion.Engine!.Value;
+
281 if (engineType == EngineType.Byond)
+ +
283
+
284 await PortBindTest(launchParameters.Port.Value, engineType, cancellationToken);
+
285
+
286 string? outputFilePath = null;
+
287 var preserveLogFile = true;
+
288
+
289 var hasStandardOutput = engineLock.HasStandardOutput;
+
290 if (launchParameters.LogOutput!.Value)
+
291 {
+
292 var now = DateTimeOffset.UtcNow;
+
293 var dateDirectory = diagnosticsIOManager.ConcatPath(DreamDaemonLogsPath, now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
+
294 await diagnosticsIOManager.CreateDirectory(dateDirectory, cancellationToken);
+
295 outputFilePath = diagnosticsIOManager.ResolvePath(
+ +
297 dateDirectory,
+
298 $"server-utc-{now.ToString("yyyy-MM-dd-HH-mm-ss", CultureInfo.InvariantCulture)}{(apiValidate ? "-dmapi" : String.Empty)}.log"));
+
299
+
300 logger.LogInformation("Logging server output to {path}...", outputFilePath);
+
301 }
+
302 else if (!hasStandardOutput)
+
303 {
+
304 outputFilePath = gameIOManager.ConcatPath(dmbProvider.Directory, $"{Guid.NewGuid()}.server.log");
+
305 preserveLogFile = false;
+
306 }
+
307
+
308 var accessIdentifier = cryptographySuite.GetSecureString();
+
309
+
310 if (!apiValidate && dmbProvider.CompileJob.DMApiVersion == null)
+
311 logger.LogDebug("Session will have no DMAPI support!");
+
312
+
313 // launch dd
+
314 var process = await CreateGameServerProcess(
+
315 dmbProvider,
+
316 engineLock,
+
317 launchParameters,
+
318 accessIdentifier,
+
319 outputFilePath,
+
320 apiValidate,
+
321 cancellationToken);
+
322
+
323 try
+
324 {
+
325 var chatTrackingContext = chat.CreateTrackingContext();
+
326
+
327 try
+
328 {
+
329 var runtimeInformation = CreateRuntimeInformation(
+
330 dmbProvider,
+
331 chatTrackingContext,
+
332 launchParameters.SecurityLevel!.Value,
+
333 launchParameters.Visibility!.Value,
+
334 apiValidate);
+
335
+
336 var reattachInformation = new ReattachInformation(
+
337 dmbProvider,
+
338 process,
+
339 runtimeInformation,
+
340 accessIdentifier,
+
341 launchParameters.Port.Value);
+
342
+
343 var byondTopicSender = topicClientFactory.CreateTopicClient(
+
344 TimeSpan.FromMilliseconds(
+
345 launchParameters.TopicRequestTimeout!.Value));
+
346
+
347 var sessionController = new SessionController(
+
348 reattachInformation,
+
349 instance,
+
350 process,
+
351 engineLock,
+
352 byondTopicSender,
+
353 chatTrackingContext,
+ +
355 chat,
+ + + + +
360 loggerFactory.CreateLogger<SessionController>(),
+
361 () => LogDDOutput(
+
362 process,
+
363 outputFilePath,
+
364 hasStandardOutput,
+
365 preserveLogFile,
+
366 CancellationToken.None), // DCT: None available
+
367 launchParameters.StartupTimeout,
+
368 false,
+
369 apiValidate);
+
370
+
371 return sessionController;
+
372 }
+
373 catch
+
374 {
+
375 chatTrackingContext.Dispose();
+
376 throw;
+
377 }
+
378 }
+
379 catch
+
380 {
+
381 await using (process)
+
382 {
+
383 process.Terminate();
+
384 await process.Lifetime;
+
385 throw;
+
386 }
+
387 }
+
388 }
+
389 catch
+
390 {
+
391 if (currentByondLock == null)
+
392 engineLock.Dispose();
+
393 throw;
+
394 }
+
395 }
virtual ? long Id
The ID of the entity.
Definition EntityId.cs:14
virtual ? Version DMApiVersion
The DMAPI Version.
Definition CompileJob.cs:43
@@ -1064,12 +1071,12 @@ Here is the caller graph for this function:
uint? TopicRequestTimeout
The timeout for sending and receiving BYOND topics in milliseconds.
DreamDaemonSecurity? SecurityLevel
The DreamDaemonSecurity level of DreamDaemon. No-op for EngineType.OpenDream.
-
async ValueTask CheckPagerIsNotRunning()
Make sure the BYOND pager is not running.
-
async ValueTask LogDDOutput(IProcess process, string? outputFilePath, bool cliSupported, bool preserveFile, CancellationToken cancellationToken)
Attempts to log DreamDaemon output.
+
async ValueTask CheckPagerIsNotRunning()
Make sure the BYOND pager is not running.
+
async ValueTask LogDDOutput(IProcess process, string? outputFilePath, bool cliSupported, bool preserveFile, CancellationToken cancellationToken)
Attempts to log DreamDaemon output.
RuntimeInformation CreateRuntimeInformation(IDmbProvider dmbProvider, IChatTrackingContext chatTrackingContext, DreamDaemonSecurity securityLevel, DreamDaemonVisibility visibility, bool apiValidateOnly)
Create RuntimeInformation.
-
async ValueTask< IProcess > CreateGameServerProcess(IDmbProvider dmbProvider, IEngineExecutableLock engineLock, DreamDaemonLaunchParameters launchParameters, string accessIdentifier, string? logFilePath, bool apiValidate, CancellationToken cancellationToken)
Creates the game server IProcess.
-
async ValueTask PortBindTest(ushort port, EngineType engineType, CancellationToken cancellationToken)
Check if a given port can be bound to.
-
const string DreamDaemonLogsPath
Path in Diagnostics folder to DreamDaemon logs.
+
async ValueTask< IProcess > CreateGameServerProcess(IDmbProvider dmbProvider, IEngineExecutableLock engineLock, DreamDaemonLaunchParameters launchParameters, string accessIdentifier, string? logFilePath, bool apiValidate, CancellationToken cancellationToken)
Creates the game server IProcess.
+
async ValueTask PortBindTest(ushort port, EngineType engineType, CancellationToken cancellationToken)
Check if a given port can be bound to.
+
const string DreamDaemonLogsPath
Path in Diagnostics folder to DreamDaemon logs.
IChatTrackingContext CreateTrackingContext()
Start tracking Commands.CustomCommands and ChannelRepresentations.
EngineVersion EngineVersion
The Api.Models.EngineVersion used to build the .dmb.
@@ -1083,7 +1090,7 @@ Here is the caller graph for this function:
DreamDaemonSecurity
DreamDaemon's security level.
EngineType
The type of engine the codebase is using.
Definition EngineType.cs:7
-

References Tgstation.Server.Host.Components.Session.SessionControllerFactory.assemblyInformationProvider, Tgstation.Server.Host.Components.Session.SessionControllerFactory.asyncDelayer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.bridgeRegistrar, Tgstation.Server.Host.Components.Session.SessionControllerFactory.chat, Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning(), Tgstation.Server.Host.Components.Deployment.IDmbProvider.CompileJob, Tgstation.Server.Host.IO.IIOManager.ConcatPath(), Tgstation.Server.Host.IO.IIOManager.CreateDirectory(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateRuntimeInformation(), Tgstation.Server.Host.Components.Session.ITopicClientFactory.CreateTopicClient(), Tgstation.Server.Host.Components.Chat.IChatManager.CreateTrackingContext(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.cryptographySuite, Tgstation.Server.Host.Components.Session.SessionControllerFactory.diagnosticsIOManager, Tgstation.Server.Host.Components.Deployment.IDmbProvider.Directory, Tgstation.Server.Api.Models.Internal.CompileJob.DMApiVersion, Tgstation.Server.Host.Components.Deployment.IDmbProvider.DmbName, Tgstation.Server.Host.Components.Session.SessionControllerFactory.dotnetDumpService, Tgstation.Server.Host.Components.Session.SessionControllerFactory.DreamDaemonLogsPath, Tgstation.Server.Api.Models.EngineVersion.Engine, Tgstation.Server.Host.Components.Session.SessionControllerFactory.engineManager, Tgstation.Server.Host.Components.Deployment.IDmbProvider.EngineVersion, Tgstation.Server.Host.Components.Session.SessionControllerFactory.eventConsumer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.gameIOManager, Tgstation.Server.Host.Security.ICryptographySuite.GetSecureString(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Components.Session.SessionControllerFactory.instance, Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, Tgstation.Server.Host.Components.Session.SessionControllerFactory.loggerFactory, Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.LogOutput, Tgstation.Server.Api.Models.Internal.CompileJob.MinimumSecurityLevel, Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.Port, Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.IO.IIOManager.ResolvePath(), Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.SecurityLevel, Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.StartupTimeout, Tgstation.Server.Host.Components.Session.SessionControllerFactory.topicClientFactory, Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.TopicRequestTimeout, Tgstation.Server.Host.Components.Engine.IEngineManager.UseExecutables(), and Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.Visibility.

+

References Tgstation.Server.Host.Components.Session.SessionControllerFactory.assemblyInformationProvider, Tgstation.Server.Host.Components.Session.SessionControllerFactory.asyncDelayer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.bridgeRegistrar, Tgstation.Server.Host.Components.Session.SessionControllerFactory.chat, Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning(), Tgstation.Server.Host.Components.Deployment.IDmbProvider.CompileJob, Tgstation.Server.Host.IO.IIOManager.ConcatPath(), Tgstation.Server.Host.IO.IIOManager.CreateDirectory(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateRuntimeInformation(), Tgstation.Server.Host.Components.Session.ITopicClientFactory.CreateTopicClient(), Tgstation.Server.Host.Components.Chat.IChatManager.CreateTrackingContext(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.cryptographySuite, Tgstation.Server.Host.Components.Session.SessionControllerFactory.diagnosticsIOManager, Tgstation.Server.Host.Components.Deployment.IDmbProvider.Directory, Tgstation.Server.Api.Models.Internal.CompileJob.DMApiVersion, Tgstation.Server.Host.Components.Deployment.IDmbProvider.DmbName, Tgstation.Server.Host.Components.Session.SessionControllerFactory.dotnetDumpService, Tgstation.Server.Host.Components.Session.SessionControllerFactory.DreamDaemonLogsPath, Tgstation.Server.Api.Models.EngineVersion.Engine, Tgstation.Server.Host.Components.Session.SessionControllerFactory.engineManager, Tgstation.Server.Host.Components.Deployment.IDmbProvider.EngineVersion, Tgstation.Server.Host.Components.Session.SessionControllerFactory.eventConsumer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.gameIOManager, Tgstation.Server.Host.Security.ICryptographySuite.GetSecureString(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Components.Session.SessionControllerFactory.instance, Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, Tgstation.Server.Host.Components.Session.SessionControllerFactory.loggerFactory, Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.LogOutput, Tgstation.Server.Api.Models.Internal.CompileJob.MinimumSecurityLevel, Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.Port, Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.IO.IIOManager.ResolvePath(), Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.SecurityLevel, Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.StartupTimeout, Tgstation.Server.Host.Components.Session.SessionControllerFactory.topicClientFactory, Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.TopicRequestTimeout, Tgstation.Server.Host.Components.Engine.IEngineManager.UseExecutables(), and Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.Visibility.

Referenced by Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.InitController().

@@ -1224,57 +1231,57 @@ Here is the caller graph for this function:
Returns
A ValueTask representing the running operation.
-

Definition at line 575 of file SessionControllerFactory.cs.

-
576 {
-
577 try
-
578 {
-
579 string? ddOutput = null;
-
580 if (cliSupported)
-
581 ddOutput = (await process.GetCombinedOutput(cancellationToken))!;
-
582
-
583 if (ddOutput == null)
-
584 try
-
585 {
-
586 var dreamDaemonLogBytes = await gameIOManager.ReadAllBytes(
-
587 outputFilePath!,
-
588 cancellationToken);
-
589
-
590 ddOutput = Encoding.UTF8.GetString(dreamDaemonLogBytes);
-
591 }
-
592 finally
+

Definition at line 583 of file SessionControllerFactory.cs.

+
584 {
+
585 try
+
586 {
+
587 string? ddOutput = null;
+
588 if (cliSupported)
+
589 ddOutput = (await process.GetCombinedOutput(cancellationToken))!;
+
590
+
591 if (ddOutput == null)
+
592 try
593 {
-
594 if (!preserveFile)
-
595 try
-
596 {
-
597 logger.LogTrace("Deleting temporary log file {path}...", outputFilePath);
-
598 await gameIOManager.DeleteFile(outputFilePath!, cancellationToken);
-
599 }
-
600 catch (Exception ex)
-
601 {
-
602 // this is expected on OD at time of the support changes.
-
603 // I've open a change to fix it: https://github.com/space-wizards/RobustToolbox/pull/4501
-
604 logger.LogWarning(ex, "Failed to delete server log file {outputFilePath}!", outputFilePath);
-
605 }
-
606 }
-
607
-
608 logger.LogTrace(
-
609 "Server Output:{newLine}{output}",
-
610 Environment.NewLine,
-
611 ddOutput);
-
612 }
-
613 catch (Exception ex)
-
614 {
-
615 logger.LogWarning(ex, "Error reading server output!");
-
616 }
-
617 }
+
594 var dreamDaemonLogBytes = await gameIOManager.ReadAllBytes(
+
595 outputFilePath!,
+
596 cancellationToken);
+
597
+
598 ddOutput = Encoding.UTF8.GetString(dreamDaemonLogBytes);
+
599 }
+
600 finally
+
601 {
+
602 if (!preserveFile)
+
603 try
+
604 {
+
605 logger.LogTrace("Deleting temporary log file {path}...", outputFilePath);
+
606 await gameIOManager.DeleteFile(outputFilePath!, cancellationToken);
+
607 }
+
608 catch (Exception ex)
+
609 {
+
610 // this is expected on OD at time of the support changes.
+
611 // I've open a change to fix it: https://github.com/space-wizards/RobustToolbox/pull/4501
+
612 logger.LogWarning(ex, "Failed to delete server log file {outputFilePath}!", outputFilePath);
+
613 }
+
614 }
+
615
+
616 logger.LogTrace(
+
617 "Server Output:{newLine}{output}",
+
618 Environment.NewLine,
+
619 ddOutput);
+
620 }
+
621 catch (Exception ex)
+
622 {
+
623 logger.LogWarning(ex, "Error reading server output!");
+
624 }
+
625 }
ValueTask< byte[]> ReadAllBytes(string path, CancellationToken cancellationToken)
Returns all the contents of a file at path as a byte array.
Task DeleteFile(string path, CancellationToken cancellationToken)
Deletes a file at path .
Task< string?> GetCombinedOutput(CancellationToken cancellationToken)
Get the stderr and stdout output of the IProcess.
-

References Tgstation.Server.Host.IO.IIOManager.DeleteFile(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.gameIOManager, Tgstation.Server.Host.System.IProcess.GetCombinedOutput(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, and Tgstation.Server.Host.IO.IIOManager.ReadAllBytes().

+

References Tgstation.Server.Host.IO.IIOManager.DeleteFile(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.gameIOManager, Tgstation.Server.Host.System.IProcess.GetCombinedOutput(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, and Tgstation.Server.Host.IO.IIOManager.ReadAllBytes().

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

Here is the call graph for this function:
@@ -1355,39 +1362,39 @@ Here is the caller graph for this function:
Returns
A ValueTask representing the running operation.
-

Definition at line 141 of file SessionControllerFactory.cs.

-
142 {
-
143 logger.LogTrace("Bind test: {port}", port);
-
144 try
-
145 {
-
146 // GIVE ME THE FUCKING PORT BACK WINDOWS!!!!
-
147 const int MaxAttempts = 5;
-
148 for (var i = 0; i < MaxAttempts; ++i)
-
149 try
-
150 {
-
151 SocketExtensions.BindTest(platformIdentifier, port, false, engineType == EngineType.OpenDream);
-
152 if (i > 0)
-
153 logger.LogDebug("Clearing the socket took {iterations} attempts :/", i + 1);
-
154
-
155 break;
-
156 }
-
157 catch (SocketException ex) when (platformIdentifier.IsWindows && ex.SocketErrorCode == SocketError.AddressAlreadyInUse && i < (MaxAttempts - 1))
-
158 {
-
159 await asyncDelayer.Delay(TimeSpan.FromSeconds(1), cancellationToken);
-
160 }
-
161 }
-
162 catch (SocketException ex) when (ex.SocketErrorCode == SocketError.AddressAlreadyInUse)
-
163 {
-
164 throw new JobException(ErrorCode.GameServerPortInUse, ex);
-
165 }
-
166 }
+

Definition at line 142 of file SessionControllerFactory.cs.

+
143 {
+
144 logger.LogTrace("Bind test: {port}", port);
+
145 try
+
146 {
+
147 // GIVE ME THE FUCKING PORT BACK WINDOWS!!!!
+
148 const int MaxAttempts = 5;
+
149 for (var i = 0; i < MaxAttempts; ++i)
+
150 try
+
151 {
+
152 SocketExtensions.BindTest(platformIdentifier, port, false, engineType == EngineType.OpenDream);
+
153 if (i > 0)
+
154 logger.LogDebug("Clearing the socket took {iterations} attempts :/", i + 1);
+
155
+
156 break;
+
157 }
+
158 catch (SocketException ex) when (platformIdentifier.IsWindows && ex.SocketErrorCode == SocketError.AddressAlreadyInUse && i < (MaxAttempts - 1))
+
159 {
+
160 await asyncDelayer.Delay(TimeSpan.FromSeconds(1), cancellationToken);
+
161 }
+
162 }
+
163 catch (SocketException ex) when (ex.SocketErrorCode == SocketError.AddressAlreadyInUse)
+
164 {
+
165 throw new JobException(ErrorCode.GameServerPortInUse, ex);
+
166 }
+
167 }
Extension methods for the Socket class.
static void BindTest(IPlatformIdentifier platformIdentifier, ushort port, bool includeIPv6, bool udp)
Attempt to exclusively bind to a given port .
ValueTask Delay(TimeSpan timeSpan, CancellationToken cancellationToken)
Create a Task that completes after a given timeSpan .
-

References Tgstation.Server.Host.Components.Session.SessionControllerFactory.asyncDelayer, Tgstation.Server.Host.Extensions.SocketExtensions.BindTest(), Tgstation.Server.Host.Utils.IAsyncDelayer.Delay(), Tgstation.Server.Host.System.IPlatformIdentifier.IsWindows, Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, and Tgstation.Server.Host.Components.Session.SessionControllerFactory.platformIdentifier.

+

References Tgstation.Server.Host.Components.Session.SessionControllerFactory.asyncDelayer, Tgstation.Server.Host.Extensions.SocketExtensions.BindTest(), Tgstation.Server.Host.Utils.IAsyncDelayer.Delay(), Tgstation.Server.Host.System.IPlatformIdentifier.IsWindows, Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, and Tgstation.Server.Host.Components.Session.SessionControllerFactory.platformIdentifier.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

Here is the call graph for this function:
@@ -1455,92 +1462,92 @@ Here is the caller graph for this function:

Implements Tgstation.Server.Host.Components.Session.ISessionControllerFactory.

-

Definition at line 398 of file SessionControllerFactory.cs.

-
401 {
-
402 ArgumentNullException.ThrowIfNull(reattachInformation);
-
403
-
404 logger.LogTrace("Begin session reattach...");
-
405 var byondTopicSender = topicClientFactory.CreateTopicClient(reattachInformation.TopicRequestTimeout);
-
406 var engineLock = await engineManager.UseExecutables(
-
407 reattachInformation.Dmb.EngineVersion,
-
408 null, // Doesn't matter if it's trusted or not on reattach
-
409 cancellationToken);
-
410
-
411 try
-
412 {
-
413 logger.LogDebug(
-
414 "Attaching to session PID: {pid}, CompileJob: {compileJobId}...",
-
415 reattachInformation.ProcessId,
-
416 reattachInformation.Dmb.CompileJob.Id);
-
417
-
418 var process = processExecutor.GetProcess(reattachInformation.ProcessId);
-
419 if (process == null)
-
420 return null;
-
421
-
422 try
-
423 {
-
424 if (engineLock.PromptsForNetworkAccess)
- -
426
-
427 var chatTrackingContext = chat.CreateTrackingContext();
-
428 try
-
429 {
-
430 var runtimeInformation = CreateRuntimeInformation(
-
431 reattachInformation.Dmb,
-
432 chatTrackingContext,
-
433 reattachInformation.LaunchSecurityLevel,
-
434 reattachInformation.LaunchVisibility,
-
435 false);
-
436 reattachInformation.SetRuntimeInformation(runtimeInformation);
-
437
-
438 var controller = new SessionController(
-
439 reattachInformation,
-
440 instance,
-
441 process,
-
442 engineLock,
-
443 byondTopicSender,
-
444 chatTrackingContext,
- -
446 chat,
- - - - -
451 loggerFactory.CreateLogger<SessionController>(),
-
452 () => ValueTask.CompletedTask,
-
453 null,
-
454 true,
-
455 false);
-
456
-
457 process = null;
-
458 engineLock = null;
-
459 chatTrackingContext = null;
-
460
-
461 return controller;
-
462 }
-
463 catch
-
464 {
-
465 chatTrackingContext?.Dispose();
-
466 throw;
-
467 }
-
468 }
-
469 catch
-
470 {
-
471 if (process != null)
-
472 await process.DisposeAsync();
-
473
-
474 throw;
-
475 }
-
476 }
-
477 catch
-
478 {
-
479 engineLock?.Dispose();
-
480 throw;
-
481 }
-
482 }
+

Definition at line 399 of file SessionControllerFactory.cs.

+
402 {
+
403 ArgumentNullException.ThrowIfNull(reattachInformation);
+
404
+
405 logger.LogTrace("Begin session reattach...");
+
406 var byondTopicSender = topicClientFactory.CreateTopicClient(reattachInformation.TopicRequestTimeout);
+
407 var engineLock = await engineManager.UseExecutables(
+
408 reattachInformation.Dmb.EngineVersion,
+
409 null, // Doesn't matter if it's trusted or not on reattach
+
410 cancellationToken);
+
411
+
412 try
+
413 {
+
414 logger.LogDebug(
+
415 "Attaching to session PID: {pid}, CompileJob: {compileJobId}...",
+
416 reattachInformation.ProcessId,
+
417 reattachInformation.Dmb.CompileJob.Id);
+
418
+
419 var process = processExecutor.GetProcess(reattachInformation.ProcessId);
+
420 if (process == null)
+
421 return null;
+
422
+
423 try
+
424 {
+
425 if (engineLock.PromptsForNetworkAccess)
+ +
427
+
428 var chatTrackingContext = chat.CreateTrackingContext();
+
429 try
+
430 {
+
431 var runtimeInformation = CreateRuntimeInformation(
+
432 reattachInformation.Dmb,
+
433 chatTrackingContext,
+
434 reattachInformation.LaunchSecurityLevel,
+
435 reattachInformation.LaunchVisibility,
+
436 false);
+
437 reattachInformation.SetRuntimeInformation(runtimeInformation);
+
438
+
439 var controller = new SessionController(
+
440 reattachInformation,
+
441 instance,
+
442 process,
+
443 engineLock,
+
444 byondTopicSender,
+
445 chatTrackingContext,
+ +
447 chat,
+ + + + +
452 loggerFactory.CreateLogger<SessionController>(),
+
453 () => ValueTask.CompletedTask,
+
454 null,
+
455 true,
+
456 false);
+
457
+
458 process = null;
+
459 engineLock = null;
+
460 chatTrackingContext = null;
+
461
+
462 return controller;
+
463 }
+
464 catch
+
465 {
+
466 chatTrackingContext?.Dispose();
+
467 throw;
+
468 }
+
469 }
+
470 catch
+
471 {
+
472 if (process != null)
+
473 await process.DisposeAsync();
+
474
+
475 throw;
+
476 }
+
477 }
+
478 catch
+
479 {
+
480 engineLock?.Dispose();
+
481 throw;
+
482 }
+
483 }
IProcess? GetProcess(int id)
Get a IProcess by id .
-

References Tgstation.Server.Host.Components.Session.SessionControllerFactory.assemblyInformationProvider, Tgstation.Server.Host.Components.Session.SessionControllerFactory.asyncDelayer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.bridgeRegistrar, Tgstation.Server.Host.Components.Session.SessionControllerFactory.chat, Tgstation.Server.Host.Components.Deployment.IDmbProvider.CompileJob, Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateRuntimeInformation(), Tgstation.Server.Host.Components.Session.ITopicClientFactory.CreateTopicClient(), Tgstation.Server.Host.Components.Chat.IChatManager.CreateTrackingContext(), Tgstation.Server.Host.Components.Session.ReattachInformation.Dmb, Tgstation.Server.Host.Components.Session.SessionControllerFactory.dotnetDumpService, Tgstation.Server.Host.Components.Session.SessionControllerFactory.engineManager, Tgstation.Server.Host.Components.Deployment.IDmbProvider.EngineVersion, Tgstation.Server.Host.Components.Session.SessionControllerFactory.eventConsumer, Tgstation.Server.Host.System.IProcessExecutor.GetProcess(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Components.Session.SessionControllerFactory.instance, Tgstation.Server.Host.Models.ReattachInformationBase.LaunchSecurityLevel, Tgstation.Server.Host.Models.ReattachInformationBase.LaunchVisibility, Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, Tgstation.Server.Host.Components.Session.SessionControllerFactory.loggerFactory, Tgstation.Server.Host.Components.Session.SessionControllerFactory.networkPromptReaper, Tgstation.Server.Host.Components.Session.SessionControllerFactory.processExecutor, Tgstation.Server.Host.Models.ReattachInformationBase.ProcessId, Tgstation.Server.Host.System.INetworkPromptReaper.RegisterProcess(), Tgstation.Server.Host.Components.Session.ReattachInformation.SetRuntimeInformation(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.topicClientFactory, Tgstation.Server.Host.Components.Session.ReattachInformation.TopicRequestTimeout, and Tgstation.Server.Host.Components.Engine.IEngineManager.UseExecutables().

+

References Tgstation.Server.Host.Components.Session.SessionControllerFactory.assemblyInformationProvider, Tgstation.Server.Host.Components.Session.SessionControllerFactory.asyncDelayer, Tgstation.Server.Host.Components.Session.SessionControllerFactory.bridgeRegistrar, Tgstation.Server.Host.Components.Session.SessionControllerFactory.chat, Tgstation.Server.Host.Components.Deployment.IDmbProvider.CompileJob, Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateRuntimeInformation(), Tgstation.Server.Host.Components.Session.ITopicClientFactory.CreateTopicClient(), Tgstation.Server.Host.Components.Chat.IChatManager.CreateTrackingContext(), Tgstation.Server.Host.Components.Session.ReattachInformation.Dmb, Tgstation.Server.Host.Components.Session.SessionControllerFactory.dotnetDumpService, Tgstation.Server.Host.Components.Session.SessionControllerFactory.engineManager, Tgstation.Server.Host.Components.Deployment.IDmbProvider.EngineVersion, Tgstation.Server.Host.Components.Session.SessionControllerFactory.eventConsumer, Tgstation.Server.Host.System.IProcessExecutor.GetProcess(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Components.Session.SessionControllerFactory.instance, Tgstation.Server.Host.Models.ReattachInformationBase.LaunchSecurityLevel, Tgstation.Server.Host.Models.ReattachInformationBase.LaunchVisibility, Tgstation.Server.Host.Components.Session.SessionControllerFactory.logger, Tgstation.Server.Host.Components.Session.SessionControllerFactory.loggerFactory, Tgstation.Server.Host.Components.Session.SessionControllerFactory.networkPromptReaper, Tgstation.Server.Host.Components.Session.SessionControllerFactory.processExecutor, Tgstation.Server.Host.Models.ReattachInformationBase.ProcessId, Tgstation.Server.Host.System.INetworkPromptReaper.RegisterProcess(), Tgstation.Server.Host.Components.Session.ReattachInformation.SetRuntimeInformation(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.topicClientFactory, Tgstation.Server.Host.Components.Session.ReattachInformation.TopicRequestTimeout, and Tgstation.Server.Host.Components.Engine.IEngineManager.UseExecutables().

Referenced by Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.InitController().

@@ -1601,9 +1608,9 @@ Here is the caller graph for this function:

The IAssemblyInformationProvider for the SessionControllerFactory.

-

Definition at line 62 of file SessionControllerFactory.cs.

+

Definition at line 63 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1629,9 +1636,9 @@ Here is the caller graph for this function:

The IAsyncDelayer for the SessionControllerFactory.

-

Definition at line 107 of file SessionControllerFactory.cs.

+

Definition at line 108 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1657,9 +1664,9 @@ Here is the caller graph for this function:

The IBridgeRegistrar for the SessionControllerFactory.

-

Definition at line 92 of file SessionControllerFactory.cs.

+

Definition at line 93 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1685,9 +1692,9 @@ Here is the caller graph for this function:

The IChatManager for the SessionControllerFactory.

-

Definition at line 77 of file SessionControllerFactory.cs.

+

Definition at line 78 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1713,9 +1720,9 @@ Here is the caller graph for this function:

The ICryptographySuite for the SessionControllerFactory.

-

Definition at line 57 of file SessionControllerFactory.cs.

+

Definition at line 58 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1741,9 +1748,9 @@ Here is the caller graph for this function:

The IIOManager for the Diagnostics directory.

-

Definition at line 72 of file SessionControllerFactory.cs.

+

Definition at line 73 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1769,9 +1776,9 @@ Here is the caller graph for this function:

The IDotnetDumpService for the SessionControllerFactory.

-

Definition at line 112 of file SessionControllerFactory.cs.

+

Definition at line 113 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1797,9 +1804,9 @@ Here is the caller graph for this function:

Path in Diagnostics folder to DreamDaemon logs.

-

Definition at line 37 of file SessionControllerFactory.cs.

+

Definition at line 38 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

@@ -1825,9 +1832,9 @@ Here is the caller graph for this function:

The IEngineManager for the SessionControllerFactory.

-

Definition at line 47 of file SessionControllerFactory.cs.

+

Definition at line 48 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1853,9 +1860,9 @@ Here is the caller graph for this function:

The IEventConsumer for the SessionControllerFactory.

-

Definition at line 102 of file SessionControllerFactory.cs.

+

Definition at line 103 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1881,9 +1888,9 @@ Here is the caller graph for this function:

The IIOManager for the Game directory.

-

Definition at line 67 of file SessionControllerFactory.cs.

+

Definition at line 68 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1909,9 +1916,9 @@ Here is the caller graph for this function:

The Api.Models.Instance for the SessionControllerFactory.

-

Definition at line 132 of file SessionControllerFactory.cs.

+

Definition at line 133 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1937,9 +1944,9 @@ Here is the caller graph for this function:

The ILogger for the SessionControllerFactory.

-

Definition at line 122 of file SessionControllerFactory.cs.

+

Definition at line 123 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1965,9 +1972,9 @@ Here is the caller graph for this function:

The ILoggerFactory for the SessionControllerFactory.

-

Definition at line 117 of file SessionControllerFactory.cs.

+

Definition at line 118 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -1993,9 +2000,9 @@ Here is the caller graph for this function:

The INetworkPromptReaper for the SessionControllerFactory.

-

Definition at line 82 of file SessionControllerFactory.cs.

+

Definition at line 83 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -2021,9 +2028,9 @@ Here is the caller graph for this function:

The IPlatformIdentifier for the SessionControllerFactory.

-

Definition at line 87 of file SessionControllerFactory.cs.

+

Definition at line 88 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -2049,9 +2056,9 @@ Here is the caller graph for this function:

The IProcessExecutor for the SessionControllerFactory.

-

Definition at line 42 of file SessionControllerFactory.cs.

+

Definition at line 43 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -2077,9 +2084,9 @@ Here is the caller graph for this function:

The IServerPortProvider for the SessionControllerFactory.

-

Definition at line 97 of file SessionControllerFactory.cs.

+

Definition at line 98 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -2105,9 +2112,9 @@ Here is the caller graph for this function:

The SessionConfiguration for the SessionControllerFactory.

-

Definition at line 127 of file SessionControllerFactory.cs.

+

Definition at line 128 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

@@ -2133,9 +2140,9 @@ Here is the caller graph for this function:

The ITopicClientFactory for the SessionControllerFactory.

-

Definition at line 52 of file SessionControllerFactory.cs.

+

Definition at line 53 of file SessionControllerFactory.cs.

-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.SessionControllerFactory().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_basic_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_basic_watchdog.html index f05bafa5ba..036e94c0f2 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_basic_watchdog.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_basic_watchdog.html @@ -1077,9 +1077,9 @@ Here is the caller graph for this function:
Tgstation.Server.Api.Models.EntityId.Id
virtual ? long Id
The ID of the entity.
Definition EntityId.cs:14
Tgstation.Server.Host.Components.Deployment.DmbFactory
Standard IDmbFactory.
Definition DmbFactory.cs:29
Tgstation.Server.Host.Components.Deployment.DmbFactory.LockNextDmb
IDmbProvider LockNextDmb(string reason, [CallerFilePath] string? callerFile=null, [CallerLineNumber] int callerLine=default)
Gets the next IDmbProvider. DmbAvailable is a precondition.A new IDmbProvider.
Definition DmbFactory.cs:195
-
Tgstation.Server.Host.Components.Session.SessionControllerFactory
Definition SessionControllerFactory.cs:33
-
Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew
async ValueTask< ISessionController > LaunchNew(IDmbProvider dmbProvider, IEngineExecutableLock? currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, CancellationToken cancellationToken)
Create a ISessionController from a freshly launch DreamDaemon instance.A ValueTask<TResult> resulting...
Definition SessionControllerFactory.cs:234
-
Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach
async ValueTask< ISessionController?> Reattach(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Create a ISessionController from an existing DreamDaemon instance.A ValueTask<TResult> resulting in a...
Definition SessionControllerFactory.cs:398
+
Tgstation.Server.Host.Components.Session.SessionControllerFactory
Definition SessionControllerFactory.cs:34
+
Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew
async ValueTask< ISessionController > LaunchNew(IDmbProvider dmbProvider, IEngineExecutableLock? currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, CancellationToken cancellationToken)
Create a ISessionController from a freshly launch DreamDaemon instance.A ValueTask<TResult> resulting...
Definition SessionControllerFactory.cs:235
+
Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach
async ValueTask< ISessionController?> Reattach(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Create a ISessionController from an existing DreamDaemon instance.A ValueTask<TResult> resulting in a...
Definition SessionControllerFactory.cs:399
Tgstation.Server.Host.Components.Session.SessionPersistor
Definition SessionPersistor.cs:18
Tgstation.Server.Host.Components.Session.SessionPersistor.Update
ValueTask Update(ReattachInformation reattachInformation, CancellationToken cancellationToken)
Update some reattachInformation .A ValueTask representing the running operation.
Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.SessionStartupPersist
virtual ValueTask SessionStartupPersist(CancellationToken cancellationToken)
Called to save the current Server into the WatchdogBase.SessionPersistor when initially launched.
@@ -1092,7 +1092,7 @@ Here is the caller graph for this function:
Tgstation.Server.Host.Components.Watchdog.WatchdogBase.SessionId
long? SessionId
An incrementing ID for representing current server execution.
Definition WatchdogBase.cs:38
Tgstation.Server.Host.Components.Session.ISessionController.ReattachInformation
ReattachInformation ReattachInformation
Gets the Session.ReattachInformation associated with the ISessionController.
Definition ISessionController.cs:50
-

References Tgstation.Server.Host.Components.Watchdog.WatchdogBase.ActiveLaunchParameters, Tgstation.Server.Host.Components.Watchdog.WatchdogBase.BeforeApplyDmb(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.CheckLaunchResult(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.DisposeAndNullControllers(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Deployment.DmbFactory.LockNextDmb(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.Logger, Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.PrepServerForLaunch(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.ReattachFailure(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.SessionId, Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.SessionStartupPersist(), and Tgstation.Server.Host.Components.Session.SessionPersistor.Update().

+

References Tgstation.Server.Host.Components.Watchdog.WatchdogBase.ActiveLaunchParameters, Tgstation.Server.Host.Components.Watchdog.WatchdogBase.BeforeApplyDmb(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.CheckLaunchResult(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.DisposeAndNullControllers(), Tgstation.Server.Api.Models.EntityId.Id, Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Deployment.DmbFactory.LockNextDmb(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.Logger, Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.PrepServerForLaunch(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.ReattachFailure(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.SessionId, Tgstation.Server.Host.Components.Watchdog.BasicWatchdog.SessionStartupPersist(), and Tgstation.Server.Host.Components.Session.SessionPersistor.Update().

Here is the call graph for this function:
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_watchdog_base.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_watchdog_base.html index b2a78ce6fe..9403fec018 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_watchdog_base.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_watchdog_base.html @@ -665,7 +665,7 @@ Private Attributes
262 Logger.LogTrace("Created watchdog");
263 }
Standard IDmbFactory.
Definition DmbFactory.cs:29
-
+
readonly IJobManager jobManager
The IJobManager for the WatchdogBase.
ILogger< WatchdogBase > Logger
The ILogger for the WatchdogBase.
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_general_configuration.html b/class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_general_configuration.html index 19a0360f43..dee860eab8 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_general_configuration.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_general_configuration.html @@ -377,7 +377,7 @@ Here is the caller graph for this function:

Definition at line 82 of file GeneralConfiguration.cs.

-

Referenced by Tgstation.Server.Host.Configuration.GeneralConfiguration.CheckCompatibility(), Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Setup.SetupWizard.SaveConfiguration().

+

Referenced by Tgstation.Server.Host.Configuration.GeneralConfiguration.CheckCompatibility(), Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Setup.SetupWizard.SaveConfiguration().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_session_configuration.html b/class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_session_configuration.html index 1bfd66ce1f..288a8009b7 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_session_configuration.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_session_configuration.html @@ -265,7 +265,7 @@ Static Private Attributes
21{ get; set; } = DefaultHighPriorityLiveDreamDaemon;
const bool DefaultHighPriorityLiveDreamDaemon
The default value for HighPriorityLiveDreamDaemon.
-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

@@ -294,7 +294,7 @@ Static Private Attributes

Definition at line 26 of file SessionConfiguration.cs.

26{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.AddDreamDaemonToFirewall(), Tgstation.Server.Host.Components.Engine.WindowsOpenDreamInstaller.AddServerFirewallException(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Engine.OpenDreamInstaller.Install().

+

Referenced by Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.AddDreamDaemonToFirewall(), Tgstation.Server.Host.Components.Engine.WindowsOpenDreamInstaller.AddServerFirewallException(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Engine.OpenDreamInstaller.Install().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_control_panel_controller.html b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_control_panel_controller.html index 98ad10933c..947206318a 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_control_panel_controller.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_control_panel_controller.html @@ -477,7 +477,7 @@ Here is the caller graph for this function:

Definition at line 31 of file ControlPanelController.cs.

-

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Controllers.ControlPanelController.GetChannelJson().

+

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Controllers.ControlPanelController.GetChannelJson().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application-members.html b/class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application-members.html index d211ebbdad..5165cf42ce 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application-members.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application-members.html @@ -83,7 +83,7 @@ $(function() { AddWatchdog< TSystemWatchdogFactory >(IServiceCollection services, IPostSetupServices postSetupServices)Tgstation.Server.Host.Core.Applicationprivatestatic Application(IConfiguration configuration, IWebHostEnvironment hostingEnvironment)Tgstation.Server.Host.Core.Application ConfigurationTgstation.Server.Host.Setup.SetupApplicationprotected - Configure(IApplicationBuilder applicationBuilder, IServerControl serverControl, ITokenFactory tokenFactory, IServerPortProvider serverPortProvider, IAssemblyInformationProvider assemblyInformationProvider, IOptions< ControlPanelConfiguration > controlPanelConfigurationOptions, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< SwarmConfiguration > swarmConfigurationOptions, IOptions< InternalConfiguration > internalConfigurationOptions, ILogger< Application > logger)Tgstation.Server.Host.Core.Application + Configure(IApplicationBuilder applicationBuilder, IServerControl serverControl, ITokenFactory tokenFactory, IServerPortProvider serverPortProvider, IAssemblyInformationProvider assemblyInformationProvider, IOptions< ControlPanelConfiguration > controlPanelConfigurationOptions, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< DatabaseConfiguration > databaseConfigurationOptions, IOptions< SwarmConfiguration > swarmConfigurationOptions, IOptions< InternalConfiguration > internalConfigurationOptions, ILogger< Application > logger)Tgstation.Server.Host.Core.Application ConfigureAuthenticationPipeline(IServiceCollection services)Tgstation.Server.Host.Core.Applicationprivate ConfigureHostedService(IServiceCollection services)Tgstation.Server.Host.Core.Applicationprotectedvirtual ConfigureServices(IServiceCollection services, IAssemblyInformationProvider assemblyInformationProvider, IIOManager ioManager, IPostSetupServices postSetupServices)Tgstation.Server.Host.Core.Application diff --git a/class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html b/class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html index 110eba6165..ae78559d7c 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html @@ -121,9 +121,9 @@ Public Member Functions void ConfigureServices (IServiceCollection services, IAssemblyInformationProvider assemblyInformationProvider, IIOManager ioManager, IPostSetupServices postSetupServices)  Configure the Application's services .
  -void Configure (IApplicationBuilder applicationBuilder, IServerControl serverControl, ITokenFactory tokenFactory, IServerPortProvider serverPortProvider, IAssemblyInformationProvider assemblyInformationProvider, IOptions< ControlPanelConfiguration > controlPanelConfigurationOptions, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< SwarmConfiguration > swarmConfigurationOptions, IOptions< InternalConfiguration > internalConfigurationOptions, ILogger< Application > logger) - Configure the Application.
-  +void Configure (IApplicationBuilder applicationBuilder, IServerControl serverControl, ITokenFactory tokenFactory, IServerPortProvider serverPortProvider, IAssemblyInformationProvider assemblyInformationProvider, IOptions< ControlPanelConfiguration > controlPanelConfigurationOptions, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< DatabaseConfiguration > databaseConfigurationOptions, IOptions< SwarmConfiguration > swarmConfigurationOptions, IOptions< InternalConfiguration > internalConfigurationOptions, ILogger< Application > logger) + Configure the Application.
- Public Member Functions inherited from Tgstation.Server.Host.Setup.SetupApplication  SetupApplication (IConfiguration configuration)  Initializes a new instance of the SetupApplication class.
@@ -303,8 +303,8 @@ Additional Inherited Members - -

◆ Configure()

+ +

◆ Configure()

@@ -351,6 +351,12 @@ Additional Inherited Members IOptions< GeneralConfigurationgeneralConfigurationOptions, + + + + IOptions< DatabaseConfiguration >  + databaseConfigurationOptions, + @@ -387,6 +393,7 @@ Additional Inherited Members assemblyInformationProviderThe IAssemblyInformationProvider. controlPanelConfigurationOptionsThe IOptions<TOptions> containing the ControlPanelConfiguration to use. generalConfigurationOptionsThe IOptions<TOptions> containing the GeneralConfiguration to use. + databaseConfigurationOptionsThe IOptions<TOptions> containing the DatabaseConfiguration to use. swarmConfigurationOptionsThe IOptions<TOptions> containing the SwarmConfiguration to use. internalConfigurationOptionsThe IOptions<TOptions> containing the InternalConfiguration to use. loggerThe Microsoft.Extensions.Logging.ILogger for the Application. @@ -394,165 +401,167 @@ Additional Inherited Members -

Definition at line 533 of file Application.cs.

-
544 {
-
545 ArgumentNullException.ThrowIfNull(applicationBuilder);
-
546 ArgumentNullException.ThrowIfNull(serverControl);
-
547
-
548 this.tokenFactory = tokenFactory ?? throw new ArgumentNullException(nameof(tokenFactory));
+

Definition at line 534 of file Application.cs.

+
546 {
+
547 ArgumentNullException.ThrowIfNull(applicationBuilder);
+
548 ArgumentNullException.ThrowIfNull(serverControl);
549
-
550 ArgumentNullException.ThrowIfNull(serverPortProvider);
-
551 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
-
552
-
553 var controlPanelConfiguration = controlPanelConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(controlPanelConfigurationOptions));
-
554 var generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions));
-
555 var swarmConfiguration = swarmConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(swarmConfigurationOptions));
-
556 var internalConfiguration = internalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(internalConfigurationOptions));
-
557
-
558 ArgumentNullException.ThrowIfNull(logger);
-
559
-
560 logger.LogDebug("Content Root: {contentRoot}", hostingEnvironment.ContentRootPath);
-
561 logger.LogTrace("Web Root: {webRoot}", hostingEnvironment.WebRootPath);
+
550 this.tokenFactory = tokenFactory ?? throw new ArgumentNullException(nameof(tokenFactory));
+
551
+
552 ArgumentNullException.ThrowIfNull(serverPortProvider);
+
553 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
+
554
+
555 var controlPanelConfiguration = controlPanelConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(controlPanelConfigurationOptions));
+
556 var generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions));
+
557 var databaseConfiguration = databaseConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(databaseConfigurationOptions));
+
558 var swarmConfiguration = swarmConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(swarmConfigurationOptions));
+
559 var internalConfiguration = internalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(internalConfigurationOptions));
+
560
+
561 ArgumentNullException.ThrowIfNull(logger);
562
-
563 // setup the HTTP request pipeline
-
564 // Add additional logging context to the request
-
565 applicationBuilder.UseAdditionalRequestLoggingContext(swarmConfiguration);
+
563 logger.LogDebug("Database provider: {provider}", databaseConfiguration.DatabaseType);
+
564 logger.LogDebug("Content Root: {contentRoot}", hostingEnvironment.ContentRootPath);
+
565 logger.LogTrace("Web Root: {webRoot}", hostingEnvironment.WebRootPath);
566
-
567 // Wrap exceptions in a 500 (ErrorMessage) response
-
568 applicationBuilder.UseServerErrorHandling();
-
569
-
570 // Add the X-Powered-By response header
-
571 applicationBuilder.UseServerBranding(assemblyInformationProvider);
-
572
-
573 // Add the X-Accel-Buffering response header
-
574 applicationBuilder.UseDisabledNginxProxyBuffering();
-
575
-
576 // suppress OperationCancelledExceptions, they are just aborted HTTP requests
-
577 applicationBuilder.UseCancelledRequestSuppression();
-
578
-
579 // 503 requests made while the application is starting
-
580 applicationBuilder.UseAsyncInitialization<IInstanceManager>(
-
581 (instanceManager, cancellationToken) => instanceManager.Ready.WaitAsync(cancellationToken));
+
567 // setup the HTTP request pipeline
+
568 // Add additional logging context to the request
+
569 applicationBuilder.UseAdditionalRequestLoggingContext(swarmConfiguration);
+
570
+
571 // Wrap exceptions in a 500 (ErrorMessage) response
+
572 applicationBuilder.UseServerErrorHandling();
+
573
+
574 // Add the X-Powered-By response header
+
575 applicationBuilder.UseServerBranding(assemblyInformationProvider);
+
576
+
577 // Add the X-Accel-Buffering response header
+
578 applicationBuilder.UseDisabledNginxProxyBuffering();
+
579
+
580 // suppress OperationCancelledExceptions, they are just aborted HTTP requests
+
581 applicationBuilder.UseCancelledRequestSuppression();
582
-
583 if (generalConfiguration.HostApiDocumentation)
-
584 {
-
585 var siteDocPath = Routes.ApiRoot + $"doc/{SwaggerConfiguration.DocumentName}.json";
-
586 if (!String.IsNullOrWhiteSpace(controlPanelConfiguration.PublicPath))
-
587 siteDocPath = controlPanelConfiguration.PublicPath.TrimEnd('/') + siteDocPath;
-
588
-
589 applicationBuilder.UseSwagger(options =>
-
590 {
-
591 options.RouteTemplate = Routes.ApiRoot + "doc/{documentName}.{json|yaml}";
-
592 });
-
593 applicationBuilder.UseSwaggerUI(options =>
+
583 // 503 requests made while the application is starting
+
584 applicationBuilder.UseAsyncInitialization<IInstanceManager>(
+
585 (instanceManager, cancellationToken) => instanceManager.Ready.WaitAsync(cancellationToken));
+
586
+
587 if (generalConfiguration.HostApiDocumentation)
+
588 {
+
589 var siteDocPath = Routes.ApiRoot + $"doc/{SwaggerConfiguration.DocumentName}.json";
+
590 if (!String.IsNullOrWhiteSpace(controlPanelConfiguration.PublicPath))
+
591 siteDocPath = controlPanelConfiguration.PublicPath.TrimEnd('/') + siteDocPath;
+
592
+
593 applicationBuilder.UseSwagger(options =>
594 {
- -
596 options.SwaggerEndpoint(siteDocPath, "TGS API");
-
597 });
-
598 logger.LogTrace("Swagger API generation enabled");
-
599 }
-
600
-
601 // spa loading if necessary
-
602 if (controlPanelConfiguration.Enable)
-
603 {
-
604 logger.LogInformation("Web control panel enabled.");
-
605 applicationBuilder.UseFileServer(new FileServerOptions
-
606 {
- -
608 EnableDefaultFiles = true,
-
609 EnableDirectoryBrowsing = false,
-
610 RedirectToAppendTrailingSlash = false,
-
611 });
-
612 }
-
613 else
-
614#if NO_WEBPANEL
-
615 logger.LogDebug("Web control panel was not included in TGS build!");
-
616#else
-
617 logger.LogTrace("Web control panel disabled!");
-
618#endif
-
619
-
620 // Enable endpoint routing
-
621 applicationBuilder.UseRouting();
-
622
-
623 // Set up CORS based on configuration if necessary
-
624 Action<CorsPolicyBuilder>? corsBuilder = null;
-
625 if (controlPanelConfiguration.AllowAnyOrigin)
-
626 {
-
627 logger.LogTrace("Access-Control-Allow-Origin: *");
-
628 corsBuilder = builder => builder.SetIsOriginAllowed(_ => true);
-
629 }
-
630 else if (controlPanelConfiguration.AllowedOrigins?.Count > 0)
-
631 {
-
632 logger.LogTrace("Access-Control-Allow-Origin: {allowedOrigins}", String.Join(',', controlPanelConfiguration.AllowedOrigins));
-
633 corsBuilder = builder => builder.WithOrigins([.. controlPanelConfiguration.AllowedOrigins]);
-
634 }
-
635
-
636 var originalBuilder = corsBuilder;
-
637 corsBuilder = builder =>
-
638 {
-
639 builder
-
640 .AllowAnyHeader()
-
641 .AllowAnyMethod()
-
642 .AllowCredentials()
-
643 .SetPreflightMaxAge(TimeSpan.FromDays(1));
-
644 originalBuilder?.Invoke(builder);
-
645 };
-
646 applicationBuilder.UseCors(corsBuilder);
-
647
-
648 // validate the API version
-
649 applicationBuilder.UseApiCompatibility();
-
650
-
651 // authenticate JWT tokens using our security pipeline if present, returns 401 if bad
-
652 applicationBuilder.UseAuthentication();
-
653
-
654 // enable authorization on endpoints
-
655 applicationBuilder.UseAuthorization();
-
656
-
657 // suppress and log database exceptions
-
658 applicationBuilder.UseDbConflictHandling();
-
659
-
660 // setup endpoints
-
661 applicationBuilder.UseEndpoints(endpoints =>
-
662 {
-
663 // access to the signalR jobs hub
-
664 endpoints.MapHub<JobsHub>(
- -
666 options =>
-
667 {
-
668 options.Transports = HttpTransportType.ServerSentEvents;
-
669 options.CloseOnAuthenticationExpiration = true;
-
670 })
-
671 .RequireAuthorization()
-
672 .RequireCors(corsBuilder);
-
673
-
674 // majority of handling is done in the controllers
-
675 endpoints.MapControllers();
-
676
-
677 if (internalConfiguration.EnableGraphQL)
-
678 {
-
679 logger.LogWarning("Enabling GraphQL. This API is experimental and breaking changes may occur at any time!");
-
680 var gqlOptions = new GraphQLServerOptions
-
681 {
-
682 EnableBatching = true,
-
683 };
-
684
-
685 gqlOptions.Tool.Enable = generalConfiguration.HostApiDocumentation;
-
686
-
687 endpoints
-
688 .MapGraphQL(Routes.GraphQL)
-
689 .WithOptions(gqlOptions);
-
690 }
-
691 });
-
692
-
693 // 404 anything that gets this far
-
694 // End of request pipeline setup
-
695 logger.LogTrace("Configuration version: {configVersion}", GeneralConfiguration.CurrentConfigVersion);
-
696 logger.LogTrace("DMAPI Interop version: {interopVersion}", DMApiConstants.InteropVersion);
-
697 if (controlPanelConfiguration.Enable)
-
698 logger.LogTrace("Webpanel version: {webCPVersion}", MasterVersionsAttribute.Instance.RawWebpanelVersion);
-
699
-
700 logger.LogDebug("Starting hosting on port {httpApiPort}...", serverPortProvider.HttpApiPort);
-
701 }
+
595 options.RouteTemplate = Routes.ApiRoot + "doc/{documentName}.{json|yaml}";
+
596 });
+
597 applicationBuilder.UseSwaggerUI(options =>
+
598 {
+ +
600 options.SwaggerEndpoint(siteDocPath, "TGS API");
+
601 });
+
602 logger.LogTrace("Swagger API generation enabled");
+
603 }
+
604
+
605 // spa loading if necessary
+
606 if (controlPanelConfiguration.Enable)
+
607 {
+
608 logger.LogInformation("Web control panel enabled.");
+
609 applicationBuilder.UseFileServer(new FileServerOptions
+
610 {
+ +
612 EnableDefaultFiles = true,
+
613 EnableDirectoryBrowsing = false,
+
614 RedirectToAppendTrailingSlash = false,
+
615 });
+
616 }
+
617 else
+
618#if NO_WEBPANEL
+
619 logger.LogDebug("Web control panel was not included in TGS build!");
+
620#else
+
621 logger.LogTrace("Web control panel disabled!");
+
622#endif
+
623
+
624 // Enable endpoint routing
+
625 applicationBuilder.UseRouting();
+
626
+
627 // Set up CORS based on configuration if necessary
+
628 Action<CorsPolicyBuilder>? corsBuilder = null;
+
629 if (controlPanelConfiguration.AllowAnyOrigin)
+
630 {
+
631 logger.LogTrace("Access-Control-Allow-Origin: *");
+
632 corsBuilder = builder => builder.SetIsOriginAllowed(_ => true);
+
633 }
+
634 else if (controlPanelConfiguration.AllowedOrigins?.Count > 0)
+
635 {
+
636 logger.LogTrace("Access-Control-Allow-Origin: {allowedOrigins}", String.Join(',', controlPanelConfiguration.AllowedOrigins));
+
637 corsBuilder = builder => builder.WithOrigins([.. controlPanelConfiguration.AllowedOrigins]);
+
638 }
+
639
+
640 var originalBuilder = corsBuilder;
+
641 corsBuilder = builder =>
+
642 {
+
643 builder
+
644 .AllowAnyHeader()
+
645 .AllowAnyMethod()
+
646 .AllowCredentials()
+
647 .SetPreflightMaxAge(TimeSpan.FromDays(1));
+
648 originalBuilder?.Invoke(builder);
+
649 };
+
650 applicationBuilder.UseCors(corsBuilder);
+
651
+
652 // validate the API version
+
653 applicationBuilder.UseApiCompatibility();
+
654
+
655 // authenticate JWT tokens using our security pipeline if present, returns 401 if bad
+
656 applicationBuilder.UseAuthentication();
+
657
+
658 // enable authorization on endpoints
+
659 applicationBuilder.UseAuthorization();
+
660
+
661 // suppress and log database exceptions
+
662 applicationBuilder.UseDbConflictHandling();
+
663
+
664 // setup endpoints
+
665 applicationBuilder.UseEndpoints(endpoints =>
+
666 {
+
667 // access to the signalR jobs hub
+
668 endpoints.MapHub<JobsHub>(
+ +
670 options =>
+
671 {
+
672 options.Transports = HttpTransportType.ServerSentEvents;
+
673 options.CloseOnAuthenticationExpiration = true;
+
674 })
+
675 .RequireAuthorization()
+
676 .RequireCors(corsBuilder);
+
677
+
678 // majority of handling is done in the controllers
+
679 endpoints.MapControllers();
+
680
+
681 if (internalConfiguration.EnableGraphQL)
+
682 {
+
683 logger.LogWarning("Enabling GraphQL. This API is experimental and breaking changes may occur at any time!");
+
684 var gqlOptions = new GraphQLServerOptions
+
685 {
+
686 EnableBatching = true,
+
687 };
+
688
+
689 gqlOptions.Tool.Enable = generalConfiguration.HostApiDocumentation;
+
690
+
691 endpoints
+
692 .MapGraphQL(Routes.GraphQL)
+
693 .WithOptions(gqlOptions);
+
694 }
+
695 });
+
696
+
697 // 404 anything that gets this far
+
698 // End of request pipeline setup
+
699 logger.LogTrace("Configuration version: {configVersion}", GeneralConfiguration.CurrentConfigVersion);
+
700 logger.LogTrace("DMAPI Interop version: {interopVersion}", DMApiConstants.InteropVersion);
+
701 if (controlPanelConfiguration.Enable)
+
702 logger.LogTrace("Webpanel version: {webCPVersion}", MasterVersionsAttribute.Instance.RawWebpanelVersion);
+
703
+
704 logger.LogDebug("Starting hosting on port {httpApiPort}...", serverPortProvider.HttpApiPort);
+
705 }
Routes to a server actions.
Definition Routes.cs:9
const string GraphQL
The GraphQL route.
Definition Routes.cs:18
const string JobsHub
The root route of all hubs.
Definition Routes.cs:118
@@ -608,64 +617,64 @@ Additional Inherited Members -

Definition at line 711 of file Application.cs.

-
712 {
-
713 services.AddHttpContextAccessor();
-
714 services.AddScoped<IApiHeadersProvider, ApiHeadersProvider>();
-
715 services.AddScoped<AuthenticationContextFactory>();
-
716 services.AddScoped<ITokenValidator>(provider => provider.GetRequiredService<AuthenticationContextFactory>());
-
717
-
718 // what if you
-
719 // wanted to just do this:
-
720 // return provider.GetRequiredService<AuthenticationContextFactory>().CurrentAuthenticationContext
-
721 // But M$ said
-
722 // https://stackoverflow.com/questions/56792917/scoped-services-in-asp-net-core-with-signalr-hubs
-
723 services.AddScoped(provider => (provider
-
724 .GetRequiredService<IHttpContextAccessor>()
-
725 .HttpContext ?? throw new InvalidOperationException($"Unable to resolve {nameof(IAuthenticationContext)} due to no HttpContext being available!"))
-
726 .RequestServices
-
727 .GetRequiredService<AuthenticationContextFactory>()
-
728 .CurrentAuthenticationContext);
- -
730
-
731 services
-
732 .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
-
733 .AddJwtBearer(jwtBearerOptions =>
-
734 {
-
735 // this line isn't actually run until the first request is made
-
736 // at that point tokenFactory will be populated
-
737 jwtBearerOptions.TokenValidationParameters = tokenFactory?.ValidationParameters ?? throw new InvalidOperationException("tokenFactory not initialized!");
-
738 jwtBearerOptions.MapInboundClaims = false;
-
739 jwtBearerOptions.Events = new JwtBearerEvents
-
740 {
-
741 OnMessageReceived = context =>
-
742 {
-
743 if (String.IsNullOrWhiteSpace(context.Token))
-
744 {
-
745 var accessToken = context.Request.Query["access_token"];
-
746 var path = context.HttpContext.Request.Path;
-
747
-
748 if (!String.IsNullOrWhiteSpace(accessToken) &&
-
749 path.StartsWithSegments(Routes.HubsRoot, StringComparison.OrdinalIgnoreCase))
-
750 {
-
751 context.Token = accessToken;
-
752 }
-
753 }
-
754
-
755 return Task.CompletedTask;
-
756 },
-
757 OnTokenValidated = context => context
-
758 .HttpContext
-
759 .RequestServices
-
760 .GetRequiredService<ITokenValidator>()
-
761 .ValidateToken(
-
762 context,
-
763 context
-
764 .HttpContext
-
765 .RequestAborted),
-
766 };
-
767 });
-
768 }
+

Definition at line 715 of file Application.cs.

+
716 {
+
717 services.AddHttpContextAccessor();
+
718 services.AddScoped<IApiHeadersProvider, ApiHeadersProvider>();
+
719 services.AddScoped<AuthenticationContextFactory>();
+
720 services.AddScoped<ITokenValidator>(provider => provider.GetRequiredService<AuthenticationContextFactory>());
+
721
+
722 // what if you
+
723 // wanted to just do this:
+
724 // return provider.GetRequiredService<AuthenticationContextFactory>().CurrentAuthenticationContext
+
725 // But M$ said
+
726 // https://stackoverflow.com/questions/56792917/scoped-services-in-asp-net-core-with-signalr-hubs
+
727 services.AddScoped(provider => (provider
+
728 .GetRequiredService<IHttpContextAccessor>()
+
729 .HttpContext ?? throw new InvalidOperationException($"Unable to resolve {nameof(IAuthenticationContext)} due to no HttpContext being available!"))
+
730 .RequestServices
+
731 .GetRequiredService<AuthenticationContextFactory>()
+
732 .CurrentAuthenticationContext);
+ +
734
+
735 services
+
736 .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
+
737 .AddJwtBearer(jwtBearerOptions =>
+
738 {
+
739 // this line isn't actually run until the first request is made
+
740 // at that point tokenFactory will be populated
+
741 jwtBearerOptions.TokenValidationParameters = tokenFactory?.ValidationParameters ?? throw new InvalidOperationException("tokenFactory not initialized!");
+
742 jwtBearerOptions.MapInboundClaims = false;
+
743 jwtBearerOptions.Events = new JwtBearerEvents
+
744 {
+
745 OnMessageReceived = context =>
+
746 {
+
747 if (String.IsNullOrWhiteSpace(context.Token))
+
748 {
+
749 var accessToken = context.Request.Query["access_token"];
+
750 var path = context.HttpContext.Request.Path;
+
751
+
752 if (!String.IsNullOrWhiteSpace(accessToken) &&
+
753 path.StartsWithSegments(Routes.HubsRoot, StringComparison.OrdinalIgnoreCase))
+
754 {
+
755 context.Token = accessToken;
+
756 }
+
757 }
+
758
+
759 return Task.CompletedTask;
+
760 },
+
761 OnTokenValidated = context => context
+
762 .HttpContext
+
763 .RequestServices
+
764 .GetRequiredService<ITokenValidator>()
+
765 .ValidateToken(
+
766 context,
+
767 context
+
768 .HttpContext
+
769 .RequestAborted),
+
770 };
+
771 });
+
772 }
const string HubsRoot
The root route of all hubs.
Definition Routes.cs:23
A IClaimsTransformation that maps Claims using an IAuthenticationContext.
@@ -1196,7 +1205,7 @@ Here is the caller graph for this function:
const ushort DefaultPageSize
Default size of Paginated<TModel> results.
void ConfigureServices(IServiceCollection services, IAssemblyInformationProvider assemblyInformationProvider, IIOManager ioManager, IPostSetupServices postSetupServices)
Configure the Application's services .
-
void ConfigureAuthenticationPipeline(IServiceCollection services)
Configure the services for the authentication pipeline.
+
void ConfigureAuthenticationPipeline(IServiceCollection services)
Configure the services for the authentication pipeline.
Backend abstract implementation of IDatabaseContext.
@@ -1300,7 +1309,7 @@ Here is the caller graph for this function:
EngineType
The type of engine the codebase is using.
Definition EngineType.cs:7
DatabaseType
Type of database to user.
-

References Tgstation.Server.Host.IO.IIOManager.ConcatPath(), Tgstation.Server.Host.Setup.SetupApplication.Configuration, Tgstation.Server.Host.Utils.SwaggerConfiguration.Configure(), Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline(), Tgstation.Server.Host.Core.Application.ConfigureServices(), Tgstation.Server.Host.Setup.IPostSetupServices.DatabaseConfiguration, Tgstation.Server.Host.Configuration.DatabaseConfiguration.DatabaseType, Tgstation.Server.Host.Controllers.ApiController.DefaultPageSize, Tgstation.Server.Host.Configuration.FileLoggingConfiguration.Disable, Tgstation.Server.Host.Setup.IPostSetupServices.ElasticsearchConfiguration, Tgstation.Server.Host.Setup.IPostSetupServices.FileLoggingConfiguration, Tgstation.Server.Host.Setup.IPostSetupServices.GeneralConfiguration, Tgstation.Server.Host.IO.IIOManager.GetDirectoryName(), Tgstation.Server.Host.IO.IIOManager.GetFileNameWithoutExtension(), Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory(), Tgstation.Server.Host.Configuration.GeneralConfiguration.HostApiDocumentation, Tgstation.Server.Host.Core.Application.hostingEnvironment, Tgstation.Server.Host.Setup.IPostSetupServices.InternalConfiguration, Tgstation.Server.Host.System.IPlatformIdentifier.IsWindows, Tgstation.Server.Host.Configuration.FileLoggingConfiguration.LogLevel, Tgstation.Server.Host.Controllers.ApiController.MaximumPageSize, Tgstation.Server.Host.Configuration.FileLoggingConfiguration.MicrosoftLogLevel, Tgstation.Server.Host.Setup.IPostSetupServices.PlatformIdentifier, Tgstation.Server.Host.Security.TgsAuthorizeAttribute.PolicyName, Tgstation.Server.Host.Configuration.GeneralConfiguration.RestartTimeoutMinutes, Tgstation.Server.Host.Utils.SerilogContextHelper.Template, Tgstation.Server.Host.Security.TgsAuthorizeAttribute.UserEnabledRole, and Tgstation.Server.Host.Configuration.InternalConfiguration.UsingSystemD.

+

References Tgstation.Server.Host.IO.IIOManager.ConcatPath(), Tgstation.Server.Host.Setup.SetupApplication.Configuration, Tgstation.Server.Host.Utils.SwaggerConfiguration.Configure(), Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline(), Tgstation.Server.Host.Core.Application.ConfigureServices(), Tgstation.Server.Host.Setup.IPostSetupServices.DatabaseConfiguration, Tgstation.Server.Host.Configuration.DatabaseConfiguration.DatabaseType, Tgstation.Server.Host.Controllers.ApiController.DefaultPageSize, Tgstation.Server.Host.Configuration.FileLoggingConfiguration.Disable, Tgstation.Server.Host.Setup.IPostSetupServices.ElasticsearchConfiguration, Tgstation.Server.Host.Setup.IPostSetupServices.FileLoggingConfiguration, Tgstation.Server.Host.Setup.IPostSetupServices.GeneralConfiguration, Tgstation.Server.Host.IO.IIOManager.GetDirectoryName(), Tgstation.Server.Host.IO.IIOManager.GetFileNameWithoutExtension(), Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory(), Tgstation.Server.Host.Configuration.GeneralConfiguration.HostApiDocumentation, Tgstation.Server.Host.Core.Application.hostingEnvironment, Tgstation.Server.Host.Setup.IPostSetupServices.InternalConfiguration, Tgstation.Server.Host.System.IPlatformIdentifier.IsWindows, Tgstation.Server.Host.Configuration.FileLoggingConfiguration.LogLevel, Tgstation.Server.Host.Controllers.ApiController.MaximumPageSize, Tgstation.Server.Host.Configuration.FileLoggingConfiguration.MicrosoftLogLevel, Tgstation.Server.Host.Setup.IPostSetupServices.PlatformIdentifier, Tgstation.Server.Host.Security.TgsAuthorizeAttribute.PolicyName, Tgstation.Server.Host.Configuration.GeneralConfiguration.RestartTimeoutMinutes, Tgstation.Server.Host.Utils.SerilogContextHelper.Template, Tgstation.Server.Host.Security.TgsAuthorizeAttribute.UserEnabledRole, and Tgstation.Server.Host.Configuration.InternalConfiguration.UsingSystemD.

Referenced by Tgstation.Server.Host.Core.Application.ConfigureServices().

@@ -1417,7 +1426,7 @@ Here is the caller graph for this function:

Definition at line 87 of file Application.cs.

-

Referenced by Tgstation.Server.Host.Core.Application.Application(), Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Core.Application.ConfigureServices().

+

Referenced by Tgstation.Server.Host.Core.Application.Application(), Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Core.Application.ConfigureServices().

@@ -1445,7 +1454,7 @@ Here is the caller graph for this function:

Definition at line 92 of file Application.cs.

-

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline().

+

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_socket_extensions.html b/class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_socket_extensions.html index c8ce8eb9d6..213b9c3d42 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_socket_extensions.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_socket_extensions.html @@ -191,7 +191,7 @@ Static Public Member Functions

References Tgstation.Server.Host.System.IPlatformIdentifier.IsWindows, and Tgstation.Server.Host.System.ProcessExecutor.WithProcessLaunchExclusivity().

-

Referenced by Tgstation.Server.Host.Utils.PortAllocator.GetAvailablePort(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), and Tgstation.Server.Host.Components.InstanceManager.PreflightChecks().

+

Referenced by Tgstation.Server.Host.Utils.PortAllocator.GetAvailablePort(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), and Tgstation.Server.Host.Components.InstanceManager.PreflightChecks().

Here is the call graph for this function:
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_error_message_filter.html b/class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_error_message_filter.html index 0ea64a0074..d7c6ce684e 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_error_message_filter.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_error_message_filter.html @@ -187,7 +187,7 @@ Private Attributes
38 return error;
39
40 var errorBuilder = ErrorBuilder.FromError(error)
-
41 .RemoveException()
+
41 .SetException(null)
42 .ClearExtensions();
43
44 const string ErrorCodeFieldName = "errorCode";
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_models_1_1_reattach_information_base.html b/class_tgstation_1_1_server_1_1_host_1_1_models_1_1_reattach_information_base.html index b802fc2a75..e4ad4ddde3 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_models_1_1_reattach_information_base.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_models_1_1_reattach_information_base.html @@ -372,7 +372,7 @@ Properties

Definition at line 42 of file ReattachInformationBase.cs.

42{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Models.ReattachInformationBase.ReattachInformationBase().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Models.ReattachInformationBase.ReattachInformationBase().

@@ -401,7 +401,7 @@ Properties

Definition at line 47 of file ReattachInformationBase.cs.

47{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Models.ReattachInformationBase.ReattachInformationBase().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Models.ReattachInformationBase.ReattachInformationBase().

@@ -459,7 +459,7 @@ Properties

Definition at line 22 of file ReattachInformationBase.cs.

22{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Models.ReattachInformationBase.ReattachInformationBase().

+

Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), and Tgstation.Server.Host.Models.ReattachInformationBase.ReattachInformationBase().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_properties_1_1_master_versions_attribute.html b/class_tgstation_1_1_server_1_1_host_1_1_properties_1_1_master_versions_attribute.html index e4f338d0a1..a9e8a91df7 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_properties_1_1_master_versions_attribute.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_properties_1_1_master_versions_attribute.html @@ -260,7 +260,7 @@ Properties

Definition at line 15 of file MasterVersionsAttribute.cs.

-

Referenced by Tgstation.Server.Host.Setup.SetupWizard.CheckRunWizard(), Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Controllers.SwarmController.Register(), Tgstation.Server.Host.Swarm.SwarmService.RegisterWithController(), and Tgstation.Server.Host.Extensions.ApplicationBuilderExtensions.UseApiCompatibility().

+

Referenced by Tgstation.Server.Host.Setup.SetupWizard.CheckRunWizard(), Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Controllers.SwarmController.Register(), Tgstation.Server.Host.Swarm.SwarmService.RegisterWithController(), and Tgstation.Server.Host.Extensions.ApplicationBuilderExtensions.UseApiCompatibility().

@@ -463,7 +463,7 @@ Properties

Definition at line 32 of file MasterVersionsAttribute.cs.

32{ get; }
-

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Properties.MasterVersionsAttribute.MasterVersionsAttribute().

+

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Properties.MasterVersionsAttribute.MasterVersionsAttribute().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_utils_1_1_swagger_configuration.html b/class_tgstation_1_1_server_1_1_host_1_1_utils_1_1_swagger_configuration.html index d97f0a386f..d8b589d11d 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_utils_1_1_swagger_configuration.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_utils_1_1_swagger_configuration.html @@ -1133,7 +1133,7 @@ Here is the caller graph for this function:

Definition at line 39 of file SwaggerConfiguration.cs.

-

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Controllers.RootController.Index().

+

Referenced by Tgstation.Server.Host.Core.Application.Configure(), and Tgstation.Server.Host.Controllers.RootController.Index().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_watchdog_1_1_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_watchdog_1_1_watchdog.html index 437372a708..5c5f57cf7d 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_watchdog_1_1_watchdog.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_watchdog_1_1_watchdog.html @@ -368,288 +368,292 @@ Private Attributes
177
178 var watchdogVersion = executingAssembly.GetName().Version?.Semver().ToString();
179
-
180 while (!cancellationToken.IsCancellationRequested)
+
180 var serializerOptions = new JsonSerializerOptions
181 {
-
182 if (!File.Exists(assemblyPath))
-
183 {
-
184 logger.LogCritical("Unable to locate host assembly!");
-
185 return false;
-
186 }
-
187
-
188 var fileVersion = FileVersionInfo.GetVersionInfo(assemblyPath).FileVersion;
-
189 if (fileVersion == null)
-
190 {
-
191 logger.LogCritical("Failed to parse version info from {assemblyPath}!", assemblyPath);
-
192 return false;
-
193 }
-
194
-
195 if (bootstrappable)
-
196 {
-
197 if (!Version.TryParse(fileVersion, out var bootstrappedVersion))
-
198 {
-
199 logger.LogCritical("Failed to parse bootstrapped version prior to launch: {fileVersion}", fileVersion);
-
200 }
-
201 else
+
182 WriteIndented = true,
+
183 };
+
184 while (!cancellationToken.IsCancellationRequested)
+
185 {
+
186 if (!File.Exists(assemblyPath))
+
187 {
+
188 logger.LogCritical("Unable to locate host assembly!");
+
189 return false;
+
190 }
+
191
+
192 var fileVersion = FileVersionInfo.GetVersionInfo(assemblyPath).FileVersion;
+
193 if (fileVersion == null)
+
194 {
+
195 logger.LogCritical("Failed to parse version info from {assemblyPath}!", assemblyPath);
+
196 return false;
+
197 }
+
198
+
199 if (bootstrappable)
+
200 {
+
201 if (!Version.TryParse(fileVersion, out var bootstrappedVersion))
202 {
-
203 // save bootstrapper settings
-
204 var oldUrl = bootstrapSettings?.ServerUpdatePackageUrlFormatter;
-
205 bootstrapSettings = new BootstrapSettings
-
206 {
-
207 TgsVersion = bootstrappedVersion.Semver(),
-
208 };
-
209
-
210 bootstrapSettings.ServerUpdatePackageUrlFormatter = oldUrl ?? bootstrapSettings.ServerUpdatePackageUrlFormatter;
-
211
-
212 Directory.CreateDirectory(homeDirectory);
-
213 await File.WriteAllTextAsync(
-
214 bootstrapperSettingsFile,
-
215 JsonSerializer.Serialize(
-
216 bootstrapSettings,
-
217 new JsonSerializerOptions
-
218 {
-
219 WriteIndented = true,
-
220 }),
-
221 cancellationToken);
-
222 }
-
223 }
-
224
-
225 using (logger.BeginScope("Host invocation"))
-
226 {
-
227 initialHostVersionTcs.SetResult(
-
228 Version.Parse(
-
229 fileVersion));
-
230
-
231 updateDirectory = Path.GetFullPath(Path.Combine(assemblyStoragePath, Guid.NewGuid().ToString()));
-
232 logger.LogInformation("Update path set to {updateDirectory}", updateDirectory);
-
233 using (var process = new Process())
-
234 {
-
235 process.StartInfo.FileName = dotnetPath;
-
236 process.StartInfo.WorkingDirectory = rootLocation; // for appsettings
-
237
-
238 var arguments = new List<string>
-
239 {
-
240 $"\"{assemblyPath}\"",
-
241 $"\"{updateDirectory}\"",
-
242 $"\"{watchdogVersion}\"",
-
243 };
-
244
-
245 if (args.Any(x => x.Equals("--attach-host-debugger", StringComparison.OrdinalIgnoreCase)))
-
246 arguments.Add("--attach-debugger");
-
247
-
248 if (runConfigure)
-
249 {
-
250 logger.LogInformation("Running configuration check and wizard...");
-
251 arguments.Add("--General:SetupWizardMode=Only");
-
252 }
-
253
-
254 arguments.AddRange(args);
-
255
-
256 process.StartInfo.Arguments = String.Join(" ", arguments);
-
257
-
258 process.StartInfo.UseShellExecute = false; // runs in the same console
-
259
-
260 var killedHostProcess = false;
-
261 try
-
262 {
-
263 Task? processTask = null;
-
264 (int, Task) StartProcess(string? additionalArg)
-
265 {
-
266 if (additionalArg != null)
-
267 process.StartInfo.Arguments += $" {additionalArg}";
-
268
-
269 logger.LogInformation("Launching host with arguments: {arguments}", process.StartInfo.Arguments);
+
203 logger.LogCritical("Failed to parse bootstrapped version prior to launch: {fileVersion}", fileVersion);
+
204 }
+
205 else
+
206 {
+
207 // save bootstrapper settings
+
208 var oldUrl = bootstrapSettings?.ServerUpdatePackageUrlFormatter;
+
209 bootstrapSettings = new BootstrapSettings
+
210 {
+
211 TgsVersion = bootstrappedVersion.Semver(),
+
212 };
+
213
+
214 bootstrapSettings.ServerUpdatePackageUrlFormatter = oldUrl ?? bootstrapSettings.ServerUpdatePackageUrlFormatter;
+
215
+
216 Directory.CreateDirectory(homeDirectory);
+
217 await File.WriteAllTextAsync(
+
218 bootstrapperSettingsFile,
+
219 JsonSerializer.Serialize(
+
220 bootstrapSettings,
+
221 serializerOptions),
+
222 cancellationToken);
+
223 }
+
224 }
+
225
+
226 using (logger.BeginScope("Host invocation"))
+
227 {
+
228 initialHostVersionTcs.SetResult(
+
229 Version.Parse(
+
230 fileVersion));
+
231
+
232 updateDirectory = Path.GetFullPath(Path.Combine(assemblyStoragePath, Guid.NewGuid().ToString()));
+
233 logger.LogInformation("Update path set to {updateDirectory}", updateDirectory);
+
234 using (var process = new Process())
+
235 {
+
236 process.StartInfo.FileName = dotnetPath;
+
237 process.StartInfo.WorkingDirectory = rootLocation; // for appsettings
+
238
+
239 var arguments = new List<string>
+
240 {
+
241 $"\"{assemblyPath}\"",
+
242 $"\"{updateDirectory}\"",
+
243 $"\"{watchdogVersion}\"",
+
244 };
+
245
+
246 if (args.Any(x => x.Equals("--attach-host-debugger", StringComparison.OrdinalIgnoreCase)))
+
247 arguments.Add("--attach-debugger");
+
248
+
249 if (runConfigure)
+
250 {
+
251 logger.LogInformation("Running configuration check and wizard...");
+
252 arguments.Add("--General:SetupWizardMode=Only");
+
253 }
+
254
+
255 arguments.AddRange(args);
+
256
+
257 process.StartInfo.Arguments = String.Join(" ", arguments);
+
258
+
259 process.StartInfo.UseShellExecute = false; // runs in the same console
+
260
+
261 var killedHostProcess = false;
+
262 var createdShutdownFile = false;
+
263 try
+
264 {
+
265 Task? processTask = null;
+
266 (int, Task) StartProcess(string? additionalArg)
+
267 {
+
268 if (additionalArg != null)
+
269 process.StartInfo.Arguments += $" {additionalArg}";
270
-
271 process.Start();
-
272 return (process.Id, processTask = process.WaitForExitAsync(cancellationToken));
-
273 }
-
274
-
275 using (var processCts = new CancellationTokenSource())
-
276 using (cancellationToken.Register(() =>
-
277 {
-
278 if (!Directory.Exists(updateDirectory))
-
279 {
-
280 logger.LogInformation("Cancellation requested! Writing shutdown lock file...");
-
281 File.WriteAllBytes(updateDirectory, Array.Empty<byte>());
-
282 }
-
283 else
-
284 logger.LogWarning("Cancellation requested while update directory exists!");
-
285
-
286 logger.LogInformation("Will force close host process if it doesn't exit in 10 seconds...");
-
287
-
288 try
-
289 {
-
290 processCts.CancelAfter(TimeSpan.FromSeconds(10));
-
291 }
-
292 catch (ObjectDisposedException ex)
-
293 {
-
294 // race conditions
-
295 logger.LogWarning(ex, "Error triggering timeout!");
-
296 }
-
297 }))
-
298 {
-
299 using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
-
300
-
301 var checkerTask = signalChecker.CheckSignals(StartProcess, cts.Token);
-
302 try
-
303 {
-
304 await processTask!;
-
305 }
-
306 finally
-
307 {
-
308 cts.Cancel();
-
309 await checkerTask;
-
310 }
-
311 }
-
312 }
-
313 catch (InvalidOperationException ex)
-
314 {
-
315 logger.LogWarning(ex, "Error triggering timeout!");
-
316 }
-
317 finally
-
318 {
-
319 try
-
320 {
-
321 if (!process.HasExited)
-
322 {
-
323 killedHostProcess = true;
-
324 process.Kill();
-
325 process.WaitForExit();
-
326 }
-
327 }
-
328 catch (InvalidOperationException ex2)
-
329 {
-
330 logger.LogWarning(ex2, "Error killing host process!");
-
331 }
-
332
-
333 try
-
334 {
-
335 if (File.Exists(updateDirectory))
-
336 File.Delete(updateDirectory);
-
337 }
-
338 catch (Exception ex2)
-
339 {
-
340 logger.LogWarning(ex2, "Error deleting comms file!");
-
341 }
-
342
-
343 logger.LogInformation("Host exited!");
-
344 }
-
345
-
346 if (runConfigure)
-
347 {
-
348 logger.LogInformation("Exiting due to configure intent...");
-
349 return true;
-
350 }
-
351
-
352 switch ((HostExitCode)process.ExitCode)
-
353 {
-
354 case HostExitCode.CompleteExecution:
-
355 return true;
-
356 case HostExitCode.RestartRequested:
-
357 if (!cancellationToken.IsCancellationRequested)
-
358 logger.LogInformation("Watchdog will restart host..."); // just a restart
-
359 else
-
360 logger.LogWarning("Host requested restart but watchdog shutdown is in progress!");
-
361 break;
-
362 case HostExitCode.Error:
-
363 // update path is now an exception document
-
364 logger.LogCritical("Host crashed, propagating exception dump...");
-
365
-
366 var data = "(NOT PRESENT)";
-
367 if (File.Exists(updateDirectory))
-
368 data = File.ReadAllText(updateDirectory);
+
271 logger.LogInformation("Launching host with arguments: {arguments}", process.StartInfo.Arguments);
+
272
+
273 process.Start();
+
274 return (process.Id, processTask = process.WaitForExitAsync(cancellationToken));
+
275 }
+
276
+
277 using (var processCts = new CancellationTokenSource())
+
278 using (cancellationToken.Register(() =>
+
279 {
+
280 if (!Directory.Exists(updateDirectory))
+
281 {
+
282 logger.LogInformation("Cancellation requested! Writing shutdown lock file...");
+
283 File.WriteAllBytes(updateDirectory, Array.Empty<byte>());
+
284 createdShutdownFile = true;
+
285 }
+
286 else
+
287 logger.LogWarning("Cancellation requested while update directory exists!");
+
288
+
289 logger.LogInformation("Will force close host process if it doesn't exit in 10 seconds...");
+
290
+
291 try
+
292 {
+
293 processCts.CancelAfter(TimeSpan.FromSeconds(10));
+
294 }
+
295 catch (ObjectDisposedException ex)
+
296 {
+
297 // race conditions
+
298 logger.LogWarning(ex, "Error triggering timeout!");
+
299 }
+
300 }))
+
301 {
+
302 using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
303
+
304 var checkerTask = signalChecker.CheckSignals(StartProcess, cts.Token);
+
305 try
+
306 {
+
307 await processTask!;
+
308 }
+
309 finally
+
310 {
+
311 cts.Cancel();
+
312 await checkerTask;
+
313 }
+
314 }
+
315 }
+
316 catch (InvalidOperationException ex)
+
317 {
+
318 logger.LogWarning(ex, "Error triggering timeout!");
+
319 }
+
320 finally
+
321 {
+
322 try
+
323 {
+
324 if (!process.HasExited)
+
325 {
+
326 killedHostProcess = true;
+
327 process.Kill();
+
328 process.WaitForExit();
+
329 }
+
330 }
+
331 catch (InvalidOperationException ex2)
+
332 {
+
333 logger.LogWarning(ex2, "Error killing host process!");
+
334 }
+
335
+
336 if (createdShutdownFile)
+
337 try
+
338 {
+
339 if (File.Exists(updateDirectory))
+
340 File.Delete(updateDirectory);
+
341 }
+
342 catch (Exception ex2)
+
343 {
+
344 logger.LogWarning(ex2, "Error deleting comms file!");
+
345 }
+
346
+
347 logger.LogInformation("Host exited!");
+
348 }
+
349
+
350 if (runConfigure)
+
351 {
+
352 logger.LogInformation("Exiting due to configure intent...");
+
353 return true;
+
354 }
+
355
+
356 switch ((HostExitCode)process.ExitCode)
+
357 {
+
358 case HostExitCode.CompleteExecution:
+
359 return true;
+
360 case HostExitCode.RestartRequested:
+
361 if (!cancellationToken.IsCancellationRequested)
+
362 logger.LogInformation("Watchdog will restart host..."); // just a restart
+
363 else
+
364 logger.LogWarning("Host requested restart but watchdog shutdown is in progress!");
+
365 break;
+
366 case HostExitCode.Error:
+
367 // update path is now an exception document
+
368 logger.LogCritical("Host crashed, propagating exception dump...");
369
-
370 try
-
371 {
-
372 File.Delete(updateDirectory);
-
373 }
-
374 catch (Exception e)
+
370 var data = "(NOT PRESENT)";
+
371 if (File.Exists(updateDirectory))
+
372 data = File.ReadAllText(updateDirectory);
+
373
+
374 try
375 {
-
376 logger.LogWarning(e, "Unable to delete exception dump file at {updateDirectory}!", updateDirectory);
+
376 File.Delete(updateDirectory);
377 }
-
378
-
379#pragma warning disable CA2201 // Do not raise reserved exception types
-
380 throw new Exception(String.Format(CultureInfo.InvariantCulture, "Host propagated exception: {0}", data));
-
381#pragma warning restore CA2201 // Do not raise reserved exception types
-
382 default:
-
383 if (killedHostProcess)
-
384 {
-
385 logger.LogWarning("Watchdog forced to kill host process!");
-
386 cancellationToken.ThrowIfCancellationRequested();
-
387 }
-
388
-
389#pragma warning disable CA2201 // Do not raise reserved exception types
-
390 throw new Exception(String.Format(CultureInfo.InvariantCulture, "Host crashed with exit code {0}!", process.ExitCode));
-
391#pragma warning restore CA2201 // Do not raise reserved exception types
-
392 }
-
393 }
-
394
-
395 // HEY YOU
-
396 // BE WARNED THAT IF YOU DEBUGGED THE HOST PROCESS THAT JUST LAUNCHED THE DEBUGGER WILL HOLD A LOCK ON THE DIRECTORY
-
397 // THIS MEANS THE FIRST DIRECTORY.MOVE WILL THROW
-
398 if (Directory.Exists(updateDirectory))
-
399 {
-
400 logger.LogInformation("Applying server update...");
-
401 if (isWindows)
-
402 {
-
403 // windows dick sucking resource unlocking
-
404 GC.Collect(Int32.MaxValue, GCCollectionMode.Default, true);
-
405 await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken).ConfigureAwait(false);
-
406 }
-
407
-
408 var tempPath = Path.Combine(assemblyStoragePath, Guid.NewGuid().ToString());
-
409 try
-
410 {
-
411 Directory.Move(defaultAssemblyPath, tempPath);
-
412 try
-
413 {
-
414 Directory.Move(updateDirectory, defaultAssemblyPath);
-
415 logger.LogInformation("Server update complete, deleting old server...");
-
416 try
-
417 {
-
418 Directory.Delete(tempPath, true);
-
419 }
-
420 catch (Exception e)
+
378 catch (Exception e)
+
379 {
+
380 logger.LogWarning(e, "Unable to delete exception dump file at {updateDirectory}!", updateDirectory);
+
381 }
+
382
+
383#pragma warning disable CA2201 // Do not raise reserved exception types
+
384 throw new Exception(String.Format(CultureInfo.InvariantCulture, "Host propagated exception: {0}", data));
+
385#pragma warning restore CA2201 // Do not raise reserved exception types
+
386 default:
+
387 if (killedHostProcess)
+
388 {
+
389 logger.LogWarning("Watchdog forced to kill host process!");
+
390 cancellationToken.ThrowIfCancellationRequested();
+
391 }
+
392
+
393#pragma warning disable CA2201 // Do not raise reserved exception types
+
394 throw new Exception(String.Format(CultureInfo.InvariantCulture, "Host crashed with exit code {0}!", process.ExitCode));
+
395#pragma warning restore CA2201 // Do not raise reserved exception types
+
396 }
+
397 }
+
398
+
399 // HEY YOU
+
400 // BE WARNED THAT IF YOU DEBUGGED THE HOST PROCESS THAT JUST LAUNCHED THE DEBUGGER WILL HOLD A LOCK ON THE DIRECTORY
+
401 // THIS MEANS THE FIRST DIRECTORY.MOVE WILL THROW
+
402 if (Directory.Exists(updateDirectory))
+
403 {
+
404 logger.LogInformation("Applying server update...");
+
405 if (isWindows)
+
406 {
+
407 // windows dick sucking resource unlocking
+
408 GC.Collect(Int32.MaxValue, GCCollectionMode.Default, true);
+
409 await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken).ConfigureAwait(false);
+
410 }
+
411
+
412 var tempPath = Path.Combine(assemblyStoragePath, Guid.NewGuid().ToString());
+
413 try
+
414 {
+
415 Directory.Move(defaultAssemblyPath, tempPath);
+
416 try
+
417 {
+
418 Directory.Move(updateDirectory, defaultAssemblyPath);
+
419 logger.LogInformation("Server update complete, deleting old server...");
+
420 try
421 {
-
422 logger.LogWarning(e, "Error deleting old server at {tempPath}!", tempPath);
+
422 Directory.Delete(tempPath, true);
423 }
-
424 }
-
425 catch (Exception e)
-
426 {
-
427 logger.LogError(e, "Error moving updated server directory, attempting revert!");
-
428 Directory.Delete(defaultAssemblyPath, true);
-
429 Directory.Move(tempPath, defaultAssemblyPath);
-
430 logger.LogInformation("Revert successful!");
-
431 }
-
432 }
-
433 catch (Exception e)
-
434 {
-
435 logger.LogWarning(e, "Failed to move out active host assembly!");
+
424 catch (Exception e)
+
425 {
+
426 logger.LogWarning(e, "Error deleting old server at {tempPath}!", tempPath);
+
427 }
+
428 }
+
429 catch (Exception e)
+
430 {
+
431 logger.LogError(e, "Error moving updated server directory, attempting revert!");
+
432 Directory.Delete(defaultAssemblyPath, true);
+
433 Directory.Move(tempPath, defaultAssemblyPath);
+
434 logger.LogInformation("Revert successful!");
+
435 }
436 }
-
437 }
-
438 }
-
439 }
-
440 }
-
441 catch (OperationCanceledException ex)
-
442 {
-
443 logger.LogDebug(ex, "Exiting due to cancellation...");
-
444 if (updateDirectory != null)
-
445 if (!Directory.Exists(updateDirectory))
-
446 File.Delete(updateDirectory);
-
447 else
-
448 Directory.Delete(updateDirectory, true);
-
449 }
-
450 catch (Exception ex)
-
451 {
-
452 logger.LogCritical(ex, "Host watchdog error!");
-
453 return false;
-
454 }
-
455 finally
-
456 {
-
457 logger.LogInformation("Host watchdog exiting...");
+
437 catch (Exception e)
+
438 {
+
439 logger.LogWarning(e, "Failed to move out active host assembly!");
+
440 }
+
441 }
+
442 }
+
443 }
+
444 }
+
445 catch (OperationCanceledException ex)
+
446 {
+
447 logger.LogDebug(ex, "Exiting due to cancellation...");
+
448 if (updateDirectory != null)
+
449 if (!Directory.Exists(updateDirectory))
+
450 File.Delete(updateDirectory);
+
451 else
+
452 Directory.Delete(updateDirectory, true);
+
453 }
+
454 catch (Exception ex)
+
455 {
+
456 logger.LogCritical(ex, "Host watchdog error!");
+
457 return false;
458 }
-
459
-
460 return true;
-
461 }
+
459 finally
+
460 {
+
461 logger.LogInformation("Host watchdog exiting...");
+
462 }
+
463
+
464 return true;
+
465 }
Exception
Tgstation.Server.Host.Watchdog.ISignalChecker.CheckSignals
ValueTask CheckSignals(Func< string?,(int Pid, Task ChildLifetime)> startChildAndGetPid, CancellationToken cancellationToken)
Relays signals received to the host process.
Tgstation.Server.Host.Common.HostExitCode
HostExitCode
Represents the exit code of the Host program.
Definition HostExitCode.cs:7
diff --git a/functions_c.html b/functions_c.html index 8a9ac1fbe8..ac400ec8a3 100644 --- a/functions_c.html +++ b/functions_c.html @@ -264,7 +264,7 @@ $(function() {
  • ConfigurationFileResponse() : Tgstation.Server.Client.Components.ConfigurationClient
  • ConfigurationRights : Tgstation.Server.Api.Models.Internal.InstancePermissionSet, Tgstation.Server.Host.GraphQL.Types.InstancePermissionSet
  • ConfigurationType : Tgstation.Server.Api.Models.Instance
  • -
  • Configure() : Tgstation.Server.Host.Core.Application, Tgstation.Server.Host.Utils.SwaggerConfiguration
  • +
  • Configure() : Tgstation.Server.Host.Core.Application, Tgstation.Server.Host.Utils.SwaggerConfiguration
  • ConfigureApplication() : Tgstation.Server.Host.Extensions.WebHostBuilderExtensions
  • ConfigureAuthenticationPipeline() : Tgstation.Server.Host.Core.Application
  • ConfigureControlPanel() : Tgstation.Server.Host.Setup.SetupWizard
  • diff --git a/functions_func_c.html b/functions_func_c.html index 4de96c5986..bc920f0ddd 100644 --- a/functions_func_c.html +++ b/functions_func_c.html @@ -154,7 +154,7 @@ $(function() {
  • ConfigurationClient() : Tgstation.Server.Client.Components.ConfigurationClient
  • ConfigurationController() : Tgstation.Server.Host.Controllers.ConfigurationController
  • ConfigurationFileResponse() : Tgstation.Server.Client.Components.ConfigurationClient
  • -
  • Configure() : Tgstation.Server.Host.Core.Application, Tgstation.Server.Host.Utils.SwaggerConfiguration
  • +
  • Configure() : Tgstation.Server.Host.Core.Application, Tgstation.Server.Host.Utils.SwaggerConfiguration
  • ConfigureApplication() : Tgstation.Server.Host.Extensions.WebHostBuilderExtensions
  • ConfigureAuthenticationPipeline() : Tgstation.Server.Host.Core.Application
  • ConfigureControlPanel() : Tgstation.Server.Host.Setup.SetupWizard
  • diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_i_chat_manager.html b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_i_chat_manager.html index 1d8fd53c82..3060056ded 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_i_chat_manager.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_i_chat_manager.html @@ -254,7 +254,7 @@ Public Member Functions

    Implemented in Tgstation.Server.Host.Components.Chat.ChatManager.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_i_dmb_provider.html b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_i_dmb_provider.html index 64386d938f..86fa2c9901 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_i_dmb_provider.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_i_dmb_provider.html @@ -209,7 +209,7 @@ Here is the caller graph for this function:

    Definition at line 25 of file IDmbProvider.cs.

    25{ get; }
    -

    Referenced by Tgstation.Server.Host.Components.Deployment.DeploymentLockManager.DeploymentLockManager(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.HandleNewDmbAvailable(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Components.Interop.Bridge.RuntimeInformation.RuntimeInformation(), Tgstation.Server.Host.Components.Session.SessionController.SendTopicRequest(), and Tgstation.Server.Host.Components.Session.SessionController.SessionController().

    +

    Referenced by Tgstation.Server.Host.Components.Deployment.DeploymentLockManager.DeploymentLockManager(), Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.HandleNewDmbAvailable(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach(), Tgstation.Server.Host.Components.Interop.Bridge.RuntimeInformation.RuntimeInformation(), Tgstation.Server.Host.Components.Session.SessionController.SendTopicRequest(), and Tgstation.Server.Host.Components.Session.SessionController.SessionController().

    @@ -240,7 +240,7 @@ Here is the caller graph for this function:

    Definition at line 20 of file IDmbProvider.cs.

    20{ get; }
    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Deployment.SymlinkDmbProvider.DoSwap(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionController.TriggerCustomEvent().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Deployment.SymlinkDmbProvider.DoSwap(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionController.TriggerCustomEvent().

    @@ -271,7 +271,7 @@ Here is the caller graph for this function:

    Definition at line 15 of file IDmbProvider.cs.

    15{ get; }
    -

    Referenced by Tgstation.Server.Host.Components.Engine.ByondInstallation.FormatServerArguments(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

    +

    Referenced by Tgstation.Server.Host.Components.Engine.ByondInstallation.FormatServerArguments(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

    @@ -302,7 +302,7 @@ Here is the caller graph for this function:

    Definition at line 30 of file IDmbProvider.cs.

    30{ get; }
    -

    Referenced by Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.CanUseSwappableDmbProvider(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    +

    Referenced by Tgstation.Server.Host.Components.Watchdog.AdvancedWatchdog.CanUseSwappableDmbProvider(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installation.html b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installation.html index a88fd8cc00..a63b148424 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installation.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installation.html @@ -268,7 +268,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.Components.Engine.ByondInstallation, Tgstation.Server.Host.Components.Engine.EngineExecutableLock, Tgstation.Server.Host.Components.Engine.EngineInstallationBase, and Tgstation.Server.Host.Components.Engine.OpenDreamInstallation.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

    Here is the caller graph for this function:
    @@ -331,7 +331,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.Components.Engine.EngineExecutableLock, and Tgstation.Server.Host.Components.Engine.EngineInstallationBase.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunDreamMaker().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunDreamMaker().

    Here is the caller graph for this function:
    @@ -499,7 +499,7 @@ Here is the caller graph for this function:

    Definition at line 37 of file IEngineInstallation.cs.

    37{ get; }
    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

    @@ -619,7 +619,7 @@ Here is the caller graph for this function:

    Definition at line 27 of file IEngineInstallation.cs.

    27{ get; }
    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess().

    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_manager.html b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_manager.html index c3de51d080..064aeacd43 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_manager.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_manager.html @@ -295,7 +295,7 @@ Properties

    Implemented in Tgstation.Server.Host.Components.Engine.EngineManager.

    -

    Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    +

    Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_events_1_1_i_event_consumer.html b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_events_1_1_i_event_consumer.html index f1cd00fdbf..2d287e4847 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_events_1_1_i_event_consumer.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_events_1_1_i_event_consumer.html @@ -242,7 +242,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.Components.Events.EventConsumer, Tgstation.Server.Host.Components.Events.NoopEventConsumer, Tgstation.Server.Host.Components.StaticFiles.Configuration, and Tgstation.Server.Host.Components.Watchdog.WatchdogBase.

    -

    Referenced by Tgstation.Server.Host.Components.Repository.Repository.AddTestMerge(), Tgstation.Server.Host.Components.Engine.EngineManager.AssertAndLockVersion(), Tgstation.Server.Host.Components.Instance.AutoUpdateAction(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.BeforeApplyDmb(), Tgstation.Server.Host.Components.Engine.EngineManager.ChangeVersion(), Tgstation.Server.Host.Components.Repository.Repository.CheckoutObject(), Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Deployment.DmbFactory.DeleteCompileJobContent(), Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess(), Tgstation.Server.Host.Components.Repository.Repository.FetchOrigin(), Tgstation.Server.Host.Components.Events.EventConsumer.HandleEvent(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.HandleEventImpl(), Tgstation.Server.Host.Components.Repository.Repository.MergeOrigin(), Tgstation.Server.Host.Components.Repository.Repository.ResetToOrigin(), and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob().

    +

    Referenced by Tgstation.Server.Host.Components.Repository.Repository.AddTestMerge(), Tgstation.Server.Host.Components.Engine.EngineManager.AssertAndLockVersion(), Tgstation.Server.Host.Components.Instance.AutoUpdateAction(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.BeforeApplyDmb(), Tgstation.Server.Host.Components.Engine.EngineManager.ChangeVersion(), Tgstation.Server.Host.Components.Repository.Repository.CheckoutObject(), Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Components.Deployment.DmbFactory.DeleteCompileJobContent(), Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess(), Tgstation.Server.Host.Components.Repository.Repository.FetchOrigin(), Tgstation.Server.Host.Components.Events.EventConsumer.HandleEvent(), Tgstation.Server.Host.Components.Watchdog.WatchdogBase.HandleEventImpl(), Tgstation.Server.Host.Components.Repository.Repository.MergeOrigin(), Tgstation.Server.Host.Components.Repository.Repository.ResetToOrigin(), and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_i_instance_manager.html b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_i_instance_manager.html index 77ed6da2ec..6e36cb7e36 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_i_instance_manager.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_i_instance_manager.html @@ -231,7 +231,7 @@ Here is the caller graph for this function:

    Definition at line 15 of file IInstanceManager.cs.

    15{ get; }
    -

    Referenced by Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Core.CommandPipeManager.ExecuteAsync(), and Tgstation.Server.Host.System.SystemDManager.ExecuteAsync().

    +

    Referenced by Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Core.CommandPipeManager.ExecuteAsync(), and Tgstation.Server.Host.System.SystemDManager.ExecuteAsync().

    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_i_topic_client_factory.html b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_i_topic_client_factory.html index 2a7034eed8..22119f2ea7 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_i_topic_client_factory.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_i_topic_client_factory.html @@ -132,7 +132,7 @@ Public Member Functions

    Implemented in Tgstation.Server.Host.Components.Session.TopicClientFactory.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_core_1_1_i_server_port_provider.html b/interface_tgstation_1_1_server_1_1_host_1_1_core_1_1_i_server_port_provider.html index 6f184825c6..cec6844f1c 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_core_1_1_i_server_port_provider.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_core_1_1_i_server_port_provider.html @@ -132,7 +132,7 @@ Properties

    Definition at line 11 of file IServerPortProvider.cs.

    11{ get; }
    -

    Referenced by Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Utils.PortAllocator.GetAvailablePort(), and Tgstation.Server.Host.Components.InstanceManager.PreflightChecks().

    +

    Referenced by Tgstation.Server.Host.Core.Application.Configure(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), Tgstation.Server.Host.Utils.PortAllocator.GetAvailablePort(), and Tgstation.Server.Host.Components.InstanceManager.PreflightChecks().

    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_i_o_1_1_i_i_o_manager.html b/interface_tgstation_1_1_server_1_1_host_1_1_i_o_1_1_i_i_o_manager.html index 19b980e7a3..0ef9f37652 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_i_o_1_1_i_i_o_manager.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_i_o_1_1_i_i_o_manager.html @@ -212,7 +212,7 @@ Public Member Functions

    Implemented in Tgstation.Server.Host.IO.DefaultIOManager.

    -

    Referenced by Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.AddDreamDaemonToFirewall(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.AdditionalCacheCleanFilePaths(), Tgstation.Server.Host.Components.Engine.ByondInstallerBase.CleanCache(), Tgstation.Server.Host.Core.Application.ConfigureServices(), Tgstation.Server.Host.Components.StaticFiles.Configuration.CopyDMFilesTo(), Tgstation.Server.Host.Controllers.InstanceController.Create(), Tgstation.Server.Host.Controllers.InstanceController.Delete(), Tgstation.Server.Host.Components.Engine.EngineManager.DeleteVersion(), Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Deployment.DmbFactory.FromCompileJobInternal(), Tgstation.Server.Host.Components.Engine.OpenDreamInstaller.GetExecutablePaths(), Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory(), Tgstation.Server.Host.Controllers.AdministrationController.GetLog(), Tgstation.Server.Host.Extensions.IOManagerExtensions.GetPathInLocalDirectory(), Tgstation.Server.Host.Components.Engine.OpenDreamInstaller.Install(), Tgstation.Server.Host.Components.Engine.PosixByondInstaller.Install(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.InstallDirectX(), Tgstation.Server.Host.Components.Engine.EngineManager.InstallVersionFiles(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Controllers.AdministrationController.ListLogs(), Tgstation.Server.Host.Components.Deployment.HardLinkDmbProvider.MirrorDirectoryImpl(), Tgstation.Server.Host.Components.InstanceManager.MoveInstance(), Tgstation.Server.Host.Components.Engine.PosixByondInstaller.PosixByondInstaller(), Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.SetNoPromptTrusted(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), Tgstation.Server.Host.Components.StaticFiles.Configuration.SymlinkStaticFilesTo(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.TrustDmbPath(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.UpgradeInstallation(), Tgstation.Server.Host.Setup.SetupWizard.ValidateNonExistantSqliteDBName(), and Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.WindowsByondInstaller().

    +

    Referenced by Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.AddDreamDaemonToFirewall(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.AdditionalCacheCleanFilePaths(), Tgstation.Server.Host.Components.Engine.ByondInstallerBase.CleanCache(), Tgstation.Server.Host.Core.Application.ConfigureServices(), Tgstation.Server.Host.Components.StaticFiles.Configuration.CopyDMFilesTo(), Tgstation.Server.Host.Controllers.InstanceController.Create(), Tgstation.Server.Host.Controllers.InstanceController.Delete(), Tgstation.Server.Host.Components.Engine.EngineManager.DeleteVersion(), Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Deployment.DmbFactory.FromCompileJobInternal(), Tgstation.Server.Host.Components.Engine.OpenDreamInstaller.GetExecutablePaths(), Tgstation.Server.Host.Configuration.FileLoggingConfiguration.GetFullLogDirectory(), Tgstation.Server.Host.Controllers.AdministrationController.GetLog(), Tgstation.Server.Host.Extensions.IOManagerExtensions.GetPathInLocalDirectory(), Tgstation.Server.Host.Components.Engine.OpenDreamInstaller.Install(), Tgstation.Server.Host.Components.Engine.PosixByondInstaller.Install(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.InstallDirectX(), Tgstation.Server.Host.Components.Engine.EngineManager.InstallVersionFiles(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Controllers.AdministrationController.ListLogs(), Tgstation.Server.Host.Components.Deployment.HardLinkDmbProvider.MirrorDirectoryImpl(), Tgstation.Server.Host.Components.InstanceManager.MoveInstance(), Tgstation.Server.Host.Components.Engine.PosixByondInstaller.PosixByondInstaller(), Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.SetNoPromptTrusted(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), Tgstation.Server.Host.Components.StaticFiles.Configuration.SymlinkStaticFilesTo(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.TrustDmbPath(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.UpgradeInstallation(), Tgstation.Server.Host.Setup.SetupWizard.ValidateNonExistantSqliteDBName(), and Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.WindowsByondInstaller().

    Here is the caller graph for this function:
    @@ -583,7 +583,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.IO.DefaultIOManager.

    -

    Referenced by Tgstation.Server.Host.Components.Engine.ByondInstallerBase.CleanCache(), Tgstation.Server.Host.Components.Deployment.DmbFactory.CleanUnusedCompileJobs(), Tgstation.Server.Host.Controllers.InstanceController.Create(), Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Engine.OpenDreamInstaller.Install(), Tgstation.Server.Host.Components.Engine.EngineManager.InstallVersionFiles(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Deployment.HardLinkDmbProvider.MirrorDirectoryImpl(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.SetNoPromptTrusted(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.TrustDmbPath(), and Tgstation.Server.Host.Setup.SetupWizard.ValidateNonExistantSqliteDBName().

    +

    Referenced by Tgstation.Server.Host.Components.Engine.ByondInstallerBase.CleanCache(), Tgstation.Server.Host.Components.Deployment.DmbFactory.CleanUnusedCompileJobs(), Tgstation.Server.Host.Controllers.InstanceController.Create(), Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Engine.OpenDreamInstaller.Install(), Tgstation.Server.Host.Components.Engine.EngineManager.InstallVersionFiles(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Deployment.HardLinkDmbProvider.MirrorDirectoryImpl(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.SetNoPromptTrusted(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.TrustDmbPath(), and Tgstation.Server.Host.Setup.SetupWizard.ValidateNonExistantSqliteDBName().

    Here is the caller graph for this function:
    @@ -788,7 +788,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.IO.DefaultIOManager.

    -

    Referenced by Tgstation.Server.Host.Components.Engine.ByondInstallerBase.CleanCache(), Tgstation.Server.Host.Controllers.InstanceController.Create(), Tgstation.Server.Host.Controllers.InstanceController.Delete(), Tgstation.Server.Host.Components.Engine.EngineManager.DeleteVersion(), Tgstation.Server.Host.Components.Deployment.SymlinkDmbProvider.DoSwap(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), Tgstation.Server.Host.Components.StaticFiles.Configuration.SymlinkStaticFilesTo(), Tgstation.Server.Host.Setup.SetupWizard.TestDatabaseConnection(), and Tgstation.Server.Host.Setup.SetupWizard.ValidateNonExistantSqliteDBName().

    +

    Referenced by Tgstation.Server.Host.Components.Engine.ByondInstallerBase.CleanCache(), Tgstation.Server.Host.Controllers.InstanceController.Create(), Tgstation.Server.Host.Controllers.InstanceController.Delete(), Tgstation.Server.Host.Components.Engine.EngineManager.DeleteVersion(), Tgstation.Server.Host.Components.Deployment.SymlinkDmbProvider.DoSwap(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), Tgstation.Server.Host.Components.StaticFiles.Configuration.SymlinkStaticFilesTo(), Tgstation.Server.Host.Setup.SetupWizard.TestDatabaseConnection(), and Tgstation.Server.Host.Setup.SetupWizard.ValidateNonExistantSqliteDBName().

    Here is the caller graph for this function:
    @@ -1726,7 +1726,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.IO.DefaultIOManager.

    -

    Referenced by Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Engine.EngineInstallationBase.LoadEnv(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), and Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.TrustDmbPath().

    +

    Referenced by Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Engine.EngineInstallationBase.LoadEnv(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), and Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.TrustDmbPath().

    Here is the caller graph for this function:
    @@ -1774,7 +1774,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.IO.DefaultIOManager.

    -

    Referenced by Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.AddDreamDaemonToFirewall(), Tgstation.Server.Host.Components.Engine.EngineManager.AssertAndLockVersion(), Tgstation.Server.Host.Components.Deployment.DmbFactory.CleanUnusedCompileJobs(), Tgstation.Server.Host.Components.Repository.RepositoryManager.CloneRepository(), Tgstation.Server.Host.Components.Repository.Repository.CopyTo(), Tgstation.Server.Host.ServerFactory.CreateServer(), Tgstation.Server.Host.Components.Repository.RepositoryManager.DeleteRepository(), Tgstation.Server.Host.Components.Deployment.SymlinkDmbProvider.DoSwap(), Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Engine.PosixByondInstaller.Install(), Tgstation.Server.Host.Components.Engine.EngineManager.InstallVersionFiles(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Repository.RepositoryManager.LoadRepository(), Tgstation.Server.Host.Components.Deployment.HardLinkDmbProvider.MirrorSourceDirectory(), Tgstation.Server.Host.Controllers.InstanceController.NormalizePath(), Tgstation.Server.Host.Components.Engine.PosixByondInstaller.PosixByondInstaller(), Tgstation.Server.Host.IO.ResolvingIOManager.ResolvingIOManager(), Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), Tgstation.Server.Host.Components.StaticFiles.Configuration.SymlinkStaticFilesTo(), Tgstation.Server.Host.Setup.SetupWizard.ValidateNonExistantSqliteDBName(), and Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.WindowsByondInstaller().

    +

    Referenced by Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.AddDreamDaemonToFirewall(), Tgstation.Server.Host.Components.Engine.EngineManager.AssertAndLockVersion(), Tgstation.Server.Host.Components.Deployment.DmbFactory.CleanUnusedCompileJobs(), Tgstation.Server.Host.Components.Repository.RepositoryManager.CloneRepository(), Tgstation.Server.Host.Components.Repository.Repository.CopyTo(), Tgstation.Server.Host.ServerFactory.CreateServer(), Tgstation.Server.Host.Components.Repository.RepositoryManager.DeleteRepository(), Tgstation.Server.Host.Components.Deployment.SymlinkDmbProvider.DoSwap(), Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Engine.PosixByondInstaller.Install(), Tgstation.Server.Host.Components.Engine.EngineManager.InstallVersionFiles(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew(), Tgstation.Server.Host.Components.Repository.RepositoryManager.LoadRepository(), Tgstation.Server.Host.Components.Deployment.HardLinkDmbProvider.MirrorSourceDirectory(), Tgstation.Server.Host.Controllers.InstanceController.NormalizePath(), Tgstation.Server.Host.Components.Engine.PosixByondInstaller.PosixByondInstaller(), Tgstation.Server.Host.IO.ResolvingIOManager.ResolvingIOManager(), Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob(), Tgstation.Server.Host.Components.Engine.EngineManager.StartAsync(), Tgstation.Server.Host.Components.StaticFiles.Configuration.SymlinkStaticFilesTo(), Tgstation.Server.Host.Setup.SetupWizard.ValidateNonExistantSqliteDBName(), and Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.WindowsByondInstaller().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_security_1_1_i_cryptography_suite.html b/interface_tgstation_1_1_server_1_1_host_1_1_security_1_1_i_cryptography_suite.html index 80d4149363..d9924745ea 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_security_1_1_i_cryptography_suite.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_security_1_1_i_cryptography_suite.html @@ -227,7 +227,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.Security.CryptographySuite.

    -

    Referenced by Tgstation.Server.Host.Transfer.FileTransferService.CreateDownload(), Tgstation.Server.Host.Transfer.FileTransferService.CreateUpload(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

    +

    Referenced by Tgstation.Server.Host.Transfer.FileTransferService.CreateDownload(), Tgstation.Server.Host.Transfer.FileTransferService.CreateUpload(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.LaunchNew().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_security_1_1_i_token_factory.html b/interface_tgstation_1_1_server_1_1_host_1_1_security_1_1_i_token_factory.html index 5fb88eec36..db5c00aedb 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_security_1_1_i_token_factory.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_security_1_1_i_token_factory.html @@ -226,7 +226,7 @@ Here is the caller graph for this function:

    Definition at line 22 of file ITokenFactory.cs.

    22{ get; }
    -

    Referenced by Tgstation.Server.Host.Authority.LoginAuthority.CacheSystemIdentity(), and Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline().

    +

    Referenced by Tgstation.Server.Host.Authority.LoginAuthority.CacheSystemIdentity(), and Tgstation.Server.Host.Core.Application.ConfigureAuthenticationPipeline().

    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_network_prompt_reaper.html b/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_network_prompt_reaper.html index 15c2857fcc..c15de9075a 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_network_prompt_reaper.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_network_prompt_reaper.html @@ -133,7 +133,7 @@ Public Member Functions

    Implemented in Tgstation.Server.Host.System.PosixNetworkPromptReaper, and Tgstation.Server.Host.System.WindowsNetworkPromptReaper.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_platform_identifier.html b/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_platform_identifier.html index cf3e5e0f56..f2e4a32bfa 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_platform_identifier.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_platform_identifier.html @@ -192,7 +192,7 @@ Here is the caller graph for this function:

    Definition at line 14 of file IPlatformIdentifier.cs.

    14{ get; }
    -

    Referenced by Tgstation.Server.Host.Extensions.SocketExtensions.BindTest(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning(), Tgstation.Server.Host.Core.Application.ConfigureServices(), Tgstation.Server.Host.System.DotnetHelper.GetDotnetPath(), Tgstation.Server.Host.Controllers.RootController.GetLogo(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.Components.InstanceManager.PreflightChecks(), Tgstation.Server.Host.Controllers.ApiRootController.ServerInfo(), and Tgstation.Server.Host.Setup.SetupWizard.TestDatabaseConnection().

    +

    Referenced by Tgstation.Server.Host.Extensions.SocketExtensions.BindTest(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning(), Tgstation.Server.Host.Core.Application.ConfigureServices(), Tgstation.Server.Host.System.DotnetHelper.GetDotnetPath(), Tgstation.Server.Host.Controllers.RootController.GetLogo(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.Components.InstanceManager.PreflightChecks(), Tgstation.Server.Host.Controllers.ApiRootController.ServerInfo(), and Tgstation.Server.Host.Setup.SetupWizard.TestDatabaseConnection().

    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_process.html b/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_process.html index f69d538aec..9b596dc204 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_process.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_process.html @@ -188,7 +188,7 @@ Properties

    Implemented in Tgstation.Server.Host.System.Process.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.LogDDOutput().

    Here is the caller graph for this function:
    @@ -226,7 +226,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.System.Process.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_process_executor.html b/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_process_executor.html index 26aaaf4eff..bbf863b368 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_process_executor.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_process_executor.html @@ -134,7 +134,7 @@ Public Member Functions

    Implemented in Tgstation.Server.Host.System.ProcessExecutor.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning().

    Here is the caller graph for this function:
    @@ -179,7 +179,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.System.ProcessExecutor.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionPersistor.Load(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionPersistor.Load(), and Tgstation.Server.Host.Components.Session.SessionControllerFactory.Reattach().

    Here is the caller graph for this function:
    @@ -226,7 +226,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.System.ProcessExecutor.

    -

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning().

    +

    Referenced by Tgstation.Server.Host.Components.Session.SessionControllerFactory.CheckPagerIsNotRunning().

    Here is the caller graph for this function:
    @@ -324,7 +324,7 @@ Here is the caller graph for this function:

    Implemented in Tgstation.Server.Host.System.ProcessExecutor.

    -

    Referenced by Tgstation.Server.Host.System.WindowsFirewallHelper.AddFirewallException(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.InstallDirectX().

    +

    Referenced by Tgstation.Server.Host.System.WindowsFirewallHelper.AddFirewallException(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.CreateGameServerProcess(), and Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.InstallDirectX().

    Here is the caller graph for this function:
    diff --git a/interface_tgstation_1_1_server_1_1_host_1_1_utils_1_1_i_async_delayer.html b/interface_tgstation_1_1_server_1_1_host_1_1_utils_1_1_i_async_delayer.html index 883c04d377..a41a2a10bd 100644 --- a/interface_tgstation_1_1_server_1_1_host_1_1_utils_1_1_i_async_delayer.html +++ b/interface_tgstation_1_1_server_1_1_host_1_1_utils_1_1_i_async_delayer.html @@ -143,7 +143,7 @@ Public Member Functions

    Implemented in Tgstation.Server.Host.Utils.AsyncDelayer.

    -

    Referenced by Tgstation.Server.Host.Swarm.SwarmService.CommitUpdate(), Tgstation.Server.Host.System.WindowsNetworkPromptReaper.ExecuteAsync(), Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Session.SessionController.GetLaunchResult(), Tgstation.Server.Host.Security.IdentityCacheObject.IdentityCacheObject(), Tgstation.Server.Host.Components.InstanceManager.InitializeSwarm(), Tgstation.Server.Host.Components.Deployment.DmbFactory.LogLockStates(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.Components.Session.SessionController.PostValidationShutdown(), Tgstation.Server.Host.Components.InstanceManager.ProcessBridgeRequest(), Tgstation.Server.Host.Transfer.FileTransferService.QueueExpiry(), Tgstation.Server.Host.Extensions.TopicClientExtensions.SendWithOptionalPriority(), Tgstation.Server.Host.System.PosixSignalHandler.SignalChecker(), and Tgstation.Server.Host.Components.Instance.TimerLoop().

    +

    Referenced by Tgstation.Server.Host.Swarm.SwarmService.CommitUpdate(), Tgstation.Server.Host.System.WindowsNetworkPromptReaper.ExecuteAsync(), Tgstation.Server.Host.Core.VersionReportingService.ExecuteAsync(), Tgstation.Server.Host.Components.Session.SessionController.GetLaunchResult(), Tgstation.Server.Host.Security.IdentityCacheObject.IdentityCacheObject(), Tgstation.Server.Host.Components.InstanceManager.InitializeSwarm(), Tgstation.Server.Host.Components.Deployment.DmbFactory.LogLockStates(), Tgstation.Server.Host.Components.Session.SessionControllerFactory.PortBindTest(), Tgstation.Server.Host.Components.Session.SessionController.PostValidationShutdown(), Tgstation.Server.Host.Components.InstanceManager.ProcessBridgeRequest(), Tgstation.Server.Host.Transfer.FileTransferService.QueueExpiry(), Tgstation.Server.Host.Extensions.TopicClientExtensions.SendWithOptionalPriority(), Tgstation.Server.Host.System.PosixSignalHandler.SignalChecker(), and Tgstation.Server.Host.Components.Instance.TimerLoop().

    Here is the caller graph for this function:
    diff --git a/namespace_tgstation_1_1_server_1_1_host_1_1_components_1_1_events.html b/namespace_tgstation_1_1_server_1_1_host_1_1_components_1_1_events.html index c26e6e3ad0..93e5904c6b 100644 --- a/namespace_tgstation_1_1_server_1_1_host_1_1_components_1_1_events.html +++ b/namespace_tgstation_1_1_server_1_1_host_1_1_components_1_1_events.html @@ -132,6 +132,8 @@ Enumerations , DeploymentCleanup , DeploymentActivation , EngineInstallComplete +,
    +  DreamDaemonPreLaunch
    }  Types of events. Mirror in tgs.dm. Prefer last listed name for script. More...
    @@ -209,6 +211,8 @@ Enumerations EngineInstallComplete 

    Parameters: Version being installed.

    +DreamDaemonPreLaunch 

    Before game server process is created. No parameters.

    +

    Definition at line 6 of file EventType.cs.

    @@ -296,7 +300,10 @@ Enumerations
    170
    174 [EventScript("EngineInstallComplete")]
    -
    176 }
    +
    176
    +
    180 [EventScript("DreamDaemonPreLaunch")]
    + +
    182 }
    @ EngineInstallComplete
    Parameters: Version being installed.
    @ RepoPreSynchronize
    Parameters: Absolute path to repository root.
    @ DreamDaemonLaunch
    After DD has launched. Not the same as WatchdogLaunch. Parameters: PID of DreamDaemon.
    @@ -306,6 +313,7 @@ Enumerations
    @ WatchdogDetach
    Before the watchdog detaches. No parameters.
    @ WatchdogShutdown
    Before the watchdog shuts down. Not sent for graceful shutdowns. No parameters.
    @ EngineInstallStart
    Parameters: Version being installed.
    +
    @ DreamDaemonPreLaunch
    Before game server process is created. No parameters.
    @ WorldEndProcess
    In between watchdog DreamDaemon restarts if the process has been force-ended by the DMAPI (TgsEndProc...
    @ PreDreamMaker
    After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path,...
    diff --git a/search/all_4.js b/search/all_4.js index 2667a2f7d3..55427439dc 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -296,7 +296,7 @@ var searchData= ['configurationrights_2ecs_293',['ConfigurationRights.cs',['../_configuration_rights_8cs.html',1,'']]], ['configurationtype_294',['configurationtype',['../namespace_tgstation_1_1_server_1_1_api_1_1_models.html#ab7bc96f211e450615be8669d10de2440',1,'Tgstation.Server.Api.Models.ConfigurationType'],['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_instance.html#a6183efad1d4344d06e59ea8bc2072a19',1,'Tgstation.Server.Api.Models.Instance.ConfigurationType']]], ['configurationtype_2ecs_295',['ConfigurationType.cs',['../_configuration_type_8cs.html',1,'']]], - ['configure_296',['configure',['../class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html#ae682a557e90d363305bb3ce39e290341',1,'Tgstation.Server.Host.Core.Application.Configure()'],['../class_tgstation_1_1_server_1_1_host_1_1_utils_1_1_swagger_configuration.html#a7a8de5dbb9ef96b2ced6739f2afe3549',1,'Tgstation.Server.Host.Utils.SwaggerConfiguration.Configure()']]], + ['configure_296',['configure',['../class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html#aec111c5d85d5cbf4c16dc1e3f612a08e',1,'Tgstation.Server.Host.Core.Application.Configure()'],['../class_tgstation_1_1_server_1_1_host_1_1_utils_1_1_swagger_configuration.html#a7a8de5dbb9ef96b2ced6739f2afe3549',1,'Tgstation.Server.Host.Utils.SwaggerConfiguration.Configure()']]], ['configureapplication_297',['ConfigureApplication',['../class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_web_host_builder_extensions.html#aa38e8d40574e3640929084c83f10b0f3',1,'Tgstation::Server::Host::Extensions::WebHostBuilderExtensions']]], ['configureauthenticationpipeline_298',['ConfigureAuthenticationPipeline',['../class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html#a7518c1b2ec58feaa1dffc13c9caf48af',1,'Tgstation::Server::Host::Core::Application']]], ['configurecontrolpanel_299',['ConfigureControlPanel',['../class_tgstation_1_1_server_1_1_host_1_1_setup_1_1_setup_wizard.html#a06627f62878cb4f2170946b40d3081b4',1,'Tgstation::Server::Host::Setup::SetupWizard']]], diff --git a/search/all_5.js b/search/all_5.js index bee24f5126..77020e27e5 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -198,9 +198,9 @@ var searchData= ['dotnetdumpservice_2ecs_195',['DotnetDumpService.cs',['../_dotnet_dump_service_8cs.html',1,'']]], ['dotnethelper_196',['DotnetHelper',['../class_tgstation_1_1_server_1_1_host_1_1_system_1_1_dotnet_helper.html',1,'Tgstation::Server::Host::System']]], ['dotnethelper_2ecs_197',['dotnethelper.cs',['../_tgstation_8_server_8_host_2_system_2_dotnet_helper_8cs.html',1,'(Global Namespace)'],['../_tgstation_8_server_8_host_8_common_2_dotnet_helper_8cs.html',1,'(Global Namespace)']]], - ['down_198',['down',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_dream_daemon_log_output.html#a5032645f86152b76845c885b959f9f47',1,'Tgstation.Server.Host.Database.Migrations.MSAddDreamDaemonLogOutput.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_map_threads.html#a3f34bd64c9a717443f1a0d342acc8199',1,'Tgstation.Server.Host.Database.Migrations.PGAddMapThreads.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_dream_daemon_log_output.html#a35dd84194074831de4ac4e0c9cc99ff3',1,'Tgstation.Server.Host.Database.Migrations.PGAddDreamDaemonLogOutput.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dream_daemon_log_output.html#a42db5f509064b47e78080bd777945e11',1,'Tgstation.Server.Host.Database.Migrations.SLAddDreamDaemonLogOutput.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_dream_daemon_log_output.html#a4902a7939f6c1d2605adeb3d095d20d3',1,'Tgstation.Server.Host.Database.Migrations.MYAddDreamDaemonLogOutput.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_reattach_info_initial_compile_job.html#a7a0194def27e16ffdf47064d3a16fb18',1,'Tgstation.Server.Host.Database.Migrations.MSAddReattachInfoInitialCompileJob.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_reattach_info_initial_compile_job.html#a04807000d5acdfdaaf272cdf1e4f52b0',1,'Tgstation.Server.Host.Database.Migrations.MYAddReattachInfoInitialCompileJob.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_reattach_info_initial_compile_job.html#a1a6bea91c5e4646ade9216f4ea23e7d3',1,'Tgstation.Server.Host.Database.Migrations.PGAddReattachInfoInitialCompileJob.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_reattach_info_initial_compile_job.html#ac0b527d4b7145dfca754c2c5717c0d73',1,'Tgstation.Server.Host.Database.Migrations.SLAddReattachInfoInitialCompileJob.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_system_channels.html#a20d5943798ff081b9fa83f4b2b0a29d7',1,'Tgstation.Server.Host.Database.Migrations.MSAddSystemChannels.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_system_channels.html#a5c4f44e7f15c17a81597cf5b52636b3b',1,'Tgstation.Server.Host.Database.Migrations.MYAddSystemChannels.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_system_channels.html#ae01bb5f80fa4d40b83c36c0df78aa985',1,'Tgstation.Server.Host.Database.Migrations.PGAddSystemChannels.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_system_channels.html#ae18f1426631652adbae9732fd0e712ac',1,'Tgstation.Server.Host.Database.Migrations.SLAddSystemChannels.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_rename_heartbeats_to_health_checks.html#a4fdb0459310f6acc6391f6943a6308b7',1,'Tgstation.Server.Host.Database.Migrations.MSRenameHeartbeatsToHealthChecks.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_rename_heartbeats_to_health_checks.html#a6a0dbcbcdb95d5de671c68e64ce6c977',1,'Tgstation.Server.Host.Database.Migrations.MYRenameHeartbeatsToHealthChecks.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_rename_heartbeats_to_health_checks.html#a5031dc2b3913fc1381eaa0a22700173d',1,'Tgstation.Server.Host.Database.Migrations.PGRenameHeartbeatsToHealthChecks.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rename_heartbeats_to_health_checks.html#aa275305a4ab4491d4a7aead10a8f729f',1,'Tgstation.Server.Host.Database.Migrations.SLRenameHeartbeatsToHealthChecks.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_map_threads.html#a346ad61c1d46e675a9dde808c8242fd5',1,'Tgstation.Server.Host.Database.Migrations.MSAddMapThreads.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_map_threads.html#ad1a51742df98529777023559b9993be3',1,'Tgstation.Server.Host.Database.Migrations.MYAddMapThreads.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_dream_daemon_visibility.html#a145ca97f7b1a29750baf1a5356ad8ebb',1,'Tgstation.Server.Host.Database.Migrations.MSAddDreamDaemonVisibility.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_update_submodules.html#aff24cc7770d5a27fd9b270fcfea02290',1,'Tgstation.Server.Host.Database.Migrations.MYAddUpdateSubmodules.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_topic_port.html#af574a2e6a613678951d2817907620e73',1,'Tgstation.Server.Host.Database.Migrations.SLAddTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_dream_daemon_visibility.html#a73916b4071664569d8bc70436e30f0ba',1,'Tgstation.Server.Host.Database.Migrations.MYAddDreamDaemonVisibility.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_dream_daemon_visibility.html#a16be50093e98c11d11bf40e00e884706',1,'Tgstation.Server.Host.Database.Migrations.PGAddDreamDaemonVisibility.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dream_daemon_visibility.html#aefea234060f8700825c468ff653eec98',1,'Tgstation.Server.Host.Database.Migrations.SLAddDreamDaemonVisibility.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_deployment_timeout.html#a475ae7d9938a8f9110a2e891fb5500bc',1,'Tgstation.Server.Host.Database.Migrations.MSAddDeploymentTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_deployment_timeout.html#a30d4d5f93d078d3551ea62044198e1f5',1,'Tgstation.Server.Host.Database.Migrations.MYAddDeploymentTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_deployment_timeout.html#a7b2ddbc7283ed4fdc338132d123f2e86',1,'Tgstation.Server.Host.Database.Migrations.PGAddDeploymentTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_timeout.html#a2048c1d61be219507e6c8c0794a99fbd',1,'Tgstation.Server.Host.Database.Migrations.SLAddDeploymentTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_update_submodules.html#a1c46bae7eabe788afcbf6c0912868a4f',1,'Tgstation.Server.Host.Database.Migrations.MSAddUpdateSubmodules.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_profiler.html#aa1244c043841b219647a93a8f43d91f4',1,'Tgstation.Server.Host.Database.Migrations.SLAddProfiler.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_update_submodules.html#a97e0fcf469b5a92281dc7937e4eb7772',1,'Tgstation.Server.Host.Database.Migrations.PGAddUpdateSubmodules.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_update_submodules.html#a8f70b8c6afdc7afa73dade4ab364949d',1,'Tgstation.Server.Host.Database.Migrations.SLAddUpdateSubmodules.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_dump_on_heartbeat_restart.html#a15933c51aba194ff998c6720ed6a3e23',1,'Tgstation.Server.Host.Database.Migrations.MSAddDumpOnHeartbeatRestart.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_dump_on_heartbeat_restart.html#a11f31fcf028d74a40c09316e3cb49ae4',1,'Tgstation.Server.Host.Database.Migrations.MYAddDumpOnHeartbeatRestart.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_dump_on_heartbeat_restart.html#a0c454008c2bf1ff5ac53c607b121dab7',1,'Tgstation.Server.Host.Database.Migrations.PGAddDumpOnHeartbeatRestart.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dump_on_heartbeat_restart.html#ac23e2e82056c63dcc8aa67c5ce34deff',1,'Tgstation.Server.Host.Database.Migrations.SLAddDumpOnHeartbeatRestart.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_profiler.html#a351e66b18720f874387b38a68dec67e6',1,'Tgstation.Server.Host.Database.Migrations.MSAddProfiler.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_profiler.html#add13d30010fb25d63edbc4ec16d9ff7e',1,'Tgstation.Server.Host.Database.Migrations.MYAddProfiler.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_profiler.html#aeda856f9eac6faa40dab99d6b9079dbb',1,'Tgstation.Server.Host.Database.Migrations.PGAddProfiler.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_open_dream_topic_port.html#aa6076c638896cb41e124a2a34da66612',1,'Tgstation.Server.Host.Database.Migrations.PGAddOpenDreamTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_switch_to64_bit_deployment_ids.html#a0e409f6c8ae5aff3b4391ac31a087482',1,'Tgstation.Server.Host.Database.Migrations.MSSwitchTo64BitDeploymentIds.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_switch_to64_bit_deployment_ids.html#a2a4106063c6d8f362f2c4db204d2a519',1,'Tgstation.Server.Host.Database.Migrations.MYSwitchTo64BitDeploymentIds.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_switch_to64_bit_deployment_ids.html#a9bdb0f1920bfbb9eaa7bee77ef01b859',1,'Tgstation.Server.Host.Database.Migrations.PGSwitchTo64BitDeploymentIds.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_cron_auto_updates.html#a05e599d1fc5a7084a124c37c5850b119',1,'Tgstation.Server.Host.Database.Migrations.MSAddCronAutoUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_cron_auto_updates.html#aefa4fee81ba88c92956f7a00bd912810',1,'Tgstation.Server.Host.Database.Migrations.MYAddCronAutoUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_cron_auto_updates.html#ac50f067786a0762c9d83cb6eb3122570',1,'Tgstation.Server.Host.Database.Migrations.PGAddCronAutoUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_cron_auto_updates.html#a699681b5d60d36ec61a37acff30d28b1',1,'Tgstation.Server.Host.Database.Migrations.SLAddCronAutoUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_open_dream_topic_port.html#a9d00b22c1c49341f960a07fec3865091',1,'Tgstation.Server.Host.Database.Migrations.MSAddOpenDreamTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_open_dream_topic_port.html#abc66d09e5dc3a8598c20e49c91574256',1,'Tgstation.Server.Host.Database.Migrations.MYAddOpenDreamTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_compiler_additional_arguments.html#acf813c258fd3fd0b03f51132dccccd5f',1,'Tgstation.Server.Host.Database.Migrations.SLAddCompilerAdditionalArguments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_open_dream_topic_port.html#a5c1c7bdfba4a080bec8a46f1fa242f22',1,'Tgstation.Server.Host.Database.Migrations.SLAddOpenDreamTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_d_m_api_validation_mode.html#a934cfbefd1deac1d58653ec4a73b1841',1,'Tgstation.Server.Host.Database.Migrations.MSAddDMApiValidationMode.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_d_m_api_validation_mode.html#a12df07eb4145eff5f3a33bec62bede8b',1,'Tgstation.Server.Host.Database.Migrations.MYAddDMApiValidationMode.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_d_m_api_validation_mode.html#a1eec9595aaa4cabbece0684c0a838658',1,'Tgstation.Server.Host.Database.Migrations.PGAddDMApiValidationMode.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_d_m_api_validation_mode.html#a0856d07a73d98cbe3d3852e947dd8e4f',1,'Tgstation.Server.Host.Database.Migrations.SLAddDMApiValidationMode.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_m_s_add_auto_start_and_stop.html#a039b84e21b4c2b1ea05323aa497e586d',1,'Tgstation.Server.Host.Database.MSAddAutoStartAndStop.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_m_y_add_auto_start_and_stop.html#a906e5626003b2e59a30eb92652e59ce1',1,'Tgstation.Server.Host.Database.MYAddAutoStartAndStop.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_p_g_add_auto_start_and_stop.html#a0d47096d00aa8e131cc2cb517dae2ebf',1,'Tgstation.Server.Host.Database.PGAddAutoStartAndStop.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_s_l_add_auto_start_and_stop.html#a6a7bdb98e51db1e877b4832985af555e',1,'Tgstation.Server.Host.Database.SLAddAutoStartAndStop.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_topic_port.html#a92a65f4ddb53a22fd2920add77949406',1,'Tgstation.Server.Host.Database.Migrations.MYAddTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_job_codes.html#a6e130501c8facad5aa358058c63776d3',1,'Tgstation.Server.Host.Database.Migrations.MSAddJobCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_job_codes.html#a6aa28d47010e5f38525922b58c89751b',1,'Tgstation.Server.Host.Database.Migrations.MYAddJobCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_job_codes.html#a9b0e7ee3373a2c69f6b0e2f2da2ead77',1,'Tgstation.Server.Host.Database.Migrations.PGAddJobCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_job_codes.html#a5df3301c917058e8f1e3b1cd9df506f4',1,'Tgstation.Server.Host.Database.Migrations.SLAddJobCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_rename_byond_columns_to_engine.html#a6fa319a2865fbbf91aa815b3cf86eec5',1,'Tgstation.Server.Host.Database.Migrations.MSRenameByondColumnsToEngine.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_rename_byond_columns_to_engine.html#a0cce6d691174d7e155ee9db35a8ee374',1,'Tgstation.Server.Host.Database.Migrations.MYRenameByondColumnsToEngine.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_rename_byond_columns_to_engine.html#a7dd45c58140a6cb47e5d1ff7d9dcda1b',1,'Tgstation.Server.Host.Database.Migrations.PGRenameByondColumnsToEngine.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rename_byond_columns_to_engine.html#a1a5661bde986ae90bab2b72c5381a211',1,'Tgstation.Server.Host.Database.Migrations.SLRenameByondColumnsToEngine.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_topic_port.html#a6b0cad6ff039b449861de6d56ca07512',1,'Tgstation.Server.Host.Database.Migrations.MSAddTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_map_threads.html#ab7a476965f174e56b4b36d93cad2fa86',1,'Tgstation.Server.Host.Database.Migrations.SLAddMapThreads.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_topic_port.html#ab2fa8fac29ea9bbeb4f1b91d5d30aa92',1,'Tgstation.Server.Host.Database.Migrations.PGAddTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_minidumps_option.html#a4bd455ca3f72da21d4115aea7d63cd0d',1,'Tgstation.Server.Host.Database.Migrations.MSAddMinidumpsOption.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_minidumps_option.html#a21f08a2242ec8f8dcb160dd39e8d89c7',1,'Tgstation.Server.Host.Database.Migrations.MYAddMinidumpsOption.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_minidumps_option.html#a582fca98f4842b8c97a13e89096395e0',1,'Tgstation.Server.Host.Database.Migrations.PGAddMinidumpsOption.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_minidumps_option.html#a4961cde79489492d645c258b79bc647e',1,'Tgstation.Server.Host.Database.Migrations.SLAddMinidumpsOption.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_normalize_version_updates.html#a527b018ebb9ca83167d81fcf868ffb43',1,'Tgstation.Server.Host.Database.Migrations.MYNormalizeVersionUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_compiler_additional_arguments.html#ad752ddd7e2a909a343ddc8d79ed8d63a',1,'Tgstation.Server.Host.Database.Migrations.MSAddCompilerAdditionalArguments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_compiler_additional_arguments.html#ab58de656c3e1cc3e92c4adefb93fccdd',1,'Tgstation.Server.Host.Database.Migrations.MYAddCompilerAdditionalArguments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_compiler_additional_arguments.html#aec26993f9ad9ea85809b3214a5569464',1,'Tgstation.Server.Host.Database.Migrations.PGAddCompilerAdditionalArguments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_heartbeat.html#a6699ad0573ce9d6809adb8275aef1e4e',1,'Tgstation.Server.Host.Database.Migrations.MSAddHeartbeat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_compile_job_d_m_api_version.html#ad60c496d7dec72affca9fac2b6131912',1,'Tgstation.Server.Host.Database.Migrations.MYAddCompileJobDMApiVersion.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_checkpoint_rebuild.html#ac0aa836ba342d7d6f1b775d354466f9a',1,'Tgstation.Server.Host.Database.Migrations.MYCheckpointRebuild.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_checkpoint_rebuild.html#ac2a807dd610b05efff586abc8fc5838c',1,'Tgstation.Server.Host.Database.Migrations.MSCheckpointRebuild.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_kill_jsons_add_d_m_api_version.html#a69f92765673944b287c528ef67ac628f',1,'Tgstation.Server.Host.Database.Migrations.MSKillJsonsAddDMApiVersion.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_kill_jsons_add_d_m_api_version.html#a051e7067eb3622929d13230cd270136a',1,'Tgstation.Server.Host.Database.Migrations.MYKillJsonsAddDMApiVersion.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_job_error_codes.html#a46fc331b3a27bdc1a3220d16991fd676',1,'Tgstation.Server.Host.Database.Migrations.MSAddJobErrorCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_job_error_codes.html#a2b882b3dc7c98709f515357624fd5c7d',1,'Tgstation.Server.Host.Database.Migrations.MYAddJobErrorCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_fix_cascading_delete.html#a7eb735e2cac5616d83e1fc523950a7a7',1,'Tgstation.Server.Host.Database.Migrations.MSFixCascadingDelete.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_fix_cascading_delete.html#a29c2467e5b26498fdc9be4daf32190e6',1,'Tgstation.Server.Host.Database.Migrations.MYFixCascadingDelete.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rebuild.html#af59f624ac40ca4702a4ceee81043c686',1,'Tgstation.Server.Host.Database.Migrations.SLRebuild.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_compile_job_d_m_api_version.html#a7a360f89edab0412cbf2522317c503a7',1,'Tgstation.Server.Host.Database.Migrations.MSAddCompileJobDMApiVersion.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_heartbeat.html#aecedd67bcc41584f5cc7ce3e43991e67',1,'Tgstation.Server.Host.Database.Migrations.MYAddHeartbeat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_heartbeat.html#a69db556c8f9816d01d3acfe308c32d0c',1,'Tgstation.Server.Host.Database.Migrations.SLAddHeartbeat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_soft_columns.html#a452f5f223962a06f1f4aac9250a98f7a',1,'Tgstation.Server.Host.Database.Migrations.SLRemoveSoftColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_remove_soft_columns.html#a00aad2d1a76c69ee46d01f608bec097b',1,'Tgstation.Server.Host.Database.Migrations.MSRemoveSoftColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_remove_soft_columns.html#a79220430d6011f769ff13ab1eece5edd',1,'Tgstation.Server.Host.Database.Migrations.MYRemoveSoftColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_create.html#a91b4446c41d615ad2513be276114100e',1,'Tgstation.Server.Host.Database.Migrations.PGCreate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_fix_foreign_key.html#a75a8797a59d9d37f823c1e8141c48148',1,'Tgstation.Server.Host.Database.Migrations.MYFixForeignKey.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_topic_timeout.html#a75b4c0c1b4dce285abf160ca70fa7ad0',1,'Tgstation.Server.Host.Database.Migrations.MSTopicTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_topic_timeout.html#a65160a3abe4072ec1f844961f600b6da',1,'Tgstation.Server.Host.Database.Migrations.MYTopicTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_toggle_testmerge_comments.html#ab73d9fedcdc7d6f8c1961984b60a6a74',1,'Tgstation.Server.Host.Database.Migrations.MSToggleTestmergeComments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_truncate_instance_names.html#a081062379730170cf61da9d0a380cbd5',1,'Tgstation.Server.Host.Database.Migrations.PGTruncateInstanceNames.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_initial_create.html#ae0f4cc2dd9b29f92f03b254d9411140b',1,'Tgstation.Server.Host.Database.Migrations.MSInitialCreate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_initial_create.html#a1c0857d0051862bb633c92aa072e47bd',1,'Tgstation.Server.Host.Database.Migrations.MYInitialCreate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_minimum_security.html#a70b456f851dae6ac43d48e2170d975ce',1,'Tgstation.Server.Host.Database.Migrations.MYAddMinimumSecurity.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_minimum_security.html#a9233da9df7bb2bbbf399a8225a77dfc5',1,'Tgstation.Server.Host.Database.Migrations.MSAddMinimumSecurity.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_nullable_and_foreign_key_cleanup.html#a8c179cd8b856bf48a6ae1b5134ed5caf',1,'Tgstation.Server.Host.Database.Migrations.MYNullableAndForeignKeyCleanup.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_nullable_and_foreign_key_cleanup.html#a5ce4a6670e01c07bc7e7f96e0834f201',1,'Tgstation.Server.Host.Database.Migrations.MSNullableAndForeignKeyCleanup.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_reattach_compile_job_required.html#ad16a541bed641a4299ad34c836d35381',1,'Tgstation.Server.Host.Database.Migrations.MSReattachCompileJobRequired.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_reattach_compile_job_required.html#a985c501dd70a3bde97d5664e32d6ec4f',1,'Tgstation.Server.Host.Database.Migrations.MYReattachCompileJobRequired.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_truncate_instance_names.html#a6c687e422cbb6324695f464708d7c57c',1,'Tgstation.Server.Host.Database.Migrations.MYTruncateInstanceNames.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_toggle_testmerge_comments.html#a65028283085928ece01cd4d4c43dd16c',1,'Tgstation.Server.Host.Database.Migrations.MYToggleTestmergeComments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_fix_rev_info_index.html#ae8f00fc3a07d7375ce51b8f129369088',1,'Tgstation.Server.Host.Database.Migrations.MSFixRevInfoIndex.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_fix_rev_info_index.html#a75731f56be6e24f24ad159d275e16665',1,'Tgstation.Server.Host.Database.Migrations.MYFixRevInfoIndex.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_chat_bot_reconnection_interval.html#a6d996f6780dc488d4cc7cb9d9804481e',1,'Tgstation.Server.Host.Database.Migrations.MSAddChatBotReconnectionInterval.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_chat_bot_reconnection_interval.html#a2ab30ec2c22da1e82035bd86885d0a19',1,'Tgstation.Server.Host.Database.Migrations.MYAddChatBotReconnectionInterval.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_tons_of_validation.html#a0fd91dc305f512bb5c3d2a9d9bda2d6e',1,'Tgstation.Server.Host.Database.Migrations.MSTonsOfValidation.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_tons_of_validation.html#a7913c39e263b705e6ed1ba52d4dad6ff',1,'Tgstation.Server.Host.Database.Migrations.MYTonsOfValidation.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_limits_on_chat.html#acf6df5f177b238f879d6cadc9c212c8f',1,'Tgstation.Server.Host.Database.Migrations.MSLimitsOnChat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_limits_on_chat.html#a08643345b848248c54f6391c441afca0',1,'Tgstation.Server.Host.Database.Migrations.MYLimitsOnChat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_user_groups.html#a7ffe4a9281389c09d1597ba9475e5899',1,'Tgstation.Server.Host.Database.Migrations.SLAddUserGroups.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_o_auth_connections.html#ab7f7b491161e7ec0877c35c34965b386',1,'Tgstation.Server.Host.Database.Migrations.PGAddOAuthConnections.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_o_auth_connections.html#a94239f678055402bb21d0a49b4f648dc',1,'Tgstation.Server.Host.Database.Migrations.SLAddOAuthConnections.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_generic_test_merging_update.html#afbd842ae8454a9131db057bd83fb664d',1,'Tgstation.Server.Host.Database.Migrations.MSGenericTestMergingUpdate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_generic_test_merging_update.html#ae151850e1e6ad1caf63006bb3cc3a9bc',1,'Tgstation.Server.Host.Database.Migrations.MYGenericTestMergingUpdate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_generic_test_merging_update.html#a3b922c51f87680d9027691a8da1cdd8f',1,'Tgstation.Server.Host.Database.Migrations.PGGenericTestMergingUpdate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_generic_test_merging_update.html#ab43c410e6c23725ed23a2e2ad5384dee',1,'Tgstation.Server.Host.Database.Migrations.SLGenericTestMergingUpdate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_user_groups.html#af4a163cf6bd40ec426c9748480721187',1,'Tgstation.Server.Host.Database.Migrations.MSAddUserGroups.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_user_groups.html#a63457a0af862f1cf4f2dfe77262a6010',1,'Tgstation.Server.Host.Database.Migrations.MYAddUserGroups.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_user_groups.html#a33cb7084f59303a65eb7e79ae380608e',1,'Tgstation.Server.Host.Database.Migrations.PGAddUserGroups.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_topic_timeout.html#a0310dac83148c1460053a83c2b0a453b',1,'Tgstation.Server.Host.Database.Migrations.PGTopicTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_swarm_identifer.html#aace109136ec566e858ba7c0c113e50c0',1,'Tgstation.Server.Host.Database.Migrations.MSAddSwarmIdentifer.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_swarm_identifer.html#aab6737d7ab7001adcdf7780cee59668b',1,'Tgstation.Server.Host.Database.Migrations.MYAddSwarmIdentifer.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_swarm_identifer.html#a1fd42fe5d9a9a8ca9bc0a47f53ebc721',1,'Tgstation.Server.Host.Database.Migrations.PGAddSwarmIdentifer.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_swarm_identifer.html#a3001539b2d0acf25b8a58ab564d9a841',1,'Tgstation.Server.Host.Database.Migrations.SLAddSwarmIdentifer.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_rev_info_timestamp.html#ad8dff3f8a44e248cd08b67007d56a43d',1,'Tgstation.Server.Host.Database.Migrations.MSAddRevInfoTimestamp.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_rev_info_timestamp.html#aa76c10cd1cc75f23f1b408117f0fb100',1,'Tgstation.Server.Host.Database.Migrations.MYAddRevInfoTimestamp.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_rev_info_timestamp.html#ae19c7c250224772dffc6c0d7c0592286',1,'Tgstation.Server.Host.Database.Migrations.PGAddRevInfoTimestamp.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_rev_info_timestamp.html#a2af0eb7f62625ccf37ffa0f276c77eac',1,'Tgstation.Server.Host.Database.Migrations.SLAddRevInfoTimestamp.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_truncate_instance_names.html#afc5a1aa922476ea34c5c39b3117b20ec',1,'Tgstation.Server.Host.Database.Migrations.MSTruncateInstanceNames.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_o_auth_connections.html#aac5f6fb1123e106cea7fe629dfdca682',1,'Tgstation.Server.Host.Database.Migrations.MSAddOAuthConnections.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_topic_timeout.html#a71446c05ce0d2861a0a22e2a01f4d89d',1,'Tgstation.Server.Host.Database.Migrations.SLTopicTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_remove_experimental_watchdog.html#aeba16375a98e6314db22f48319e39d81',1,'Tgstation.Server.Host.Database.Migrations.MSRemoveExperimentalWatchdog.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_remove_experimental_watchdog.html#a4ecfa74d942bf845f49016ed7e0c01c9',1,'Tgstation.Server.Host.Database.Migrations.MYRemoveExperimentalWatchdog.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_remove_experimental_watchdog.html#ae854d9dd602db118b7711bf4a13b9b2a',1,'Tgstation.Server.Host.Database.Migrations.PGRemoveExperimentalWatchdog.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_experimental_watchdog.html#aef19a599caab07370c84bf792cd002e8',1,'Tgstation.Server.Host.Database.Migrations.SLRemoveExperimentalWatchdog.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_allow_null_d_m_api.html#a3a5535279567ec208518789362b10040',1,'Tgstation.Server.Host.Database.Migrations.MSAllowNullDMApi.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_allow_null_d_m_api.html#a23b83a4977a3869e6a5c1975586411f1',1,'Tgstation.Server.Host.Database.Migrations.MYAllowNullDMApi.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_allow_null_d_m_api.html#a11dfa79c963f480b402307af39034789',1,'Tgstation.Server.Host.Database.Migrations.PGAllowNullDMApi.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_allow_null_d_m_api.html#a835767cfae5418f6e289022d1d1ae7ac',1,'Tgstation.Server.Host.Database.Migrations.SLAllowNullDMApi.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_deployment_columns.html#a792df9e381ad5ed9bfc9441487ce6ea0',1,'Tgstation.Server.Host.Database.Migrations.MSAddDeploymentColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_o_auth_connections.html#abfc65f8f237bb1bb3b2e78e9a9a6ecbf',1,'Tgstation.Server.Host.Database.Migrations.MYAddOAuthConnections.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_additional_d_d_parameters.html#a492e74a97aaa75a40aca3646042ae2b6',1,'Tgstation.Server.Host.Database.Migrations.SLAddAdditionalDDParameters.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_additional_d_d_parameters.html#ac672a7bb2d6d0f02762e6156d153f10e',1,'Tgstation.Server.Host.Database.Migrations.PGAddAdditionalDDParameters.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_additional_d_d_parameters.html#acf05c6ead3e2bd6456df283e414e395e',1,'Tgstation.Server.Host.Database.Migrations.MYAddAdditionalDDParameters.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_additional_d_d_parameters.html#a2a9792c533d89e8df71a121dff92e61d',1,'Tgstation.Server.Host.Database.Migrations.MSAddAdditionalDDParameters.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_columns.html#a64a95198e3162f8c094904534dbb3fd9',1,'Tgstation.Server.Host.Database.Migrations.SLAddDeploymentColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_deployment_columns.html#added5a11d65c29997659a974ce398362',1,'Tgstation.Server.Host.Database.Migrations.PGAddDeploymentColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_deployment_columns.html#a38931c1859c59c0991c6a54b2dff560c',1,'Tgstation.Server.Host.Database.Migrations.MYAddDeploymentColumns.Down()']]], + ['down_198',['down',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_dream_daemon_log_output.html#a5032645f86152b76845c885b959f9f47',1,'Tgstation.Server.Host.Database.Migrations.MSAddDreamDaemonLogOutput.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_map_threads.html#a3f34bd64c9a717443f1a0d342acc8199',1,'Tgstation.Server.Host.Database.Migrations.PGAddMapThreads.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_dream_daemon_log_output.html#a35dd84194074831de4ac4e0c9cc99ff3',1,'Tgstation.Server.Host.Database.Migrations.PGAddDreamDaemonLogOutput.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dream_daemon_log_output.html#a42db5f509064b47e78080bd777945e11',1,'Tgstation.Server.Host.Database.Migrations.SLAddDreamDaemonLogOutput.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_dream_daemon_log_output.html#a4902a7939f6c1d2605adeb3d095d20d3',1,'Tgstation.Server.Host.Database.Migrations.MYAddDreamDaemonLogOutput.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_reattach_info_initial_compile_job.html#a7a0194def27e16ffdf47064d3a16fb18',1,'Tgstation.Server.Host.Database.Migrations.MSAddReattachInfoInitialCompileJob.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_reattach_info_initial_compile_job.html#a04807000d5acdfdaaf272cdf1e4f52b0',1,'Tgstation.Server.Host.Database.Migrations.MYAddReattachInfoInitialCompileJob.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_reattach_info_initial_compile_job.html#a1a6bea91c5e4646ade9216f4ea23e7d3',1,'Tgstation.Server.Host.Database.Migrations.PGAddReattachInfoInitialCompileJob.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_reattach_info_initial_compile_job.html#ac0b527d4b7145dfca754c2c5717c0d73',1,'Tgstation.Server.Host.Database.Migrations.SLAddReattachInfoInitialCompileJob.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_system_channels.html#a20d5943798ff081b9fa83f4b2b0a29d7',1,'Tgstation.Server.Host.Database.Migrations.MSAddSystemChannels.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_system_channels.html#a5c4f44e7f15c17a81597cf5b52636b3b',1,'Tgstation.Server.Host.Database.Migrations.MYAddSystemChannels.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_system_channels.html#ae01bb5f80fa4d40b83c36c0df78aa985',1,'Tgstation.Server.Host.Database.Migrations.PGAddSystemChannels.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_system_channels.html#ae18f1426631652adbae9732fd0e712ac',1,'Tgstation.Server.Host.Database.Migrations.SLAddSystemChannels.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_rename_heartbeats_to_health_checks.html#a4fdb0459310f6acc6391f6943a6308b7',1,'Tgstation.Server.Host.Database.Migrations.MSRenameHeartbeatsToHealthChecks.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_rename_heartbeats_to_health_checks.html#a6a0dbcbcdb95d5de671c68e64ce6c977',1,'Tgstation.Server.Host.Database.Migrations.MYRenameHeartbeatsToHealthChecks.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_rename_heartbeats_to_health_checks.html#a5031dc2b3913fc1381eaa0a22700173d',1,'Tgstation.Server.Host.Database.Migrations.PGRenameHeartbeatsToHealthChecks.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rename_heartbeats_to_health_checks.html#aa275305a4ab4491d4a7aead10a8f729f',1,'Tgstation.Server.Host.Database.Migrations.SLRenameHeartbeatsToHealthChecks.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_map_threads.html#a346ad61c1d46e675a9dde808c8242fd5',1,'Tgstation.Server.Host.Database.Migrations.MSAddMapThreads.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_map_threads.html#ad1a51742df98529777023559b9993be3',1,'Tgstation.Server.Host.Database.Migrations.MYAddMapThreads.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_dream_daemon_visibility.html#a145ca97f7b1a29750baf1a5356ad8ebb',1,'Tgstation.Server.Host.Database.Migrations.MSAddDreamDaemonVisibility.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_update_submodules.html#aff24cc7770d5a27fd9b270fcfea02290',1,'Tgstation.Server.Host.Database.Migrations.MYAddUpdateSubmodules.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_minidumps_option.html#a4bd455ca3f72da21d4115aea7d63cd0d',1,'Tgstation.Server.Host.Database.Migrations.MSAddMinidumpsOption.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_dream_daemon_visibility.html#a73916b4071664569d8bc70436e30f0ba',1,'Tgstation.Server.Host.Database.Migrations.MYAddDreamDaemonVisibility.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_dream_daemon_visibility.html#a16be50093e98c11d11bf40e00e884706',1,'Tgstation.Server.Host.Database.Migrations.PGAddDreamDaemonVisibility.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dream_daemon_visibility.html#aefea234060f8700825c468ff653eec98',1,'Tgstation.Server.Host.Database.Migrations.SLAddDreamDaemonVisibility.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_deployment_timeout.html#a475ae7d9938a8f9110a2e891fb5500bc',1,'Tgstation.Server.Host.Database.Migrations.MSAddDeploymentTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_deployment_timeout.html#a30d4d5f93d078d3551ea62044198e1f5',1,'Tgstation.Server.Host.Database.Migrations.MYAddDeploymentTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_deployment_timeout.html#a7b2ddbc7283ed4fdc338132d123f2e86',1,'Tgstation.Server.Host.Database.Migrations.PGAddDeploymentTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_timeout.html#a2048c1d61be219507e6c8c0794a99fbd',1,'Tgstation.Server.Host.Database.Migrations.SLAddDeploymentTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_update_submodules.html#a1c46bae7eabe788afcbf6c0912868a4f',1,'Tgstation.Server.Host.Database.Migrations.MSAddUpdateSubmodules.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_profiler.html#aa1244c043841b219647a93a8f43d91f4',1,'Tgstation.Server.Host.Database.Migrations.SLAddProfiler.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_update_submodules.html#a97e0fcf469b5a92281dc7937e4eb7772',1,'Tgstation.Server.Host.Database.Migrations.PGAddUpdateSubmodules.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_update_submodules.html#a8f70b8c6afdc7afa73dade4ab364949d',1,'Tgstation.Server.Host.Database.Migrations.SLAddUpdateSubmodules.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_dump_on_heartbeat_restart.html#a15933c51aba194ff998c6720ed6a3e23',1,'Tgstation.Server.Host.Database.Migrations.MSAddDumpOnHeartbeatRestart.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_dump_on_heartbeat_restart.html#a11f31fcf028d74a40c09316e3cb49ae4',1,'Tgstation.Server.Host.Database.Migrations.MYAddDumpOnHeartbeatRestart.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_dump_on_heartbeat_restart.html#a0c454008c2bf1ff5ac53c607b121dab7',1,'Tgstation.Server.Host.Database.Migrations.PGAddDumpOnHeartbeatRestart.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dump_on_heartbeat_restart.html#ac23e2e82056c63dcc8aa67c5ce34deff',1,'Tgstation.Server.Host.Database.Migrations.SLAddDumpOnHeartbeatRestart.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_profiler.html#a351e66b18720f874387b38a68dec67e6',1,'Tgstation.Server.Host.Database.Migrations.MSAddProfiler.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_profiler.html#add13d30010fb25d63edbc4ec16d9ff7e',1,'Tgstation.Server.Host.Database.Migrations.MYAddProfiler.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_profiler.html#aeda856f9eac6faa40dab99d6b9079dbb',1,'Tgstation.Server.Host.Database.Migrations.PGAddProfiler.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_open_dream_topic_port.html#aa6076c638896cb41e124a2a34da66612',1,'Tgstation.Server.Host.Database.Migrations.PGAddOpenDreamTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_switch_to64_bit_deployment_ids.html#a0e409f6c8ae5aff3b4391ac31a087482',1,'Tgstation.Server.Host.Database.Migrations.MSSwitchTo64BitDeploymentIds.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_switch_to64_bit_deployment_ids.html#a2a4106063c6d8f362f2c4db204d2a519',1,'Tgstation.Server.Host.Database.Migrations.MYSwitchTo64BitDeploymentIds.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_switch_to64_bit_deployment_ids.html#a9bdb0f1920bfbb9eaa7bee77ef01b859',1,'Tgstation.Server.Host.Database.Migrations.PGSwitchTo64BitDeploymentIds.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_cron_auto_updates.html#a05e599d1fc5a7084a124c37c5850b119',1,'Tgstation.Server.Host.Database.Migrations.MSAddCronAutoUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_cron_auto_updates.html#aefa4fee81ba88c92956f7a00bd912810',1,'Tgstation.Server.Host.Database.Migrations.MYAddCronAutoUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_cron_auto_updates.html#ac50f067786a0762c9d83cb6eb3122570',1,'Tgstation.Server.Host.Database.Migrations.PGAddCronAutoUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_cron_auto_updates.html#a699681b5d60d36ec61a37acff30d28b1',1,'Tgstation.Server.Host.Database.Migrations.SLAddCronAutoUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_open_dream_topic_port.html#a9d00b22c1c49341f960a07fec3865091',1,'Tgstation.Server.Host.Database.Migrations.MSAddOpenDreamTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_open_dream_topic_port.html#abc66d09e5dc3a8598c20e49c91574256',1,'Tgstation.Server.Host.Database.Migrations.MYAddOpenDreamTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_compiler_additional_arguments.html#acf813c258fd3fd0b03f51132dccccd5f',1,'Tgstation.Server.Host.Database.Migrations.SLAddCompilerAdditionalArguments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_open_dream_topic_port.html#a5c1c7bdfba4a080bec8a46f1fa242f22',1,'Tgstation.Server.Host.Database.Migrations.SLAddOpenDreamTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_d_m_api_validation_mode.html#a934cfbefd1deac1d58653ec4a73b1841',1,'Tgstation.Server.Host.Database.Migrations.MSAddDMApiValidationMode.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_d_m_api_validation_mode.html#a12df07eb4145eff5f3a33bec62bede8b',1,'Tgstation.Server.Host.Database.Migrations.MYAddDMApiValidationMode.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_d_m_api_validation_mode.html#a1eec9595aaa4cabbece0684c0a838658',1,'Tgstation.Server.Host.Database.Migrations.PGAddDMApiValidationMode.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_d_m_api_validation_mode.html#a0856d07a73d98cbe3d3852e947dd8e4f',1,'Tgstation.Server.Host.Database.Migrations.SLAddDMApiValidationMode.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_m_s_add_auto_start_and_stop.html#a039b84e21b4c2b1ea05323aa497e586d',1,'Tgstation.Server.Host.Database.MSAddAutoStartAndStop.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_m_y_add_auto_start_and_stop.html#a906e5626003b2e59a30eb92652e59ce1',1,'Tgstation.Server.Host.Database.MYAddAutoStartAndStop.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_p_g_add_auto_start_and_stop.html#a0d47096d00aa8e131cc2cb517dae2ebf',1,'Tgstation.Server.Host.Database.PGAddAutoStartAndStop.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_s_l_add_auto_start_and_stop.html#a6a7bdb98e51db1e877b4832985af555e',1,'Tgstation.Server.Host.Database.SLAddAutoStartAndStop.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_topic_port.html#a92a65f4ddb53a22fd2920add77949406',1,'Tgstation.Server.Host.Database.Migrations.MYAddTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_job_codes.html#a6e130501c8facad5aa358058c63776d3',1,'Tgstation.Server.Host.Database.Migrations.MSAddJobCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_job_codes.html#a6aa28d47010e5f38525922b58c89751b',1,'Tgstation.Server.Host.Database.Migrations.MYAddJobCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_job_codes.html#a9b0e7ee3373a2c69f6b0e2f2da2ead77',1,'Tgstation.Server.Host.Database.Migrations.PGAddJobCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_job_codes.html#a5df3301c917058e8f1e3b1cd9df506f4',1,'Tgstation.Server.Host.Database.Migrations.SLAddJobCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_rename_byond_columns_to_engine.html#a6fa319a2865fbbf91aa815b3cf86eec5',1,'Tgstation.Server.Host.Database.Migrations.MSRenameByondColumnsToEngine.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_rename_byond_columns_to_engine.html#a0cce6d691174d7e155ee9db35a8ee374',1,'Tgstation.Server.Host.Database.Migrations.MYRenameByondColumnsToEngine.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_rename_byond_columns_to_engine.html#a7dd45c58140a6cb47e5d1ff7d9dcda1b',1,'Tgstation.Server.Host.Database.Migrations.PGRenameByondColumnsToEngine.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rename_byond_columns_to_engine.html#a1a5661bde986ae90bab2b72c5381a211',1,'Tgstation.Server.Host.Database.Migrations.SLRenameByondColumnsToEngine.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_topic_port.html#a6b0cad6ff039b449861de6d56ca07512',1,'Tgstation.Server.Host.Database.Migrations.MSAddTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_map_threads.html#ab7a476965f174e56b4b36d93cad2fa86',1,'Tgstation.Server.Host.Database.Migrations.SLAddMapThreads.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_topic_port.html#ab2fa8fac29ea9bbeb4f1b91d5d30aa92',1,'Tgstation.Server.Host.Database.Migrations.PGAddTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_topic_port.html#af574a2e6a613678951d2817907620e73',1,'Tgstation.Server.Host.Database.Migrations.SLAddTopicPort.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_minidumps_option.html#a21f08a2242ec8f8dcb160dd39e8d89c7',1,'Tgstation.Server.Host.Database.Migrations.MYAddMinidumpsOption.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_minidumps_option.html#a582fca98f4842b8c97a13e89096395e0',1,'Tgstation.Server.Host.Database.Migrations.PGAddMinidumpsOption.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_minidumps_option.html#a4961cde79489492d645c258b79bc647e',1,'Tgstation.Server.Host.Database.Migrations.SLAddMinidumpsOption.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_normalize_version_updates.html#a527b018ebb9ca83167d81fcf868ffb43',1,'Tgstation.Server.Host.Database.Migrations.MYNormalizeVersionUpdates.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_compiler_additional_arguments.html#ad752ddd7e2a909a343ddc8d79ed8d63a',1,'Tgstation.Server.Host.Database.Migrations.MSAddCompilerAdditionalArguments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_compiler_additional_arguments.html#ab58de656c3e1cc3e92c4adefb93fccdd',1,'Tgstation.Server.Host.Database.Migrations.MYAddCompilerAdditionalArguments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_compiler_additional_arguments.html#aec26993f9ad9ea85809b3214a5569464',1,'Tgstation.Server.Host.Database.Migrations.PGAddCompilerAdditionalArguments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_heartbeat.html#a6699ad0573ce9d6809adb8275aef1e4e',1,'Tgstation.Server.Host.Database.Migrations.MSAddHeartbeat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_compile_job_d_m_api_version.html#ad60c496d7dec72affca9fac2b6131912',1,'Tgstation.Server.Host.Database.Migrations.MYAddCompileJobDMApiVersion.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_checkpoint_rebuild.html#ac0aa836ba342d7d6f1b775d354466f9a',1,'Tgstation.Server.Host.Database.Migrations.MYCheckpointRebuild.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_checkpoint_rebuild.html#ac2a807dd610b05efff586abc8fc5838c',1,'Tgstation.Server.Host.Database.Migrations.MSCheckpointRebuild.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_kill_jsons_add_d_m_api_version.html#a69f92765673944b287c528ef67ac628f',1,'Tgstation.Server.Host.Database.Migrations.MSKillJsonsAddDMApiVersion.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_kill_jsons_add_d_m_api_version.html#a051e7067eb3622929d13230cd270136a',1,'Tgstation.Server.Host.Database.Migrations.MYKillJsonsAddDMApiVersion.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_job_error_codes.html#a46fc331b3a27bdc1a3220d16991fd676',1,'Tgstation.Server.Host.Database.Migrations.MSAddJobErrorCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_job_error_codes.html#a2b882b3dc7c98709f515357624fd5c7d',1,'Tgstation.Server.Host.Database.Migrations.MYAddJobErrorCodes.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_fix_cascading_delete.html#a7eb735e2cac5616d83e1fc523950a7a7',1,'Tgstation.Server.Host.Database.Migrations.MSFixCascadingDelete.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_fix_cascading_delete.html#a29c2467e5b26498fdc9be4daf32190e6',1,'Tgstation.Server.Host.Database.Migrations.MYFixCascadingDelete.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rebuild.html#af59f624ac40ca4702a4ceee81043c686',1,'Tgstation.Server.Host.Database.Migrations.SLRebuild.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_compile_job_d_m_api_version.html#a7a360f89edab0412cbf2522317c503a7',1,'Tgstation.Server.Host.Database.Migrations.MSAddCompileJobDMApiVersion.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_heartbeat.html#aecedd67bcc41584f5cc7ce3e43991e67',1,'Tgstation.Server.Host.Database.Migrations.MYAddHeartbeat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_heartbeat.html#a69db556c8f9816d01d3acfe308c32d0c',1,'Tgstation.Server.Host.Database.Migrations.SLAddHeartbeat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_soft_columns.html#a452f5f223962a06f1f4aac9250a98f7a',1,'Tgstation.Server.Host.Database.Migrations.SLRemoveSoftColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_remove_soft_columns.html#a00aad2d1a76c69ee46d01f608bec097b',1,'Tgstation.Server.Host.Database.Migrations.MSRemoveSoftColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_remove_soft_columns.html#a79220430d6011f769ff13ab1eece5edd',1,'Tgstation.Server.Host.Database.Migrations.MYRemoveSoftColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_create.html#a91b4446c41d615ad2513be276114100e',1,'Tgstation.Server.Host.Database.Migrations.PGCreate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_fix_foreign_key.html#a75a8797a59d9d37f823c1e8141c48148',1,'Tgstation.Server.Host.Database.Migrations.MYFixForeignKey.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_topic_timeout.html#a75b4c0c1b4dce285abf160ca70fa7ad0',1,'Tgstation.Server.Host.Database.Migrations.MSTopicTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_topic_timeout.html#a65160a3abe4072ec1f844961f600b6da',1,'Tgstation.Server.Host.Database.Migrations.MYTopicTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_toggle_testmerge_comments.html#ab73d9fedcdc7d6f8c1961984b60a6a74',1,'Tgstation.Server.Host.Database.Migrations.MSToggleTestmergeComments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_truncate_instance_names.html#a081062379730170cf61da9d0a380cbd5',1,'Tgstation.Server.Host.Database.Migrations.PGTruncateInstanceNames.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_initial_create.html#ae0f4cc2dd9b29f92f03b254d9411140b',1,'Tgstation.Server.Host.Database.Migrations.MSInitialCreate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_initial_create.html#a1c0857d0051862bb633c92aa072e47bd',1,'Tgstation.Server.Host.Database.Migrations.MYInitialCreate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_minimum_security.html#a70b456f851dae6ac43d48e2170d975ce',1,'Tgstation.Server.Host.Database.Migrations.MYAddMinimumSecurity.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_minimum_security.html#a9233da9df7bb2bbbf399a8225a77dfc5',1,'Tgstation.Server.Host.Database.Migrations.MSAddMinimumSecurity.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_nullable_and_foreign_key_cleanup.html#a8c179cd8b856bf48a6ae1b5134ed5caf',1,'Tgstation.Server.Host.Database.Migrations.MYNullableAndForeignKeyCleanup.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_nullable_and_foreign_key_cleanup.html#a5ce4a6670e01c07bc7e7f96e0834f201',1,'Tgstation.Server.Host.Database.Migrations.MSNullableAndForeignKeyCleanup.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_reattach_compile_job_required.html#ad16a541bed641a4299ad34c836d35381',1,'Tgstation.Server.Host.Database.Migrations.MSReattachCompileJobRequired.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_reattach_compile_job_required.html#a985c501dd70a3bde97d5664e32d6ec4f',1,'Tgstation.Server.Host.Database.Migrations.MYReattachCompileJobRequired.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_truncate_instance_names.html#a6c687e422cbb6324695f464708d7c57c',1,'Tgstation.Server.Host.Database.Migrations.MYTruncateInstanceNames.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_toggle_testmerge_comments.html#a65028283085928ece01cd4d4c43dd16c',1,'Tgstation.Server.Host.Database.Migrations.MYToggleTestmergeComments.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_fix_rev_info_index.html#ae8f00fc3a07d7375ce51b8f129369088',1,'Tgstation.Server.Host.Database.Migrations.MSFixRevInfoIndex.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_fix_rev_info_index.html#a75731f56be6e24f24ad159d275e16665',1,'Tgstation.Server.Host.Database.Migrations.MYFixRevInfoIndex.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_chat_bot_reconnection_interval.html#a6d996f6780dc488d4cc7cb9d9804481e',1,'Tgstation.Server.Host.Database.Migrations.MSAddChatBotReconnectionInterval.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_chat_bot_reconnection_interval.html#a2ab30ec2c22da1e82035bd86885d0a19',1,'Tgstation.Server.Host.Database.Migrations.MYAddChatBotReconnectionInterval.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_tons_of_validation.html#a0fd91dc305f512bb5c3d2a9d9bda2d6e',1,'Tgstation.Server.Host.Database.Migrations.MSTonsOfValidation.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_tons_of_validation.html#a7913c39e263b705e6ed1ba52d4dad6ff',1,'Tgstation.Server.Host.Database.Migrations.MYTonsOfValidation.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_limits_on_chat.html#acf6df5f177b238f879d6cadc9c212c8f',1,'Tgstation.Server.Host.Database.Migrations.MSLimitsOnChat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_limits_on_chat.html#a08643345b848248c54f6391c441afca0',1,'Tgstation.Server.Host.Database.Migrations.MYLimitsOnChat.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_user_groups.html#a7ffe4a9281389c09d1597ba9475e5899',1,'Tgstation.Server.Host.Database.Migrations.SLAddUserGroups.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_o_auth_connections.html#ab7f7b491161e7ec0877c35c34965b386',1,'Tgstation.Server.Host.Database.Migrations.PGAddOAuthConnections.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_o_auth_connections.html#a94239f678055402bb21d0a49b4f648dc',1,'Tgstation.Server.Host.Database.Migrations.SLAddOAuthConnections.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_generic_test_merging_update.html#afbd842ae8454a9131db057bd83fb664d',1,'Tgstation.Server.Host.Database.Migrations.MSGenericTestMergingUpdate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_generic_test_merging_update.html#ae151850e1e6ad1caf63006bb3cc3a9bc',1,'Tgstation.Server.Host.Database.Migrations.MYGenericTestMergingUpdate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_generic_test_merging_update.html#a3b922c51f87680d9027691a8da1cdd8f',1,'Tgstation.Server.Host.Database.Migrations.PGGenericTestMergingUpdate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_generic_test_merging_update.html#ab43c410e6c23725ed23a2e2ad5384dee',1,'Tgstation.Server.Host.Database.Migrations.SLGenericTestMergingUpdate.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_user_groups.html#af4a163cf6bd40ec426c9748480721187',1,'Tgstation.Server.Host.Database.Migrations.MSAddUserGroups.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_user_groups.html#a63457a0af862f1cf4f2dfe77262a6010',1,'Tgstation.Server.Host.Database.Migrations.MYAddUserGroups.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_user_groups.html#a33cb7084f59303a65eb7e79ae380608e',1,'Tgstation.Server.Host.Database.Migrations.PGAddUserGroups.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_topic_timeout.html#a0310dac83148c1460053a83c2b0a453b',1,'Tgstation.Server.Host.Database.Migrations.PGTopicTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_swarm_identifer.html#aace109136ec566e858ba7c0c113e50c0',1,'Tgstation.Server.Host.Database.Migrations.MSAddSwarmIdentifer.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_swarm_identifer.html#aab6737d7ab7001adcdf7780cee59668b',1,'Tgstation.Server.Host.Database.Migrations.MYAddSwarmIdentifer.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_swarm_identifer.html#a1fd42fe5d9a9a8ca9bc0a47f53ebc721',1,'Tgstation.Server.Host.Database.Migrations.PGAddSwarmIdentifer.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_swarm_identifer.html#a3001539b2d0acf25b8a58ab564d9a841',1,'Tgstation.Server.Host.Database.Migrations.SLAddSwarmIdentifer.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_rev_info_timestamp.html#ad8dff3f8a44e248cd08b67007d56a43d',1,'Tgstation.Server.Host.Database.Migrations.MSAddRevInfoTimestamp.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_rev_info_timestamp.html#aa76c10cd1cc75f23f1b408117f0fb100',1,'Tgstation.Server.Host.Database.Migrations.MYAddRevInfoTimestamp.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_rev_info_timestamp.html#ae19c7c250224772dffc6c0d7c0592286',1,'Tgstation.Server.Host.Database.Migrations.PGAddRevInfoTimestamp.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_rev_info_timestamp.html#a2af0eb7f62625ccf37ffa0f276c77eac',1,'Tgstation.Server.Host.Database.Migrations.SLAddRevInfoTimestamp.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_truncate_instance_names.html#afc5a1aa922476ea34c5c39b3117b20ec',1,'Tgstation.Server.Host.Database.Migrations.MSTruncateInstanceNames.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_o_auth_connections.html#aac5f6fb1123e106cea7fe629dfdca682',1,'Tgstation.Server.Host.Database.Migrations.MSAddOAuthConnections.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_topic_timeout.html#a71446c05ce0d2861a0a22e2a01f4d89d',1,'Tgstation.Server.Host.Database.Migrations.SLTopicTimeout.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_remove_experimental_watchdog.html#aeba16375a98e6314db22f48319e39d81',1,'Tgstation.Server.Host.Database.Migrations.MSRemoveExperimentalWatchdog.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_remove_experimental_watchdog.html#a4ecfa74d942bf845f49016ed7e0c01c9',1,'Tgstation.Server.Host.Database.Migrations.MYRemoveExperimentalWatchdog.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_remove_experimental_watchdog.html#ae854d9dd602db118b7711bf4a13b9b2a',1,'Tgstation.Server.Host.Database.Migrations.PGRemoveExperimentalWatchdog.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_experimental_watchdog.html#aef19a599caab07370c84bf792cd002e8',1,'Tgstation.Server.Host.Database.Migrations.SLRemoveExperimentalWatchdog.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_allow_null_d_m_api.html#a3a5535279567ec208518789362b10040',1,'Tgstation.Server.Host.Database.Migrations.MSAllowNullDMApi.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_allow_null_d_m_api.html#a23b83a4977a3869e6a5c1975586411f1',1,'Tgstation.Server.Host.Database.Migrations.MYAllowNullDMApi.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_allow_null_d_m_api.html#a11dfa79c963f480b402307af39034789',1,'Tgstation.Server.Host.Database.Migrations.PGAllowNullDMApi.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_allow_null_d_m_api.html#a835767cfae5418f6e289022d1d1ae7ac',1,'Tgstation.Server.Host.Database.Migrations.SLAllowNullDMApi.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_deployment_columns.html#a38931c1859c59c0991c6a54b2dff560c',1,'Tgstation.Server.Host.Database.Migrations.MYAddDeploymentColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_deployment_columns.html#added5a11d65c29997659a974ce398362',1,'Tgstation.Server.Host.Database.Migrations.PGAddDeploymentColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_columns.html#a64a95198e3162f8c094904534dbb3fd9',1,'Tgstation.Server.Host.Database.Migrations.SLAddDeploymentColumns.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_additional_d_d_parameters.html#a2a9792c533d89e8df71a121dff92e61d',1,'Tgstation.Server.Host.Database.Migrations.MSAddAdditionalDDParameters.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_additional_d_d_parameters.html#acf05c6ead3e2bd6456df283e414e395e',1,'Tgstation.Server.Host.Database.Migrations.MYAddAdditionalDDParameters.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_additional_d_d_parameters.html#ac672a7bb2d6d0f02762e6156d153f10e',1,'Tgstation.Server.Host.Database.Migrations.PGAddAdditionalDDParameters.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_additional_d_d_parameters.html#a492e74a97aaa75a40aca3646042ae2b6',1,'Tgstation.Server.Host.Database.Migrations.SLAddAdditionalDDParameters.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_o_auth_connections.html#abfc65f8f237bb1bb3b2e78e9a9a6ecbf',1,'Tgstation.Server.Host.Database.Migrations.MYAddOAuthConnections.Down()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_deployment_columns.html#a792df9e381ad5ed9bfc9441487ce6ea0',1,'Tgstation.Server.Host.Database.Migrations.MSAddDeploymentColumns.Down()']]], ['downgrade_199',['downgrade',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_seeder.html#aa1516a1b38e124f682e779a9c9942318',1,'Tgstation.Server.Host.Database.DatabaseSeeder.Downgrade()'],['../interface_tgstation_1_1_server_1_1_host_1_1_database_1_1_i_database_seeder.html#a059e028f3fe17ded07c0eb9008d3e5b9',1,'Tgstation.Server.Host.Database.IDatabaseSeeder.Downgrade()']]], - ['download_200',['download',['../class_tgstation_1_1_server_1_1_client_1_1_api_client.html#a0a6186386ebd4d1ef1c9cec46a381d9a',1,'Tgstation.Server.Client.ApiClient.Download()'],['../interface_tgstation_1_1_server_1_1_client_1_1_i_transfer_client.html#af4b64d0a29621ab4d0a63164238c515f',1,'Tgstation.Server.Client.ITransferClient.Download()'],['../class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_transfer_controller.html#a199627b7cb0d306297b5bdbf3db04f9f',1,'Tgstation.Server.Host.Controllers.TransferController.Download()']]], + ['download_200',['download',['../class_tgstation_1_1_server_1_1_client_1_1_api_client.html#a0a6186386ebd4d1ef1c9cec46a381d9a',1,'Tgstation.Server.Client.ApiClient.Download()'],['../class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_transfer_controller.html#a199627b7cb0d306297b5bdbf3db04f9f',1,'Tgstation.Server.Host.Controllers.TransferController.Download()'],['../interface_tgstation_1_1_server_1_1_client_1_1_i_transfer_client.html#af4b64d0a29621ab4d0a63164238c515f',1,'Tgstation.Server.Client.ITransferClient.Download()']]], ['downloadcts_201',['downloadCts',['../class_tgstation_1_1_server_1_1_host_1_1_i_o_1_1_request_file_stream_provider.html#a6f9f9b65bfc0972858e335f614aa0d26',1,'Tgstation::Server::Host::IO::RequestFileStreamProvider']]], ['downloadfile_202',['downloadfile',['../class_tgstation_1_1_server_1_1_host_1_1_i_o_1_1_file_downloader.html#a1021002b5a1c378a9cc5762138cba98d',1,'Tgstation.Server.Host.IO.FileDownloader.DownloadFile()'],['../interface_tgstation_1_1_server_1_1_host_1_1_i_o_1_1_i_file_downloader.html#aba327aceb0182d4678f593c3385131de',1,'Tgstation.Server.Host.IO.IFileDownloader.DownloadFile()']]], ['downloadlogs_203',['DownloadLogs',['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#affda1440f9c5e2dfcca65138d2f89a21a58226070c23da85922d478f497efa9fd',1,'Tgstation::Server::Api::Rights']]], @@ -221,41 +221,42 @@ var searchData= ['dreamdaemonlaunchparameters_2ecs_218',['DreamDaemonLaunchParameters.cs',['../_dream_daemon_launch_parameters_8cs.html',1,'']]], ['dreamdaemonlogspath_219',['DreamDaemonLogsPath',['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_session_controller_factory.html#a64531b114473becdc1cfeedea4ca0308',1,'Tgstation::Server::Host::Components::Session::SessionControllerFactory']]], ['dreamdaemonpagerrunning_220',['DreamDaemonPagerRunning',['../namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8a5b055f488d0df6ec7e2d18a72eaac53a',1,'Tgstation::Server::Api::Models']]], - ['dreamdaemonrequest_221',['DreamDaemonRequest',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_request_1_1_dream_daemon_request.html',1,'Tgstation::Server::Api::Models::Request']]], - ['dreamdaemonrequest_2ecs_222',['DreamDaemonRequest.cs',['../_dream_daemon_request_8cs.html',1,'']]], - ['dreamdaemonresponse_223',['dreamdaemonresponse',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_response_1_1_dream_daemon_response.html',1,'Tgstation.Server.Api.Models.Response.DreamDaemonResponse'],['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_dream_daemon_client.html#a7b07269a44c92d6b1d67e69fd092e7a6',1,'Tgstation.Server.Client.Components.DreamDaemonClient.DreamDaemonResponse()']]], - ['dreamdaemonresponse_2ecs_224',['DreamDaemonResponse.cs',['../_dream_daemon_response_8cs.html',1,'']]], - ['dreamdaemonrights_225',['dreamdaemonrights',['../class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_types_1_1_instance_permission_set.html#a4e15b29d70a3d394fa74891b16a118a7',1,'Tgstation.Server.Host.GraphQL.Types.InstancePermissionSet.DreamDaemonRights'],['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_instance_permission_set.html#abfc8da417cc86fda32f60feba2617cda',1,'Tgstation.Server.Api.Models.Internal.InstancePermissionSet.DreamDaemonRights'],['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#acf2642afce6567c03b79876139a10a49',1,'Tgstation.Server.Api.Rights.DreamDaemonRights']]], - ['dreamdaemonrights_2ecs_226',['DreamDaemonRights.cs',['../_dream_daemon_rights_8cs.html',1,'']]], - ['dreamdaemonsecurity_227',['DreamDaemonSecurity',['../namespace_tgstation_1_1_server_1_1_api_1_1_models.html#ad4850e6b78816679602b13d63d2869b5',1,'Tgstation::Server::Api::Models']]], - ['dreamdaemonsecurity_2ecs_228',['DreamDaemonSecurity.cs',['../_dream_daemon_security_8cs.html',1,'']]], - ['dreamdaemonsettings_229',['dreamdaemonsettings',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#ab13ccb4c344a982d5af87d5b3f51bd79',1,'Tgstation.Server.Host.Database.DatabaseContext.DreamDaemonSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_models_1_1_instance.html#a763a2b3fd0d246052fdfff864d16e013',1,'Tgstation.Server.Host.Models.Instance.DreamDaemonSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#ae03574f8c27c8c179b6d1b8c6f71532e',1,'Tgstation.Server.Host.Database.DatabaseContext.DreamDaemonSettings'],['../interface_tgstation_1_1_server_1_1_host_1_1_database_1_1_i_database_context.html#a834db5965b255a765f7ae274e4104f36',1,'Tgstation.Server.Host.Database.IDatabaseContext.DreamDaemonSettings'],['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_daemon_settings.html',1,'Tgstation.Server.Api.Models.Internal.DreamDaemonSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_models_1_1_dream_daemon_settings.html',1,'Tgstation.Server.Host.Models.DreamDaemonSettings']]], - ['dreamdaemonsettings_2ecs_230',['dreamdaemonsettings.cs',['../_tgstation_8_server_8_host_2_models_2_dream_daemon_settings_8cs.html',1,'(Global Namespace)'],['../_tgstation_8_server_8_api_2_models_2_internal_2_dream_daemon_settings_8cs.html',1,'(Global Namespace)']]], - ['dreamdaemonsettingscollection_231',['dreamDaemonSettingsCollection',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#a8b4bad8f9cad725b02e88b98fef96e7a',1,'Tgstation::Server::Host::Database::DatabaseContext']]], - ['dreamdaemonvisibility_232',['DreamDaemonVisibility',['../namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a2ca30004669a0f022b39b67d21ac976c',1,'Tgstation::Server::Api::Models']]], - ['dreamdaemonvisibility_2ecs_233',['DreamDaemonVisibility.cs',['../_dream_daemon_visibility_8cs.html',1,'']]], - ['dreammaker_234',['dreammaker',['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker.html',1,'Tgstation.Server.Host.Components.Deployment.DreamMaker'],['../interface_tgstation_1_1_server_1_1_client_1_1_components_1_1_i_instance_client.html#a5a505ae2d713942640558e34222b444b',1,'Tgstation.Server.Client.Components.IInstanceClient.DreamMaker'],['../class_tgstation_1_1_server_1_1_api_1_1_routes.html#acc5a1421208a8e29080110f54b364ba8',1,'Tgstation.Server.Api.Routes.DreamMaker'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance.html#a5774569e57a7e7b15ce6dafed0904ab0',1,'Tgstation.Server.Host.Components.Instance.DreamMaker'],['../interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_i_instance_core.html#acbc6bed95fa79891224fc0b1c5255071',1,'Tgstation.Server.Host.Components.IInstanceCore.DreamMaker'],['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_instance_client.html#af92b0694efe4453eee2ea50d9c18616e',1,'Tgstation.Server.Client.Components.InstanceClient.DreamMaker'],['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20af179dcd47770d7cc1eb149ee1a0d06af',1,'Tgstation.Server.Api.Rights.DreamMaker'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_wrapper.html#a0392aae240c5fe54f476cff7c6079581',1,'Tgstation.Server.Host.Components.InstanceWrapper.DreamMaker'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker.html#ad8fe024d105f0db0d2d7deaf2a87aa7d',1,'Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker()']]], - ['dreammaker_2ecs_235',['DreamMaker.cs',['../_dream_maker_8cs.html',1,'']]], - ['dreammakerclient_236',['dreammakerclient',['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_dream_maker_client.html',1,'Tgstation.Server.Client.Components.DreamMakerClient'],['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_dream_maker_client.html#a04dd94462a3bb8aad7469c84d53f78a9',1,'Tgstation.Server.Client.Components.DreamMakerClient.DreamMakerClient()']]], - ['dreammakerclient_2ecs_237',['DreamMakerClient.cs',['../_dream_maker_client_8cs.html',1,'']]], - ['dreammakercontroller_238',['dreammakercontroller',['../class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_maker_controller.html',1,'Tgstation.Server.Host.Controllers.DreamMakerController'],['../class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_maker_controller.html#afd9a85c25ecaeaecd0937d688f8e8c44',1,'Tgstation.Server.Host.Controllers.DreamMakerController.DreamMakerController()']]], - ['dreammakercontroller_2ecs_239',['DreamMakerController.cs',['../_dream_maker_controller_8cs.html',1,'']]], - ['dreammakerexecutablename_240',['DreamMakerExecutableName',['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_posix_byond_installer.html#a8d5eaf20643153e497ec910338f9e8d1',1,'Tgstation::Server::Host::Components::Engine::PosixByondInstaller']]], - ['dreammakername_241',['dreammakername',['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_byond_installer_base.html#ae205b25b04448df164dfcd59c7f00290',1,'Tgstation.Server.Host.Components.Engine.ByondInstallerBase.DreamMakerName'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_posix_byond_installer.html#a2d95580b64589441f0aa25828114c383',1,'Tgstation.Server.Host.Components.Engine.PosixByondInstaller.DreamMakerName'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_windows_byond_installer.html#a6d79aae0ee8215df6203e6fa7bec00da',1,'Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.DreamMakerName']]], - ['dreammakerrequest_242',['DreamMakerRequest',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_request_1_1_dream_maker_request.html',1,'Tgstation::Server::Api::Models::Request']]], - ['dreammakerrequest_2ecs_243',['DreamMakerRequest.cs',['../_dream_maker_request_8cs.html',1,'']]], - ['dreammakerresponse_244',['dreammakerresponse',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_response_1_1_dream_maker_response.html',1,'Tgstation.Server.Api.Models.Response.DreamMakerResponse'],['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_dream_maker_client.html#a4955daed898f22ef6c5da837864ab8d0',1,'Tgstation.Server.Client.Components.DreamMakerClient.DreamMakerResponse()']]], - ['dreammakerresponse_2ecs_245',['DreamMakerResponse.cs',['../_dream_maker_response_8cs.html',1,'']]], - ['dreammakerrights_246',['dreammakerrights',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_instance_permission_set.html#aec28359b05c8c78a1491e542f348dc47',1,'Tgstation.Server.Api.Models.Internal.InstancePermissionSet.DreamMakerRights'],['../class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_types_1_1_instance_permission_set.html#a4ded69a3bf12ca4355dd04079f342b5d',1,'Tgstation.Server.Host.GraphQL.Types.InstancePermissionSet.DreamMakerRights'],['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a6aac419b6a793fe07657d96ac48dee5d',1,'Tgstation.Server.Api.Rights.DreamMakerRights']]], - ['dreammakerrights_2ecs_247',['DreamMakerRights.cs',['../_dream_maker_rights_8cs.html',1,'']]], - ['dreammakersettings_248',['dreammakersettings',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_maker_settings.html',1,'Tgstation.Server.Api.Models.Internal.DreamMakerSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#a77fbed3e1799f2e4c6edec6dc2f415bb',1,'Tgstation.Server.Host.Database.DatabaseContext.DreamMakerSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#a670cf85f3bbc465d5c1f89cdef983f33',1,'Tgstation.Server.Host.Database.DatabaseContext.DreamMakerSettings'],['../interface_tgstation_1_1_server_1_1_host_1_1_database_1_1_i_database_context.html#aac927b14c117b14a4bafdf3811c2c859',1,'Tgstation.Server.Host.Database.IDatabaseContext.DreamMakerSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_models_1_1_instance.html#a59e34ebdf9e4bdea84a0548a4b2f59bf',1,'Tgstation.Server.Host.Models.Instance.DreamMakerSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_models_1_1_dream_maker_settings.html',1,'Tgstation.Server.Host.Models.DreamMakerSettings']]], - ['dreammakersettings_2ecs_249',['dreammakersettings.cs',['../_tgstation_8_server_8_host_2_models_2_dream_maker_settings_8cs.html',1,'(Global Namespace)'],['../_tgstation_8_server_8_api_2_models_2_internal_2_dream_maker_settings_8cs.html',1,'(Global Namespace)']]], - ['dreammakersettingscollection_250',['dreamMakerSettingsCollection',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#a333d57bfa4adf560b11b6df69c110be9',1,'Tgstation::Server::Host::Database::DatabaseContext']]], - ['drop_251',['drop',['../interface_tgstation_1_1_server_1_1_host_1_1_database_1_1_i_database_context.html#a6216e8a817ab6700a155699bb8013584',1,'Tgstation.Server.Host.Database.IDatabaseContext.Drop()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#abd512a5dfbfbc3f64670a963ec808de5',1,'Tgstation.Server.Host.Database.DatabaseContext.Drop()']]], - ['dropdatabase_252',['DropDatabase',['../class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_database_configuration.html#a30f47f73075f305073ad72ef3ff44cd4',1,'Tgstation::Server::Host::Configuration::DatabaseConfiguration']]], - ['dump_253',['dump',['../interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_dotnet_dump_service.html#a515764cad066e48dff4c4a468393ddf3',1,'Tgstation.Server.Host.System.IDotnetDumpService.Dump()'],['../class_tgstation_1_1_server_1_1_host_1_1_system_1_1_dotnet_dump_service.html#a4baaea7bb7fd77e2e8e04d104cfc20a1',1,'Tgstation.Server.Host.System.DotnetDumpService.Dump()']]], - ['dumpfileextension_254',['dumpfileextension',['../interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_i_session_controller.html#aff0878b2d545a8b201cb35f6035be3ad',1,'Tgstation.Server.Host.Components.Session.ISessionController.DumpFileExtension'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_session_controller.html#a04891c7811dd11c417499c9af5064417',1,'Tgstation.Server.Host.Components.Session.SessionController.DumpFileExtension']]], - ['dumpgraphqlapipath_255',['DumpGraphQLApiPath',['../class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_internal_configuration.html#ad05efeef4b191400c7c15f0cc630c61e',1,'Tgstation::Server::Host::Configuration::InternalConfiguration']]], - ['dumpgraphqlschemaifrequested_256',['DumpGraphQLSchemaIfRequested',['../class_tgstation_1_1_server_1_1_host_1_1_server.html#acea919f32c8116e8fe0088df1b991eea',1,'Tgstation::Server::Host::Server']]], - ['dumponhealthcheckrestart_257',['DumpOnHealthCheckRestart',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_daemon_launch_parameters.html#ae1546ab1b54146ff4cbc6b827c2f0eda',1,'Tgstation::Server::Api::Models::Internal::DreamDaemonLaunchParameters']]] + ['dreamdaemonprelaunch_221',['DreamDaemonPreLaunch',['../namespace_tgstation_1_1_server_1_1_host_1_1_components_1_1_events.html#ac30c818717e92c8fb65f389adec739b7a4799272c67fbb7757097b425360c79ef',1,'Tgstation::Server::Host::Components::Events']]], + ['dreamdaemonrequest_222',['DreamDaemonRequest',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_request_1_1_dream_daemon_request.html',1,'Tgstation::Server::Api::Models::Request']]], + ['dreamdaemonrequest_2ecs_223',['DreamDaemonRequest.cs',['../_dream_daemon_request_8cs.html',1,'']]], + ['dreamdaemonresponse_224',['dreamdaemonresponse',['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_dream_daemon_client.html#a7b07269a44c92d6b1d67e69fd092e7a6',1,'Tgstation.Server.Client.Components.DreamDaemonClient.DreamDaemonResponse()'],['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_response_1_1_dream_daemon_response.html',1,'Tgstation.Server.Api.Models.Response.DreamDaemonResponse']]], + ['dreamdaemonresponse_2ecs_225',['DreamDaemonResponse.cs',['../_dream_daemon_response_8cs.html',1,'']]], + ['dreamdaemonrights_226',['dreamdaemonrights',['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#acf2642afce6567c03b79876139a10a49',1,'Tgstation.Server.Api.Rights.DreamDaemonRights'],['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_instance_permission_set.html#abfc8da417cc86fda32f60feba2617cda',1,'Tgstation.Server.Api.Models.Internal.InstancePermissionSet.DreamDaemonRights'],['../class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_types_1_1_instance_permission_set.html#a4e15b29d70a3d394fa74891b16a118a7',1,'Tgstation.Server.Host.GraphQL.Types.InstancePermissionSet.DreamDaemonRights']]], + ['dreamdaemonrights_2ecs_227',['DreamDaemonRights.cs',['../_dream_daemon_rights_8cs.html',1,'']]], + ['dreamdaemonsecurity_228',['DreamDaemonSecurity',['../namespace_tgstation_1_1_server_1_1_api_1_1_models.html#ad4850e6b78816679602b13d63d2869b5',1,'Tgstation::Server::Api::Models']]], + ['dreamdaemonsecurity_2ecs_229',['DreamDaemonSecurity.cs',['../_dream_daemon_security_8cs.html',1,'']]], + ['dreamdaemonsettings_230',['dreamdaemonsettings',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#ae03574f8c27c8c179b6d1b8c6f71532e',1,'Tgstation.Server.Host.Database.DatabaseContext.DreamDaemonSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_models_1_1_dream_daemon_settings.html',1,'Tgstation.Server.Host.Models.DreamDaemonSettings'],['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_daemon_settings.html',1,'Tgstation.Server.Api.Models.Internal.DreamDaemonSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_models_1_1_instance.html#a763a2b3fd0d246052fdfff864d16e013',1,'Tgstation.Server.Host.Models.Instance.DreamDaemonSettings'],['../interface_tgstation_1_1_server_1_1_host_1_1_database_1_1_i_database_context.html#a834db5965b255a765f7ae274e4104f36',1,'Tgstation.Server.Host.Database.IDatabaseContext.DreamDaemonSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#ab13ccb4c344a982d5af87d5b3f51bd79',1,'Tgstation.Server.Host.Database.DatabaseContext.DreamDaemonSettings']]], + ['dreamdaemonsettings_2ecs_231',['dreamdaemonsettings.cs',['../_tgstation_8_server_8_api_2_models_2_internal_2_dream_daemon_settings_8cs.html',1,'(Global Namespace)'],['../_tgstation_8_server_8_host_2_models_2_dream_daemon_settings_8cs.html',1,'(Global Namespace)']]], + ['dreamdaemonsettingscollection_232',['dreamDaemonSettingsCollection',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#a8b4bad8f9cad725b02e88b98fef96e7a',1,'Tgstation::Server::Host::Database::DatabaseContext']]], + ['dreamdaemonvisibility_233',['DreamDaemonVisibility',['../namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a2ca30004669a0f022b39b67d21ac976c',1,'Tgstation::Server::Api::Models']]], + ['dreamdaemonvisibility_2ecs_234',['DreamDaemonVisibility.cs',['../_dream_daemon_visibility_8cs.html',1,'']]], + ['dreammaker_235',['dreammaker',['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20af179dcd47770d7cc1eb149ee1a0d06af',1,'Tgstation.Server.Api.Rights.DreamMaker'],['../class_tgstation_1_1_server_1_1_api_1_1_routes.html#acc5a1421208a8e29080110f54b364ba8',1,'Tgstation.Server.Api.Routes.DreamMaker'],['../interface_tgstation_1_1_server_1_1_client_1_1_components_1_1_i_instance_client.html#a5a505ae2d713942640558e34222b444b',1,'Tgstation.Server.Client.Components.IInstanceClient.DreamMaker'],['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_instance_client.html#af92b0694efe4453eee2ea50d9c18616e',1,'Tgstation.Server.Client.Components.InstanceClient.DreamMaker'],['../interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_i_instance_core.html#acbc6bed95fa79891224fc0b1c5255071',1,'Tgstation.Server.Host.Components.IInstanceCore.DreamMaker'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance.html#a5774569e57a7e7b15ce6dafed0904ab0',1,'Tgstation.Server.Host.Components.Instance.DreamMaker'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_wrapper.html#a0392aae240c5fe54f476cff7c6079581',1,'Tgstation.Server.Host.Components.InstanceWrapper.DreamMaker'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker.html#ad8fe024d105f0db0d2d7deaf2a87aa7d',1,'Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker()'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker.html',1,'Tgstation.Server.Host.Components.Deployment.DreamMaker']]], + ['dreammaker_2ecs_236',['DreamMaker.cs',['../_dream_maker_8cs.html',1,'']]], + ['dreammakerclient_237',['dreammakerclient',['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_dream_maker_client.html#a04dd94462a3bb8aad7469c84d53f78a9',1,'Tgstation.Server.Client.Components.DreamMakerClient.DreamMakerClient()'],['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_dream_maker_client.html',1,'Tgstation.Server.Client.Components.DreamMakerClient']]], + ['dreammakerclient_2ecs_238',['DreamMakerClient.cs',['../_dream_maker_client_8cs.html',1,'']]], + ['dreammakercontroller_239',['dreammakercontroller',['../class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_maker_controller.html#afd9a85c25ecaeaecd0937d688f8e8c44',1,'Tgstation.Server.Host.Controllers.DreamMakerController.DreamMakerController()'],['../class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_dream_maker_controller.html',1,'Tgstation.Server.Host.Controllers.DreamMakerController']]], + ['dreammakercontroller_2ecs_240',['DreamMakerController.cs',['../_dream_maker_controller_8cs.html',1,'']]], + ['dreammakerexecutablename_241',['DreamMakerExecutableName',['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_posix_byond_installer.html#a8d5eaf20643153e497ec910338f9e8d1',1,'Tgstation::Server::Host::Components::Engine::PosixByondInstaller']]], + ['dreammakername_242',['dreammakername',['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_byond_installer_base.html#ae205b25b04448df164dfcd59c7f00290',1,'Tgstation.Server.Host.Components.Engine.ByondInstallerBase.DreamMakerName'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_posix_byond_installer.html#a2d95580b64589441f0aa25828114c383',1,'Tgstation.Server.Host.Components.Engine.PosixByondInstaller.DreamMakerName'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_windows_byond_installer.html#a6d79aae0ee8215df6203e6fa7bec00da',1,'Tgstation.Server.Host.Components.Engine.WindowsByondInstaller.DreamMakerName']]], + ['dreammakerrequest_243',['DreamMakerRequest',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_request_1_1_dream_maker_request.html',1,'Tgstation::Server::Api::Models::Request']]], + ['dreammakerrequest_2ecs_244',['DreamMakerRequest.cs',['../_dream_maker_request_8cs.html',1,'']]], + ['dreammakerresponse_245',['dreammakerresponse',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_response_1_1_dream_maker_response.html',1,'Tgstation.Server.Api.Models.Response.DreamMakerResponse'],['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_dream_maker_client.html#a4955daed898f22ef6c5da837864ab8d0',1,'Tgstation.Server.Client.Components.DreamMakerClient.DreamMakerResponse()']]], + ['dreammakerresponse_2ecs_246',['DreamMakerResponse.cs',['../_dream_maker_response_8cs.html',1,'']]], + ['dreammakerrights_247',['dreammakerrights',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_instance_permission_set.html#aec28359b05c8c78a1491e542f348dc47',1,'Tgstation.Server.Api.Models.Internal.InstancePermissionSet.DreamMakerRights'],['../class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_types_1_1_instance_permission_set.html#a4ded69a3bf12ca4355dd04079f342b5d',1,'Tgstation.Server.Host.GraphQL.Types.InstancePermissionSet.DreamMakerRights'],['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a6aac419b6a793fe07657d96ac48dee5d',1,'Tgstation.Server.Api.Rights.DreamMakerRights']]], + ['dreammakerrights_2ecs_248',['DreamMakerRights.cs',['../_dream_maker_rights_8cs.html',1,'']]], + ['dreammakersettings_249',['dreammakersettings',['../class_tgstation_1_1_server_1_1_host_1_1_models_1_1_dream_maker_settings.html',1,'Tgstation.Server.Host.Models.DreamMakerSettings'],['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_maker_settings.html',1,'Tgstation.Server.Api.Models.Internal.DreamMakerSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#a77fbed3e1799f2e4c6edec6dc2f415bb',1,'Tgstation.Server.Host.Database.DatabaseContext.DreamMakerSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#a670cf85f3bbc465d5c1f89cdef983f33',1,'Tgstation.Server.Host.Database.DatabaseContext.DreamMakerSettings'],['../interface_tgstation_1_1_server_1_1_host_1_1_database_1_1_i_database_context.html#aac927b14c117b14a4bafdf3811c2c859',1,'Tgstation.Server.Host.Database.IDatabaseContext.DreamMakerSettings'],['../class_tgstation_1_1_server_1_1_host_1_1_models_1_1_instance.html#a59e34ebdf9e4bdea84a0548a4b2f59bf',1,'Tgstation.Server.Host.Models.Instance.DreamMakerSettings']]], + ['dreammakersettings_2ecs_250',['dreammakersettings.cs',['../_tgstation_8_server_8_api_2_models_2_internal_2_dream_maker_settings_8cs.html',1,'(Global Namespace)'],['../_tgstation_8_server_8_host_2_models_2_dream_maker_settings_8cs.html',1,'(Global Namespace)']]], + ['dreammakersettingscollection_251',['dreamMakerSettingsCollection',['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#a333d57bfa4adf560b11b6df69c110be9',1,'Tgstation::Server::Host::Database::DatabaseContext']]], + ['drop_252',['drop',['../interface_tgstation_1_1_server_1_1_host_1_1_database_1_1_i_database_context.html#a6216e8a817ab6700a155699bb8013584',1,'Tgstation.Server.Host.Database.IDatabaseContext.Drop()'],['../class_tgstation_1_1_server_1_1_host_1_1_database_1_1_database_context.html#abd512a5dfbfbc3f64670a963ec808de5',1,'Tgstation.Server.Host.Database.DatabaseContext.Drop()']]], + ['dropdatabase_253',['DropDatabase',['../class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_database_configuration.html#a30f47f73075f305073ad72ef3ff44cd4',1,'Tgstation::Server::Host::Configuration::DatabaseConfiguration']]], + ['dump_254',['dump',['../class_tgstation_1_1_server_1_1_host_1_1_system_1_1_dotnet_dump_service.html#a4baaea7bb7fd77e2e8e04d104cfc20a1',1,'Tgstation.Server.Host.System.DotnetDumpService.Dump()'],['../interface_tgstation_1_1_server_1_1_host_1_1_system_1_1_i_dotnet_dump_service.html#a515764cad066e48dff4c4a468393ddf3',1,'Tgstation.Server.Host.System.IDotnetDumpService.Dump()']]], + ['dumpfileextension_255',['dumpfileextension',['../interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_i_session_controller.html#aff0878b2d545a8b201cb35f6035be3ad',1,'Tgstation.Server.Host.Components.Session.ISessionController.DumpFileExtension'],['../class_tgstation_1_1_server_1_1_host_1_1_components_1_1_session_1_1_session_controller.html#a04891c7811dd11c417499c9af5064417',1,'Tgstation.Server.Host.Components.Session.SessionController.DumpFileExtension']]], + ['dumpgraphqlapipath_256',['DumpGraphQLApiPath',['../class_tgstation_1_1_server_1_1_host_1_1_configuration_1_1_internal_configuration.html#ad05efeef4b191400c7c15f0cc630c61e',1,'Tgstation::Server::Host::Configuration::InternalConfiguration']]], + ['dumpgraphqlschemaifrequested_257',['DumpGraphQLSchemaIfRequested',['../class_tgstation_1_1_server_1_1_host_1_1_server.html#acea919f32c8116e8fe0088df1b991eea',1,'Tgstation::Server::Host::Server']]], + ['dumponhealthcheckrestart_258',['DumpOnHealthCheckRestart',['../class_tgstation_1_1_server_1_1_api_1_1_models_1_1_internal_1_1_dream_daemon_launch_parameters.html#ae1546ab1b54146ff4cbc6b827c2f0eda',1,'Tgstation::Server::Api::Models::Internal::DreamDaemonLaunchParameters']]] ]; diff --git a/search/enumvalues_3.js b/search/enumvalues_3.js index 60f6b45505..a0430c00e3 100644 --- a/search/enumvalues_3.js +++ b/search/enumvalues_3.js @@ -26,5 +26,6 @@ var searchData= ['dreamdaemon_23',['DreamDaemon',['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20a82a60e2400e19cffe6b38b295e10d4c8',1,'Tgstation::Server::Api::Rights']]], ['dreamdaemonlaunch_24',['DreamDaemonLaunch',['../namespace_tgstation_1_1_server_1_1_host_1_1_components_1_1_events.html#ac30c818717e92c8fb65f389adec739b7a2cf6b69f295b39ecc0e7fd906bde6e19',1,'Tgstation::Server::Host::Components::Events']]], ['dreamdaemonpagerrunning_25',['DreamDaemonPagerRunning',['../namespace_tgstation_1_1_server_1_1_api_1_1_models.html#a1a6adb59dd51244efabf4e548e7075c8a5b055f488d0df6ec7e2d18a72eaac53a',1,'Tgstation::Server::Api::Models']]], - ['dreammaker_26',['DreamMaker',['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20af179dcd47770d7cc1eb149ee1a0d06af',1,'Tgstation::Server::Api::Rights']]] + ['dreamdaemonprelaunch_26',['DreamDaemonPreLaunch',['../namespace_tgstation_1_1_server_1_1_host_1_1_components_1_1_events.html#ac30c818717e92c8fb65f389adec739b7a4799272c67fbb7757097b425360c79ef',1,'Tgstation::Server::Host::Components::Events']]], + ['dreammaker_27',['DreamMaker',['../namespace_tgstation_1_1_server_1_1_api_1_1_rights.html#a7b02c8c3dadd90810a9eaa24712a0a20af179dcd47770d7cc1eb149ee1a0d06af',1,'Tgstation::Server::Api::Rights']]] ]; diff --git a/search/functions_2.js b/search/functions_2.js index 910510017e..8c539ebc1e 100644 --- a/search/functions_2.js +++ b/search/functions_2.js @@ -81,7 +81,7 @@ var searchData= ['configurationclient_78',['ConfigurationClient',['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_configuration_client.html#aed092908af675dfdec16528492815010',1,'Tgstation::Server::Client::Components::ConfigurationClient']]], ['configurationcontroller_79',['ConfigurationController',['../class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_configuration_controller.html#a2463d40009421f34d8d585c3b1c8ff44',1,'Tgstation::Server::Host::Controllers::ConfigurationController']]], ['configurationfileresponse_80',['ConfigurationFileResponse',['../class_tgstation_1_1_server_1_1_client_1_1_components_1_1_configuration_client.html#aaaba98e82a99805f816d50551fc47ba6',1,'Tgstation::Server::Client::Components::ConfigurationClient']]], - ['configure_81',['configure',['../class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html#ae682a557e90d363305bb3ce39e290341',1,'Tgstation.Server.Host.Core.Application.Configure()'],['../class_tgstation_1_1_server_1_1_host_1_1_utils_1_1_swagger_configuration.html#a7a8de5dbb9ef96b2ced6739f2afe3549',1,'Tgstation.Server.Host.Utils.SwaggerConfiguration.Configure()']]], + ['configure_81',['configure',['../class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html#aec111c5d85d5cbf4c16dc1e3f612a08e',1,'Tgstation.Server.Host.Core.Application.Configure()'],['../class_tgstation_1_1_server_1_1_host_1_1_utils_1_1_swagger_configuration.html#a7a8de5dbb9ef96b2ced6739f2afe3549',1,'Tgstation.Server.Host.Utils.SwaggerConfiguration.Configure()']]], ['configureapplication_82',['ConfigureApplication',['../class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_web_host_builder_extensions.html#aa38e8d40574e3640929084c83f10b0f3',1,'Tgstation::Server::Host::Extensions::WebHostBuilderExtensions']]], ['configureauthenticationpipeline_83',['ConfigureAuthenticationPipeline',['../class_tgstation_1_1_server_1_1_host_1_1_core_1_1_application.html#a7518c1b2ec58feaa1dffc13c9caf48af',1,'Tgstation::Server::Host::Core::Application']]], ['configurecontrolpanel_84',['ConfigureControlPanel',['../class_tgstation_1_1_server_1_1_host_1_1_setup_1_1_setup_wizard.html#a06627f62878cb4f2170946b40d3081b4',1,'Tgstation::Server::Host::Setup::SetupWizard']]],