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.TCPNetworkModuleFactory; 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 增加 mqtt,与 tcp 等价建连。 */ public final class MqttNetworkModuleFactory implements NetworkModuleFactory { private static final TCPNetworkModuleFactory DELEGATE = new TCPNetworkModuleFactory(); @Override public Set getSupportedUriSchemes() { return Collections.singleton("mqtt"); } @Override public void validateURI(URI uri) throws IllegalArgumentException { DELEGATE.validateURI(toTcpUri(uri)); } @Override public NetworkModule createNetworkModule(URI uri, MqttConnectOptions options, String clientId) throws MqttException { return DELEGATE.createNetworkModule(toTcpUri(uri), options, clientId); } private static URI toTcpUri(URI uri) { try { return new URI( "tcp", uri.getRawUserInfo(), uri.getHost(), uri.getPort(), uri.getRawPath(), uri.getRawQuery(), uri.getRawFragment()); } catch (URISyntaxException e) { throw new IllegalArgumentException(e); } } }