Fix wrong password issue and infinity reconnects issue
This commit is contained in:
parent
16a9392fa6
commit
e99c3f5742
@ -13,6 +13,7 @@ class HomeAssistant {
|
|||||||
int _servicesMessageId = 0;
|
int _servicesMessageId = 0;
|
||||||
int _subscriptionMessageId = 0;
|
int _subscriptionMessageId = 0;
|
||||||
int _configMessageId = 0;
|
int _configMessageId = 0;
|
||||||
|
int _userInfoMessageId = 0;
|
||||||
EntityCollection _entities;
|
EntityCollection _entities;
|
||||||
ViewBuilder _viewBuilder;
|
ViewBuilder _viewBuilder;
|
||||||
Map _instanceConfig = {};
|
Map _instanceConfig = {};
|
||||||
@ -24,6 +25,7 @@ class HomeAssistant {
|
|||||||
Completer _connectionCompleter;
|
Completer _connectionCompleter;
|
||||||
Timer _connectionTimer;
|
Timer _connectionTimer;
|
||||||
Timer _fetchTimer;
|
Timer _fetchTimer;
|
||||||
|
bool autoReconnect = false;
|
||||||
|
|
||||||
StreamSubscription _socketSubscription;
|
StreamSubscription _socketSubscription;
|
||||||
|
|
||||||
@ -70,8 +72,10 @@ class HomeAssistant {
|
|||||||
await _hassioChannel.sink.close().timeout(Duration(seconds: 3),
|
await _hassioChannel.sink.close().timeout(Duration(seconds: 3),
|
||||||
onTimeout: () => TheLogger.log("Warning", "Socket sink closing timeout")
|
onTimeout: () => TheLogger.log("Warning", "Socket sink closing timeout")
|
||||||
);
|
);
|
||||||
|
await _socketSubscription.cancel();
|
||||||
_hassioChannel = null;
|
_hassioChannel = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future _connection() {
|
Future _connection() {
|
||||||
@ -79,6 +83,7 @@ class HomeAssistant {
|
|||||||
TheLogger.log("Debug","Previous connection is not complited");
|
TheLogger.log("Debug","Previous connection is not complited");
|
||||||
} else {
|
} else {
|
||||||
_connectionCompleter = new Completer();
|
_connectionCompleter = new Completer();
|
||||||
|
autoReconnect = false;
|
||||||
if ((_hassioChannel == null) || (_hassioChannel.closeCode != null)) {
|
if ((_hassioChannel == null) || (_hassioChannel.closeCode != null)) {
|
||||||
disconnect().then((_){
|
disconnect().then((_){
|
||||||
TheLogger.log("Debug", "Socket connecting...");
|
TheLogger.log("Debug", "Socket connecting...");
|
||||||
@ -92,15 +97,17 @@ class HomeAssistant {
|
|||||||
_hassioChannel = IOWebSocketChannel.connect(
|
_hassioChannel = IOWebSocketChannel.connect(
|
||||||
_hassioAPIEndpoint, pingInterval: Duration(seconds: 30));
|
_hassioAPIEndpoint, pingInterval: Duration(seconds: 30));
|
||||||
_socketSubscription = _hassioChannel.stream.listen(
|
_socketSubscription = _hassioChannel.stream.listen(
|
||||||
(message) => _handleMessage(_connectionCompleter, message),
|
(message) => _handleMessage(message),
|
||||||
cancelOnError: true,
|
cancelOnError: true,
|
||||||
onDone: () {
|
onDone: () {
|
||||||
TheLogger.log("Debug","Disconnect detected. Reconnecting...");
|
TheLogger.log("Debug","Socket disconnected. Automatic reconnect is $autoReconnect");
|
||||||
disconnect().then((_) {
|
if (autoReconnect) {
|
||||||
_connection().catchError((e){
|
disconnect().then((_) {
|
||||||
_completeConnecting(e);
|
_connection().catchError((e){
|
||||||
|
_completeConnecting(e);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
},
|
},
|
||||||
onError: (e) {
|
onError: (e) {
|
||||||
TheLogger.log("Error","Socket stream Error: $e");
|
TheLogger.log("Error","Socket stream Error: $e");
|
||||||
@ -120,6 +127,7 @@ class HomeAssistant {
|
|||||||
_getConfig().then((result) {
|
_getConfig().then((result) {
|
||||||
_getStates().then((result) {
|
_getStates().then((result) {
|
||||||
_getServices().then((result) {
|
_getServices().then((result) {
|
||||||
|
_getUserInfo();
|
||||||
_completeFetching(null);
|
_completeFetching(null);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -133,11 +141,10 @@ class HomeAssistant {
|
|||||||
_completeConnecting(error);
|
_completeConnecting(error);
|
||||||
if (!_fetchCompleter.isCompleted) {
|
if (!_fetchCompleter.isCompleted) {
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
disconnect().then((_){
|
_fetchCompleter.completeError(error);
|
||||||
_fetchCompleter.completeError(error);
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
_fetchCompleter.complete();
|
_fetchCompleter.complete();
|
||||||
|
autoReconnect = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,7 +162,7 @@ class HomeAssistant {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleMessage(Completer connectionCompleter, String message) {
|
_handleMessage(String message) {
|
||||||
var data = json.decode(message);
|
var data = json.decode(message);
|
||||||
//TheLogger.log("Debug","[Received] => Message type: ${data['type']}");
|
//TheLogger.log("Debug","[Received] => Message type: ${data['type']}");
|
||||||
if (data["type"] == "auth_required") {
|
if (data["type"] == "auth_required") {
|
||||||
@ -164,7 +171,7 @@ class HomeAssistant {
|
|||||||
_completeConnecting(null);
|
_completeConnecting(null);
|
||||||
_sendSubscribe();
|
_sendSubscribe();
|
||||||
} else if (data["type"] == "auth_invalid") {
|
} else if (data["type"] == "auth_invalid") {
|
||||||
_completeFetching({"errorCode": 6, "errorMessage": "${data["message"]}"});
|
_completeConnecting({"errorCode": 6, "errorMessage": "${data["message"]}"});
|
||||||
} else if (data["type"] == "result") {
|
} else if (data["type"] == "result") {
|
||||||
if (data["id"] == _configMessageId) {
|
if (data["id"] == _configMessageId) {
|
||||||
_parseConfig(data);
|
_parseConfig(data);
|
||||||
@ -172,6 +179,8 @@ class HomeAssistant {
|
|||||||
_parseEntities(data);
|
_parseEntities(data);
|
||||||
} else if (data["id"] == _servicesMessageId) {
|
} else if (data["id"] == _servicesMessageId) {
|
||||||
_parseServices(data);
|
_parseServices(data);
|
||||||
|
} else if (data["id"] == _userInfoMessageId) {
|
||||||
|
TheLogger.log("Debug","User ingo: $message");
|
||||||
} else if (data["id"] == _currentMessageId) {
|
} else if (data["id"] == _currentMessageId) {
|
||||||
TheLogger.log("Debug","Request id:$_currentMessageId was successful");
|
TheLogger.log("Debug","Request id:$_currentMessageId was successful");
|
||||||
}
|
}
|
||||||
@ -212,6 +221,15 @@ class HomeAssistant {
|
|||||||
return _statesCompleter.future;
|
return _statesCompleter.future;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _getUserInfo() {
|
||||||
|
//_servicesCompleter = new Completer();
|
||||||
|
_incrementMessageId();
|
||||||
|
_userInfoMessageId = _currentMessageId;
|
||||||
|
_sendMessageRaw('{"id": $_userInfoMessageId, "type": "auth/current_user"}', false);
|
||||||
|
|
||||||
|
//return _servicesCompleter.future;
|
||||||
|
}
|
||||||
|
|
||||||
Future _getServices() {
|
Future _getServices() {
|
||||||
_servicesCompleter = new Completer();
|
_servicesCompleter = new Completer();
|
||||||
_incrementMessageId();
|
_incrementMessageId();
|
||||||
|
@ -113,7 +113,9 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver {
|
|||||||
_settingsSubscription = eventBus.on<SettingsChangedEvent>().listen((event) {
|
_settingsSubscription = eventBus.on<SettingsChangedEvent>().listen((event) {
|
||||||
TheLogger.log("Debug","Settings change event: reconnect=${event.reconnect}");
|
TheLogger.log("Debug","Settings change event: reconnect=${event.reconnect}");
|
||||||
if (event.reconnect) {
|
if (event.reconnect) {
|
||||||
_initialLoad();
|
_homeAssistant.disconnect().then((_){
|
||||||
|
_initialLoad();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
_initialLoad();
|
_initialLoad();
|
||||||
|
Reference in New Issue
Block a user