/*
 * Copyright 2016 Red Hat Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.vertx.mqtt;

import io.vertx.codegen.annotations.DataObject;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.impl.Arguments;
import io.vertx.core.json.JsonObject;
import io.vertx.core.net.JksOptions;
import io.vertx.core.net.KeyCertOptions;
import io.vertx.core.net.NetClientOptions;
import io.vertx.core.net.PemKeyCertOptions;
import io.vertx.core.net.PemTrustOptions;
import io.vertx.core.net.PfxOptions;
import io.vertx.core.net.TrustOptions;

Represents options used by the MQTT client.
/** * Represents options used by the MQTT client. */
@DataObject(generateConverter = true) public class MqttClientOptions extends NetClientOptions { public static final int DEFAULT_PORT = 1883; public static final int DEFAULT_TSL_PORT = 8883; public static final String DEFAULT_HOST = "localhost"; public static final int DEFAULT_WILL_QOS = 0; public static final int DEFAULT_KEEP_ALIVE_INTERVAL = 30; public static final int DEFAULT_MAX_INFLIGHT_QUEUE = 10; public static final boolean DEFAULT_CLEAN_SESSION = true; public static final boolean DEFAULT_WILL_FLAG = false; public static final boolean DEFAULT_WILL_RETAIN = false; public static final int DEFAULT_MAX_MESSAGE_SIZE = -1; public static final int DEFAULT_ACK_TIMEOUT = -1; private String clientId; private String username; private String password; private String willTopic; private String willMessage; private boolean cleanSession = DEFAULT_CLEAN_SESSION; private boolean willFlag = DEFAULT_WILL_FLAG; private int willQoS = DEFAULT_WILL_QOS; private boolean willRetain = DEFAULT_WILL_RETAIN; private int keepAliveInterval = DEFAULT_KEEP_ALIVE_INTERVAL; private boolean isAutoKeepAlive = true; private boolean isAutoGeneratedClientId = true; private int maxInflightQueue = DEFAULT_MAX_INFLIGHT_QUEUE; private int maxMessageSize = DEFAULT_MAX_MESSAGE_SIZE; private int ackTimeout = DEFAULT_ACK_TIMEOUT;
Default constructor
/** * Default constructor */
public MqttClientOptions() { super(); }
Create an instance of MqttClientOptions from JSON
Params:
  • json – the JSON
/** * Create an instance of MqttClientOptions from JSON * * @param json the JSON */
public MqttClientOptions(JsonObject json) { super(json); MqttClientOptionsConverter.fromJson(json, this); }
Copy constructor
Params:
  • other – the options to copy
/** * Copy constructor * * @param other the options to copy */
public MqttClientOptions(MqttClientOptions other) { super(other); this.clientId = other.clientId; this.username = other.username; this.password = other.password; this.willTopic = other.willTopic; this.willMessage = other.willMessage; this.cleanSession = other.cleanSession; this.willFlag = other.willFlag; this.willQoS = other.willQoS; this.willRetain = other.willRetain; this.keepAliveInterval = other.keepAliveInterval; this.isAutoKeepAlive = other.isAutoKeepAlive; this.isAutoGeneratedClientId = other.isAutoGeneratedClientId; this.maxInflightQueue = other.maxInflightQueue; this.maxMessageSize = other.maxMessageSize; this.ackTimeout = other.ackTimeout; }
Returns:if username is provided
/** * @return if username is provided */
public boolean hasUsername() { return username != null; }
Returns:if password is provided
/** * @return if password is provided */
public boolean hasPassword() { return password != null; }
Returns:if client wants to start with a clean session
/** * @return if client wants to start with a clean session */
public boolean isCleanSession() { return cleanSession; }
Returns:if will information are provided on connection
/** * @return if will information are provided on connection */
public boolean isWillFlag() { return willFlag; }
Returns:if the will messages must be retained
/** * @return if the will messages must be retained */
public boolean isWillRetain() { return willRetain; }
Returns:the QoS level for the will message
/** * @return the QoS level for the will message */
public int getWillQoS() { return willQoS; }
Returns:the keep alive interval (in seconds)
/** * @return the keep alive interval (in seconds) */
public int getKeepAliveInterval() { return keepAliveInterval; }
Returns:provided username
/** * @return provided username */
public String getUsername() { return username; }
Returns:provided password
/** * @return provided password */
public String getPassword() { return password; }
Returns:client identifier
/** * @return client identifier */
public String getClientId() { return clientId; }
Returns:topic on which the will message will be published
/** * @return topic on which the will message will be published */
public String getWillTopic() { return willTopic; }
Returns:will message content
/** * @return will message content */
public String getWillMessage() { return willMessage; }
Set the client identifier
Params:
  • clientId – client identifier
Returns:current options instance
/** * Set the client identifier * * @param clientId client identifier * @return current options instance */
public MqttClientOptions setClientId(String clientId) { this.clientId = clientId; return this; }
Set the username
Params:
  • username – username
Returns:current options instance
/** * Set the username * * @param username username * @return current options instance */
public MqttClientOptions setUsername(String username) { this.username = username; return this; }
Set the password
Params:
  • password – password
Returns:current options instance
/** * Set the password * * @param password password * @return current options instance */
public MqttClientOptions setPassword(String password) { this.password = password; return this; }
Set the topic on which the will message will be published
Params:
  • willTopic – topic on which the will message will be published
Returns:current options instance
/** * Set the topic on which the will message will be published * * @param willTopic topic on which the will message will be published * @return current options instance */
public MqttClientOptions setWillTopic(String willTopic) { this.willTopic = willTopic; return this; }
Set the content of the will message
Params:
  • willMessage – content of the will message
Returns:current options instance
/** * Set the content of the will message * * @param willMessage content of the will message * @return current options instance */
public MqttClientOptions setWillMessage(String willMessage) { this.willMessage = willMessage; return this; }
Set to start with a clean session (or not)
Params:
  • cleanSession – if clean session should be activated
Returns:current options instance
/** * Set to start with a clean session (or not) * * @param cleanSession if clean session should be activated * @return current options instance */
public MqttClientOptions setCleanSession(boolean cleanSession) { this.cleanSession = cleanSession; return this; }
Set if will information are provided on connection
Params:
  • willFlag – if will information are provided on connection
Returns:current options instance
/** * Set if will information are provided on connection * * @param willFlag if will information are provided on connection * @return current options instance */
public MqttClientOptions setWillFlag(boolean willFlag) { this.willFlag = willFlag; return this; }
Set the QoS level for the will message
Params:
  • willQoS – QoS level for the will message
Returns:current options instance
/** * Set the QoS level for the will message * * @param willQoS QoS level for the will message * @return current options instance */
public MqttClientOptions setWillQoS(int willQoS) { this.willQoS = willQoS; return this; }
Set if the will message must be retained
Params:
  • willRetain – if thw will message must be retained
Returns:current options instance
/** * Set if the will message must be retained * * @param willRetain if thw will message must be retained * @return current options instance */
public MqttClientOptions setWillRetain(boolean willRetain) { this.willRetain = willRetain; return this; }
Set the keep alive interval in seconds
Params:
  • keepAliveInterval – keep alive interval in seconds
Returns:current options instance
/** * Set the keep alive interval in seconds * * @param keepAliveInterval keep alive interval in seconds * @return current options instance */
public MqttClientOptions setKeepAliveInterval(int keepAliveInterval) { if (keepAliveInterval < 1) { throw new IllegalArgumentException("Invalid keep alive interval " + keepAliveInterval); } this.keepAliveInterval = keepAliveInterval; return this; }
Gets the time in seconds after which the client stops waiting for a PUBACK, PUBREC or PUBCOMP packet from the server in response to a packet it has sent.

The default value of this property is 10s.

Returns:timeout in seconds
/** * Gets the time in seconds after which the client stops waiting for a PUBACK, PUBREC * or PUBCOMP packet from the server in response to a packet it has sent. * <p> * The default value of this property is 10s. * * @return timeout in seconds */
public int getAckTimeout() { return this.ackTimeout; }
Sets the time in seconds after which the client will stop waiting for a PUBACK, PUBREC or PUBCOMP packet from the server in response to a packet it has sent.

The default value of this property is -1 which indicates that the client should wait an unlimited time for the server's acknowledgement.

Params:
  • ackTimeoutSeconds – timeout in seconds
Throws:
Returns:current options instance
/** * Sets the time in seconds after which the client will stop waiting for a PUBACK, PUBREC * or PUBCOMP packet from the server in response to a packet it has sent. * <p> * The default value of this property is -1 which indicates that the client should wait * an unlimited time for the server's acknowledgement. * * @param ackTimeoutSeconds timeout in seconds * @return current options instance * @throws IllegalArgumentException if the timeout is 0 or &lt; -1. */
public MqttClientOptions setAckTimeout(int ackTimeoutSeconds) { if (ackTimeoutSeconds == 0 || ackTimeoutSeconds < -1) { throw new IllegalArgumentException("timeout must be > 0 or equal to -1"); } this.ackTimeout = ackTimeoutSeconds; return this; }
Returns:max count of unacknowledged messages
/** * @return max count of unacknowledged messages */
public int getMaxInflightQueue() { return maxInflightQueue; }
Set max count of unacknowledged messages
Params:
  • maxInflightQueue – max count of unacknowledged messages
Returns:current options instance
/** * Set max count of unacknowledged messages * @param maxInflightQueue max count of unacknowledged messages * @return current options instance */
public MqttClientOptions setMaxInflightQueue(int maxInflightQueue) { this.maxInflightQueue = maxInflightQueue; return this; }
Set if the MQTT client must handle PINGREQ automatically (default is true)
Params:
  • isAutoKeepAlive – ping request handled automatically
Returns: current options instance
/** * Set if the MQTT client must handle PINGREQ automatically * (default is true) * * @param isAutoKeepAlive ping request handled automatically * @return current options instance */
public MqttClientOptions setAutoKeepAlive(boolean isAutoKeepAlive) { this.isAutoKeepAlive = isAutoKeepAlive; return this; }
Set if the MQTT client must generate clientId automatically (default is true)
Params:
  • isAutoGeneratedClientId – clientId generated automatically
Returns: current options instance
/** * Set if the MQTT client must generate clientId automatically * (default is true) * * @param isAutoGeneratedClientId clientId generated automatically * @return current options instance */
public MqttClientOptions setAutoGeneratedClientId(boolean isAutoGeneratedClientId) { this.isAutoGeneratedClientId = isAutoGeneratedClientId; return this; }
Returns:if the PINGREQ is handled automatically
/** * @return if the PINGREQ is handled automatically */
public boolean isAutoKeepAlive() { return this.isAutoKeepAlive; }
Returns:if clientId generated automatically
/** * @return if clientId generated automatically */
public boolean isAutoGeneratedClientId() { return isAutoGeneratedClientId; }
Returns:max MQTT message size
/** * @return max MQTT message size */
public int getMaxMessageSize() { return maxMessageSize; } @Override public MqttClientOptions setReceiveBufferSize(int receiveBufferSize) { if ((this.maxMessageSize > 0) && (receiveBufferSize > 0)) { Arguments.require(receiveBufferSize >= this.maxMessageSize, "Receiver buffer size can't be lower than max message size"); } super.setReceiveBufferSize(receiveBufferSize); return this; }
Set max MQTT message size
Params:
  • maxMessageSize – max MQTT message size
Returns: MQTT client options instance
/** * Set max MQTT message size * * @param maxMessageSize max MQTT message size * @return MQTT client options instance */
public MqttClientOptions setMaxMessageSize(int maxMessageSize) { Arguments.require(maxMessageSize > 0 || maxMessageSize == DEFAULT_MAX_MESSAGE_SIZE, "maxMessageSize must be > 0"); if ((maxMessageSize > 0) && (this.getReceiveBufferSize() > 0)) { Arguments.require(this.getReceiveBufferSize() >= maxMessageSize, "Receiver buffer size can't be lower than max message size"); } this.maxMessageSize = maxMessageSize; return this; }
Do the same thing as setKeepAliveInterval(int) (int)}. Use it instead.
/** * Do the same thing as {@link MqttClientOptions#setKeepAliveInterval(int)} (int)}. Use it instead. */
@Deprecated @Override public MqttClientOptions setIdleTimeout(int idleTimeout) { return setKeepAliveInterval(idleTimeout); } @Override public MqttClientOptions setSsl(boolean ssl) { super.setSsl(ssl); return this; } @Override public MqttClientOptions setTrustStoreOptions(JksOptions options) { super.setTrustStoreOptions(options); return this; } @Override public MqttClientOptions setTrustAll(boolean trustAll) { super.setTrustAll(trustAll); return this; } @Override public MqttClientOptions setKeyCertOptions(KeyCertOptions options) { super.setKeyCertOptions(options); return this; } @Override public MqttClientOptions setKeyStoreOptions(JksOptions options) { super.setKeyStoreOptions(options); return this; } @Override public MqttClientOptions setPfxKeyCertOptions(PfxOptions options) { super.setPfxKeyCertOptions(options); return this; } @Override public MqttClientOptions setPemKeyCertOptions(PemKeyCertOptions options) { super.setPemKeyCertOptions(options); return this; } @Override public MqttClientOptions setTrustOptions(TrustOptions options) { super.setTrustOptions(options); return this; } @Override public MqttClientOptions setPemTrustOptions(PemTrustOptions options) { super.setPemTrustOptions(options); return this; } @Override public MqttClientOptions setPfxTrustOptions(PfxOptions options) { super.setPfxTrustOptions(options); return this; } @Override public MqttClientOptions addEnabledCipherSuite(String suite) { super.addEnabledCipherSuite(suite); return this; } @Override public MqttClientOptions addEnabledSecureTransportProtocol(String protocol) { super.addEnabledSecureTransportProtocol(protocol); return this; } @Override public MqttClientOptions addCrlPath(String crlPath) throws NullPointerException { super.addCrlPath(crlPath); return this; } @Override public MqttClientOptions addCrlValue(Buffer crlValue) throws NullPointerException { super.addCrlValue(crlValue); return this; } @Override public String toString() { return "Options {" + "clientId='" + clientId + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + ", willTopic='" + willTopic + '\'' + ", willMessage='" + willMessage + '\'' + ", cleanSession=" + cleanSession + ", willFlag=" + willFlag + ", willQoS=" + willQoS + ", willRetain=" + willRetain + ", keepAliveTimeSeconds=" + keepAliveInterval + ", isAutoKeepAlive=" + isAutoKeepAlive + ", isAutoGeneratedClientId=" + isAutoGeneratedClientId + '}'; } }