using System; using System.Net; namespace MQTTnet.Server { public class MqttServerOptionsBuilder { private readonly MqttServerOptions _options = new MqttServerOptions(); public MqttServerOptionsBuilder WithConnectionBacklog(int value) { _options.ConnectionBacklog = value; return this; } public MqttServerOptionsBuilder WithMaxPendingMessagesPerClient(int value) { _options.MaxPendingMessagesPerClient = value; return this; } public MqttServerOptionsBuilder WithDefaultCommunicationTimeout(TimeSpan value) { _options.DefaultCommunicationTimeout = value; return this; } public MqttServerOptionsBuilder WithDefaultEndpoint() { _options.DefaultEndpointOptions.IsEnabled = true; return this; } public MqttServerOptionsBuilder WithDefaultEndpointPort(int? value) { _options.DefaultEndpointOptions.Port = value; return this; } public MqttServerOptionsBuilder WithDefaultEndpointBoundIPAddress(IPAddress value) { _options.DefaultEndpointOptions.BoundIPAddress = value ?? IPAddress.Any; return this; } public MqttServerOptionsBuilder WithoutDefaultEndpoint() { _options.DefaultEndpointOptions.IsEnabled = false; return this; } public MqttServerOptionsBuilder WithEncryptedEndpoint() { _options.TlsEndpointOptions.IsEnabled = true; return this; } public MqttServerOptionsBuilder WithEncryptedEndpointPort(int? value) { _options.TlsEndpointOptions.Port = value; return this; } public MqttServerOptionsBuilder WithEncryptedEndpointBoundIPAddress(IPAddress value) { _options.TlsEndpointOptions.BoundIPAddress = value; return this; } public MqttServerOptionsBuilder WithEncryptionCertificate(byte[] value) { _options.TlsEndpointOptions.Certificate = value; return this; } public MqttServerOptionsBuilder WithoutEncryptedEndpoint() { _options.TlsEndpointOptions.IsEnabled = false; return this; } public MqttServerOptionsBuilder WithStorage(IMqttServerStorage value) { _options.Storage = value; return this; } public MqttServerOptionsBuilder WithConnectionValidator(Action<MqttConnectionValidatorContext> value) { _options.ConnectionValidator = value; return this; } public MqttServerOptionsBuilder WithApplicationMessageInterceptor(Action<MqttApplicationMessageInterceptorContext> value) { _options.ApplicationMessageInterceptor = value; return this; } public MqttServerOptionsBuilder WithSubscriptionInterceptor(Action<MqttSubscriptionInterceptorContext> value) { _options.SubscriptionInterceptor = value; return this; } public MqttServerOptionsBuilder WithPersistentSessions() { _options.EnablePersistentSessions = true; return this; } public IMqttServerOptions Build() { return _options; } } }