package com.zy.integration.iot.paho; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.internal.NetworkModule; import org.eclipse.paho.client.mqttv3.internal.SSLNetworkModuleFactory; import org.eclipse.paho.client.mqttv3.spi.NetworkModuleFactory; import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; import java.util.Set; /** * Paho 仅内置 ssl/tcp/ws/wss,通过 SPI 增加 mqtts,与 ssl 等价建连。 */ public final class MqttsNetworkModuleFactory implements NetworkModuleFactory { private static final SSLNetworkModuleFactory DELEGATE = new SSLNetworkModuleFactory(); @Override public Set getSupportedUriSchemes() { return Collections.singleton("mqtts"); } @Override public void validateURI(URI uri) throws IllegalArgumentException { DELEGATE.validateURI(toSslUri(uri)); } @Override public NetworkModule createNetworkModule(URI uri, MqttConnectOptions options, String clientId) throws MqttException { return DELEGATE.createNetworkModule(toSslUri(uri), options, clientId); } private static URI toSslUri(URI uri) { try { return new URI( "ssl", uri.getRawUserInfo(), uri.getHost(), uri.getPort(), uri.getRawPath(), uri.getRawQuery(), uri.getRawFragment()); } catch (URISyntaxException e) { throw new IllegalArgumentException(e); } } }