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<String> 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);
|
}
|
}
|
}
|