public static async Task <MqttServerInstance> StartServer(MqttServerConfiguration serverConfiguration)
        {
            logger.Info($"Starting Mqtt Server");
            string storagefile = Path.Combine(PlugInData.HomeSeerDirectory, "data", PlugInData.PlugInId, "mqtt", "retained.json");

            // Configure MQTT server.
            var optionsBuilder = new MqttServerOptionsBuilder()
                                 .WithConnectionBacklog(512)
                                 .WithStorage(new MqttStorage(storagefile))
                                 .WithDefaultEndpointPort(serverConfiguration.Port);

            if (serverConfiguration.BoundIPAddress != null)
            {
                optionsBuilder = optionsBuilder.WithDefaultEndpointBoundIPAddress(serverConfiguration.BoundIPAddress);
            }
            optionsBuilder = optionsBuilder.WithDefaultEndpointBoundIPV6Address(IPAddress.None);

            var mqttServer = new MqttFactory(new MqttNetLogger()).CreateMqttServer();
            await mqttServer.StartAsync(optionsBuilder.Build()).ConfigureAwait(false);

            return(new MqttServerInstance(mqttServer, serverConfiguration));
        }
 public MqttServerInstance(IMqttServer?server,
                           MqttServerConfiguration configuration)
 {
     this.Server        = server;
     this.Configuration = configuration;
 }