Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RobotNet10.ScriptEngine.Data;
using RobotNet10.ScriptEngine.HubContexts;
using RobotNet10.ScriptEngine.Hubs;
using RobotNet10.ScriptEngine.Shared;
namespace RobotNet10.ScriptEngine;
public static class ScriptEngineExtensions
{
/// <summary>
/// Adds ScriptEngine services to the service collection.
/// </summary>
/// <typeparam name="TScriptEngineResource">The type implementing IScriptEngineResource.</typeparam>
/// <param name="services">The service collection.</param>
/// <param name="optionsAction">The action to configure DbContext options.</param>
extension(IServiceCollection services)
{
public void AddScriptEngine<TScriptEngineResource>(Action<DbContextOptionsBuilder> optionsAction)
where TScriptEngineResource : class, IScriptEngineResource
{
// Note: SignalR must be configured before calling this method
// services.AddSignalR() should be called in Program.cs before this method
services.AddSingleton<IScriptEngineResource, TScriptEngineResource>()
.AddSingleton<ConsoleHubContext>()
.AddSingleton<VariableManager>()
.AddSingleton<FileManager>()
.AddSingleton<TaskManager>()
.AddSingleton<MissionManager>()
.AddSingleton<ScriptEngine>()
.AddDbContext<ScriptEngineDbContext>(optionsAction);
}
}
/// <summary>
/// Maps ScriptEngine SignalR hubs to endpoints.
/// This extension method should be called in Program.cs after app.Build().
/// Example: app.MapScriptEngineHubs();
/// </summary>
/// <param name="app">The web application.</param>
extension(WebApplication app)
{
public void MapScriptEngineHubs()
{
app.MapHub<ConsoleHub>(HubEndpoints.ScriptConsoleHubPath);
app.MapHub<ScriptManagerHub>(HubEndpoints.ScriptManagerHubPath);
app.MapHub<FileManagerHub>(HubEndpoints.ScriptFileManagerHubPath);
app.MapHub<InstanceMissionHub>(HubEndpoints.InstanceMissionHubPath);
}
}
/// <summary>
/// Seeds the ScriptEngine database by applying migrations.
/// </summary>
/// <param name="serviceProvider">The service provider.</param>
extension(IServiceProvider serviceProvider)
{
public async Task SeedScriptEngineDbAsync()
{
using var scope = serviceProvider.CreateScope();
using var appDb = scope.ServiceProvider.GetRequiredService<ScriptEngineDbContext>();
await appDb.Database.MigrateAsync();
await appDb.Database.EnsureCreatedAsync();
await appDb.SaveChangesAsync();
}
}
}