77using System . Threading ;
88using System . Threading . Tasks ;
99using Microsoft . Extensions . Hosting ;
10- using Microsoft . Extensions . Logging ;
11- using Microsoft . Extensions . Logging . Abstractions ;
1210using MQTTnet . Diagnostics . Logger ;
1311using MQTTnet . Server ;
1412
1513namespace MQTTnet . AspNetCore ;
1614
17- public sealed class MqttHostedServer : MqttServer , IHostedService
15+ public sealed class MqttHostedServer : BackgroundService
1816{
19- readonly IHostApplicationLifetime _hostApplicationLifetime ;
2017 readonly MqttServerFactory _mqttFactory ;
21- readonly ILogger _appLogger ;
22-
2318 public MqttHostedServer (
24- IHostApplicationLifetime hostApplicationLifetime ,
2519 MqttServerFactory mqttFactory ,
2620 MqttServerOptions options ,
2721 IEnumerable < IMqttServerAdapter > adapters ,
28- IMqttNetLogger logger ,
29- ILogger < MqttHostedServer > appLogger = null
30- ) : base ( options , adapters , logger )
22+ IMqttNetLogger logger
23+ )
3124 {
25+ MqttServer = new ( options , adapters , logger ) ;
3226 _mqttFactory = mqttFactory ?? throw new ArgumentNullException ( nameof ( mqttFactory ) ) ;
33- _hostApplicationLifetime = hostApplicationLifetime ;
34- _appLogger = appLogger ?? NullLogger < MqttHostedServer > . Instance ;
35- }
36-
37- public async Task StartAsync ( CancellationToken cancellationToken )
38- {
39- // The yield makes sure that the hosted service is considered up and running.
40- await Task . Yield ( ) ;
41-
42- _hostApplicationLifetime . ApplicationStarted . Register ( OnStarted ) ;
4327 }
4428
45- public Task StopAsync ( CancellationToken cancellationToken )
29+ public MqttServer MqttServer { get ; }
30+ protected override async Task ExecuteAsync ( CancellationToken stoppingToken )
4631 {
47- return StopAsync ( _mqttFactory . CreateMqttServerStopOptionsBuilder ( ) . Build ( ) ) ;
32+ await MqttServer . StartAsync ( ) ;
4833 }
49-
50- void OnStarted ( )
34+ public override async Task StopAsync ( CancellationToken cancellationToken )
5135 {
52- async Task DoStart ( )
53- {
54- try
55- {
56- await StartAsync ( ) ;
57- }
58- catch ( Exception e )
59- {
60- _appLogger . LogError ( e , "Stopping application: failed to start MqttServer: {Error}" , e . Message ) ;
61- _hostApplicationLifetime . StopApplication ( ) ;
62- throw ;
63- }
64- }
65- _ = DoStart ( ) ;
36+ await MqttServer . StopAsync ( _mqttFactory . CreateMqttServerStopOptionsBuilder ( ) . Build ( ) ) ;
37+ await base . StopAsync ( cancellationToken ) ;
6638 }
67- }
39+ }
0 commit comments