Skip to content

Commit 0c27c8c

Browse files
committed
Fixed:
- SinricPro.isConnected() still returns true if the connection was lost - onDisconnectCallback does not fire if the connection is lost.
1 parent 443cdd2 commit 0c27c8c

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

src/SinricPro.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,11 +243,9 @@ void SinricProClass::handle() {
243243
return;
244244
}
245245

246-
if (WiFi.isConnected()) {
247-
if (!isConnected()) connect();
248-
_websocketListener.handle();
249-
_udpListener.handle();
250-
}
246+
if (!isConnected()) connect();
247+
_websocketListener.handle();
248+
_udpListener.handle();
251249

252250
handleReceiveQueue();
253251
handleSendQueue();

src/SinricProWebsocket.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@
2323
#include "SinricProQueue.h"
2424
namespace SINRICPRO_NAMESPACE {
2525

26+
enum class ConnectionState {
27+
disconnected,
28+
connecting,
29+
connected
30+
};
31+
2632
#if !defined(WEBSOCKETS_VERSION_INT) || (WEBSOCKETS_VERSION_INT < 2003005)
2733
#error "Wrong WebSockets Version! Minimum Version is 2.3.5!!!"
2834
#endif
@@ -53,6 +59,7 @@ class WebsocketListener : protected WebSocketsClient {
5359
protected:
5460
bool _begin;
5561
bool restoreDeviceStates;
62+
ConnectionState connectionState;
5663

5764
wsConnectedCallback _wsConnectedCb;
5865
wsDisconnectedCallback _wsDisconnectedCb;
@@ -69,6 +76,7 @@ class WebsocketListener : protected WebSocketsClient {
6976
WebsocketListener::WebsocketListener()
7077
: _begin(false)
7178
, restoreDeviceStates(false)
79+
, connectionState(ConnectionState::disconnected)
7280
, _wsConnectedCb(nullptr)
7381
, _wsDisconnectedCb(nullptr)
7482
, _wsPongCb(nullptr) {}
@@ -105,6 +113,7 @@ void WebsocketListener::setExtraHeaders() {
105113
void WebsocketListener::begin(String server, String appKey, String deviceIds, SinricProQueue_t* receiveQueue) {
106114
if (_begin) return;
107115
_begin = true;
116+
connectionState = ConnectionState::connecting;
108117

109118
this->receiveQueue = receiveQueue;
110119
this->appKey = appKey;
@@ -133,6 +142,7 @@ void WebsocketListener::handle() {
133142
void WebsocketListener::stop() {
134143
disconnect();
135144
_begin = false;
145+
connectionState = ConnectionState::disconnected;
136146
}
137147

138148
void WebsocketListener::setRestoreDeviceStates(bool flag) {
@@ -161,8 +171,9 @@ void WebsocketListener::runCbEvent(WStype_t type, uint8_t* payload, size_t lengt
161171
switch (type) {
162172
case WStype_DISCONNECTED: {
163173
DEBUG_SINRIC("[SinricPro:Websocket]: disconnected\r\n");
164-
if (_wsDisconnectedCb) _wsDisconnectedCb();
165-
}
174+
if (connectionState == ConnectionState::connected && _wsDisconnectedCb) _wsDisconnectedCb();
175+
connectionState = ConnectionState::disconnected;
176+
}
166177
break;
167178

168179
case WStype_CONNECTED:
@@ -172,6 +183,7 @@ void WebsocketListener::runCbEvent(WStype_t type, uint8_t* payload, size_t lengt
172183
restoreDeviceStates = false;
173184
setExtraHeaders();
174185
}
186+
connectionState = ConnectionState::connected;
175187
break;
176188

177189
case WStype_TEXT: {

0 commit comments

Comments
 (0)