connect method
Implementation
Future<bool> connect() async {
if (_socket != null && _socketConnected == true) {
return _socketConnected;
}
try {
// Create socket connection
_socket = await Socket.connect(InternetAddress(ip), port, timeout: const Duration(seconds: 1))
..setOption(SocketOption.tcpNoDelay, true);
// Add socket listener
_socketDataSubscription = _socket!.listen(
_handleAdbInput,
onDone: () {
_socketConnected = false;
_socketConnectedController.add(_socketConnected);
},
onError: (error) {
_socketConnected = false;
_socketConnectedController.add(_socketConnected);
},
);
_socketConnected = true;
_socketConnectedController.add(_socketConnected);
// Listen to adb messages
await _adbMessageSubscription?.cancel();
_adbMessageSubscription = _adbStreamController.stream
.where((message) => AdbProtocol.validateAdbMessage(message))
.listen((message) async {
await _handleAdbMessage(message);
});
await _socketConnectedSubscription?.cancel();
_socketConnectedSubscription =
_socketConnectedController.stream.listen((connected) => connected ? {} : _adbConnectedController.add(false));
// Send connection init
await _connectAdb();
// wait for adbConnected
return await _adbConnectedController.stream.first;
} catch (e) {
print('Failed to connect to ADB: $e');
return false;
}
}