Files
gh-atc-net-atc-agentic-tool…/skills/iot-edge-module/assets/template-Service.cs
2025-11-29 17:58:35 +08:00

60 lines
1.9 KiB
C#

namespace {{ModuleName}};
/// <summary>
/// The main {{ModuleName}}Service.
/// </summary>
public sealed partial class {{ModuleName}}Service : IHostedService
{
private readonly IHostApplicationLifetime hostApplication;
private readonly IModuleClientWrapper moduleClient;
public {{ModuleName}}Service(
ILogger<{{ModuleName}}Service> logger,
IHostApplicationLifetime hostApplication,
IModuleClientWrapper moduleClient)
{
this.logger = logger;
this.hostApplication = hostApplication;
this.moduleClient = moduleClient;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
hostApplication.ApplicationStarted.Register(OnStarted);
hostApplication.ApplicationStopping.Register(OnStopping);
hostApplication.ApplicationStopped.Register(OnStopped);
moduleClient.SetConnectionStatusChangesHandler(LogConnectionStatusChange);
await moduleClient.OpenAsync(cancellationToken);
// TODO: Register direct method handlers here
//// await moduleClient.SetMethodHandlerAsync("MethodName", HandleMethodAsync, string.Empty, cancellationToken);
LogModuleClientStarted({{ModuleName}}Constants.ModuleId);
}
public async Task StopAsync(CancellationToken cancellationToken)
{
try
{
await moduleClient.CloseAsync(cancellationToken);
}
catch (OperationCanceledException)
{
// Cancellation is expected during shutdown — safe to ignore
}
LogModuleClientStopped({{ModuleName}}Constants.ModuleId);
}
private void OnStarted()
=> LogModuleStarted({{ModuleName}}Constants.ModuleId);
private void OnStopping()
=> LogModuleStopping({{ModuleName}}Constants.ModuleId);
private void OnStopped()
=> LogModuleStopped({{ModuleName}}Constants.ModuleId);
}