COnnection closing improvements
This commit is contained in:
@ -25,9 +25,11 @@ class HomeAssistant {
|
|||||||
Timer _connectionTimer;
|
Timer _connectionTimer;
|
||||||
Timer _fetchTimer;
|
Timer _fetchTimer;
|
||||||
|
|
||||||
|
StreamSubscription _socketSubscription;
|
||||||
|
|
||||||
int messageExpirationTime = 50; //seconds
|
int messageExpirationTime = 50; //seconds
|
||||||
Duration fetchTimeout = Duration(seconds: 30);
|
Duration fetchTimeout = Duration(seconds: 45);
|
||||||
Duration connectTimeout = Duration(seconds: 10);
|
Duration connectTimeout = Duration(seconds: 15);
|
||||||
|
|
||||||
String get locationName => _instanceConfig["location_name"] ?? "";
|
String get locationName => _instanceConfig["location_name"] ?? "";
|
||||||
int get viewsCount => _entities.viewList.length ?? 0;
|
int get viewsCount => _entities.viewList.length ?? 0;
|
||||||
@ -51,6 +53,7 @@ class HomeAssistant {
|
|||||||
_fetchCompleter = new Completer();
|
_fetchCompleter = new Completer();
|
||||||
_fetchTimer = Timer(fetchTimeout, () {
|
_fetchTimer = Timer(fetchTimeout, () {
|
||||||
closeConnection();
|
closeConnection();
|
||||||
|
TheLogger.log("Error", "Data fetching timeout");
|
||||||
_finishFetching({"errorCode" : 9,"errorMessage": "Couldn't get data from server"});
|
_finishFetching({"errorCode" : 9,"errorMessage": "Couldn't get data from server"});
|
||||||
});
|
});
|
||||||
_connection().then((r) {
|
_connection().then((r) {
|
||||||
@ -63,10 +66,15 @@ class HomeAssistant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
closeConnection() {
|
closeConnection() {
|
||||||
if (_hassioChannel?.closeCode == null) {
|
if (_socketSubscription != null) {
|
||||||
_hassioChannel?.sink?.close();
|
_socketSubscription.cancel();
|
||||||
|
}
|
||||||
|
if (_hassioChannel != null) {
|
||||||
|
if (_hassioChannel.closeCode == null) {
|
||||||
|
_hassioChannel.sink?.close();
|
||||||
|
}
|
||||||
|
_hassioChannel = null;
|
||||||
}
|
}
|
||||||
_hassioChannel = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future _connection() {
|
Future _connection() {
|
||||||
@ -74,10 +82,12 @@ class HomeAssistant {
|
|||||||
TheLogger.log("Debug","Previous connection is not complited");
|
TheLogger.log("Debug","Previous connection is not complited");
|
||||||
} else {
|
} else {
|
||||||
if ((_hassioChannel == null) || (_hassioChannel.sink == null) || (_hassioChannel.closeCode != null)) {
|
if ((_hassioChannel == null) || (_hassioChannel.sink == null) || (_hassioChannel.closeCode != null)) {
|
||||||
|
closeConnection();
|
||||||
TheLogger.log("Debug", "Socket connecting...");
|
TheLogger.log("Debug", "Socket connecting...");
|
||||||
_connectionCompleter = new Completer();
|
_connectionCompleter = new Completer();
|
||||||
_connectionTimer = Timer(connectTimeout, () {
|
_connectionTimer = Timer(connectTimeout, () {
|
||||||
closeConnection();
|
closeConnection();
|
||||||
|
TheLogger.log("Error", "Socket connection timeout");
|
||||||
_finishConnecting({"errorCode" : 1,"errorMessage": "Couldn't connect to Home Assistant. Looks like a network issues"});
|
_finishConnecting({"errorCode" : 1,"errorMessage": "Couldn't connect to Home Assistant. Looks like a network issues"});
|
||||||
});
|
});
|
||||||
_hassioChannel = IOWebSocketChannel.connect(
|
_hassioChannel = IOWebSocketChannel.connect(
|
||||||
@ -85,7 +95,8 @@ class HomeAssistant {
|
|||||||
_hassioChannel.stream.handleError((e) {
|
_hassioChannel.stream.handleError((e) {
|
||||||
TheLogger.log("Error", "Unhandled socket error: ${e.toString()}");
|
TheLogger.log("Error", "Unhandled socket error: ${e.toString()}");
|
||||||
});
|
});
|
||||||
_hassioChannel.stream.listen((message) =>
|
if (_socketSubscription != null) _socketSubscription.cancel();
|
||||||
|
_socketSubscription = _hassioChannel.stream.listen((message) =>
|
||||||
_handleMessage(_connectionCompleter, message));
|
_handleMessage(_connectionCompleter, message));
|
||||||
_hassioChannel.sink.done.whenComplete(() {
|
_hassioChannel.sink.done.whenComplete(() {
|
||||||
TheLogger.log("Debug","Socket sink finished. Assuming it is closed.");
|
TheLogger.log("Debug","Socket sink finished. Assuming it is closed.");
|
||||||
|
Reference in New Issue
Block a user