connect method
Connect
Implementation
@override
Future<MqttClientConnectionStatus?> connect(String server, int port) {
final completer = Completer<MqttClientConnectionStatus?>();
MqttLogger.log('MqttBrowserWsConnection::connect - entered');
// Add the port if present
Uri uri;
try {
uri = Uri.parse(server);
} on Exception {
final message =
'MqttBrowserWsConnection::connect - The URI supplied for the WS '
'connection is not valid - $server';
throw NoConnectionException(message);
}
if (uri.scheme != 'ws' && uri.scheme != 'wss') {
final message =
'MqttBrowserWsConnection::connect - The URI supplied for the WS has '
'an incorrect scheme - $server';
throw NoConnectionException(message);
}
uri = uri.replace(port: port);
final uriString = uri.toString();
MqttLogger.log('MqttBrowserWsConnection::connect - WS URL is $uriString');
try {
// Connect and save the socket.
final client = WebSocket(uriString, protocols);
this.client = client;
client.binaryType = 'arraybuffer';
messageStream = MqttByteBuffer(typed.Uint8Buffer());
StreamSubscription<Event>? openEvents;
StreamSubscription<CloseEvent>? closeEvents;
StreamSubscription<Event>? errorEvents;
openEvents = client.onOpen.listen((e) {
MqttLogger.log('MqttBrowserWsConnection::connect - websocket is open');
openEvents?.cancel();
closeEvents?.cancel();
errorEvents?.cancel();
_startListening();
return completer.complete();
});
closeEvents = client.onClose.listen((e) {
MqttLogger.log(
'MqttBrowserWsConnection::connect - websocket is closed');
openEvents?.cancel();
closeEvents?.cancel();
errorEvents?.cancel();
return completer.complete(MqttClientConnectionStatus());
});
errorEvents = client.onError.listen((e) {
MqttLogger.log(
'MqttBrowserWsConnection::connect - websocket has erred');
openEvents?.cancel();
closeEvents?.cancel();
errorEvents?.cancel();
return completer.complete(MqttClientConnectionStatus());
});
} on Exception {
final message =
'MqttBrowserWsConnection::connect - The connection to the message broker '
'{$uriString} could not be made.';
throw NoConnectionException(message);
}
MqttLogger.log('MqttBrowserWsConnection::connect - connection is waiting');
return completer.future;
}