/** * Copyright © 2016-2019 The Thingsboard Authors * * 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 com.config; import com.message.MqttLastWill; import com.sun.istack.internal.Nullable; import io.netty.channel.Channel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.mqtt.MqttVersion; import io.netty.handler.ssl.SslContext; import java.util.Random; @SuppressWarnings({"WeakerAccess", "unused"}) public final class MqttClientConfig { private final SslContext sslContext; private final String randomClientId; private String clientId; private int timeoutSeconds = 60; private MqttVersion protocolVersion = MqttVersion.MQTT_3_1; private String username = null; private String password = null; private boolean cleanSession = true; private MqttLastWill lastWill; private Class<? extends Channel> channelClass = NioSocketChannel.class; private boolean reconnect = true; private long reconnectDelay = 1L; private int maxBytesInMessage = 8092; public MqttClientConfig() { this(null); } public MqttClientConfig(SslContext sslContext) { this.sslContext = sslContext; Random random = new Random(); String id = "netty-mqtt/"; String[] options = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".split(""); for(int i = 0; i < 8; i++){ id += options[random.nextInt(options.length)]; } this.clientId = id; this.randomClientId = id; } public String getClientId() { return clientId; } public void setClientId(@Nullable String clientId) { if(clientId == null){ this.clientId = randomClientId; }else{ this.clientId = clientId; } } public int getTimeoutSeconds() { return timeoutSeconds; } public void setTimeoutSeconds(int timeoutSeconds) { if(timeoutSeconds != -1 && timeoutSeconds <= 0){ throw new IllegalArgumentException("timeoutSeconds must be > 0 or -1"); } this.timeoutSeconds = timeoutSeconds; } public MqttVersion getProtocolVersion() { return protocolVersion; } public void setProtocolVersion(MqttVersion protocolVersion) { if(protocolVersion == null){ throw new NullPointerException("protocolVersion"); } this.protocolVersion = protocolVersion; } @Nullable public String getUsername() { return username; } public void setUsername(@Nullable String username) { this.username = username; } @Nullable public String getPassword() { return password; } public void setPassword(@Nullable String password) { this.password = password; } public boolean isCleanSession() { return cleanSession; } public void setCleanSession(boolean cleanSession) { this.cleanSession = cleanSession; } @Nullable public MqttLastWill getLastWill() { return lastWill; } public void setLastWill(@Nullable MqttLastWill lastWill) { this.lastWill = lastWill; } public Class<? extends Channel> getChannelClass() { return channelClass; } public void setChannelClass(Class<? extends Channel> channelClass) { this.channelClass = channelClass; } public SslContext getSslContext() { return sslContext; } public boolean isReconnect() { return reconnect; } public void setReconnect(boolean reconnect) { this.reconnect = reconnect; } public long getReconnectDelay() { return reconnectDelay; } /** * Sets the reconnect delay in seconds. Defaults to 1 second. * @param reconnectDelay * @throws IllegalArgumentException if reconnectDelay is smaller than 1. */ public void setReconnectDelay(long reconnectDelay) { if (reconnectDelay <= 0) { throw new IllegalArgumentException("reconnectDelay must be > 0"); } this.reconnectDelay = reconnectDelay; } public int getMaxBytesInMessage() { return maxBytesInMessage; } /** * Sets the maximum number of bytes in the message for the {@link io.netty.handler.codec.mqtt.MqttDecoder}. * Default value is 8092 as specified by Netty. The absolute maximum size is 256MB as set by the MQTT spec. * * @param maxBytesInMessage * @throws IllegalArgumentException if maxBytesInMessage is smaller than 1 or greater than 256_000_000. */ public void setMaxBytesInMessage(int maxBytesInMessage) { if (maxBytesInMessage <= 0 || maxBytesInMessage > 256_000_000) { throw new IllegalArgumentException("maxBytesInMessage must be > 0 or < 256_000_000"); } this.maxBytesInMessage = maxBytesInMessage; } }