Handle some socket exceptions

This commit is contained in:
Yegor Vialov 2019-11-29 11:21:45 +00:00
parent cd81fc72fd
commit dd5f8b155d

View File

@ -129,6 +129,7 @@ class ConnectionManager {
connecting = Completer(); connecting = Completer();
_disconnect().then((_) { _disconnect().then((_) {
Logger.d("Socket connecting..."); Logger.d("Socket connecting...");
try {
_socket = IOWebSocketChannel.connect( _socket = IOWebSocketChannel.connect(
_webSocketAPIEndpoint, pingInterval: Duration(seconds: 15)); _webSocketAPIEndpoint, pingInterval: Duration(seconds: 15));
_socketSubscription = _socket.stream.listen( _socketSubscription = _socket.stream.listen(
@ -163,6 +164,9 @@ class ConnectionManager {
onDone: () => _handleSocketClose(connecting), onDone: () => _handleSocketClose(connecting),
onError: (e) => _handleSocketError(e, connecting) onError: (e) => _handleSocketError(e, connecting)
); );
} catch(exeption) {
connecting.completeError(HAError("${exeption.toString()}"));
}
}); });
return connecting.future; return connecting.future;
} }
@ -214,38 +218,24 @@ class ConnectionManager {
void _handleSocketClose(Completer connectionCompleter) { void _handleSocketClose(Completer connectionCompleter) {
Logger.d("Socket disconnected."); Logger.d("Socket disconnected.");
_disconnect().then((_) {
if (!connectionCompleter.isCompleted) { if (!connectionCompleter.isCompleted) {
isConnected = false; isConnected = false;
connectionCompleter.completeError(HAError("Disconnected", actions: [HAErrorAction.reconnect()])); connectionCompleter.completeError(HAError("Disconnected", actions: [HAErrorAction.reconnect()]));
} else { }
_disconnect().then((_) {
Timer(Duration(seconds: 5), () {
Logger.d("Trying to reconnect...");
_connect().catchError((e) {
isConnected = false;
eventBus.fire(ShowErrorEvent(HAError("Unable to connect to Home Assistant"))); eventBus.fire(ShowErrorEvent(HAError("Unable to connect to Home Assistant")));
}); });
});
});
}
} }
void _handleSocketError(e, Completer connectionCompleter) { void _handleSocketError(e, Completer connectionCompleter) {
Logger.e("Socket stream Error: $e"); Logger.e("Socket stream Error: $e");
_disconnect().then((_) {
if (!connectionCompleter.isCompleted) { if (!connectionCompleter.isCompleted) {
isConnected = false; isConnected = false;
connectionCompleter.completeError(HAError("Unable to connect to Home Assistant")); connectionCompleter.completeError(HAError("Disconnected", actions: [HAErrorAction.reconnect()]));
} else { }
_disconnect().then((_) {
Timer(Duration(seconds: 5), () {
Logger.d("Trying to reconnect...");
_connect().catchError((e) {
isConnected = false;
eventBus.fire(ShowErrorEvent(HAError("Unable to connect to Home Assistant"))); eventBus.fire(ShowErrorEvent(HAError("Unable to connect to Home Assistant")));
}); });
});
});
}
} }
Future _authenticate() { Future _authenticate() {