connect method
Future<void>
connect(
)
override
Implementation
@override
Future<void> connect() async {
if (_started) throw StateError('Websocket connector has already been used');
_started = true;
WebSocketChannel? channel;
try {
channel = WebSocketChannel.connect(Uri.parse(address));
_wsChannel = channel;
_wsSubscription = channel.stream.listen(
(element) {
try {
final msgs = jsonDecode(element);
for (final msg in msgs) {
_serverMessageStream.add(ButtplugServerMessage.fromJson(msg));
}
} catch (_) {
unawaited(disconnect());
}
},
onError: (Object error, StackTrace stackTrace) {
unawaited(disconnect());
},
onDone: () {
unawaited(disconnect());
},
);
await channel.ready;
if (!identical(_wsChannel, channel)) {
throw ButtplugClientException('Connection closed during connect');
}
} catch (_) {
await disconnect();
rethrow;
}
}