2323#include " SinricProQueue.h"
2424namespace 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 {
6976WebsocketListener::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() {
105113void 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() {
133142void WebsocketListener::stop () {
134143 disconnect ();
135144 _begin = false ;
145+ connectionState = ConnectionState::disconnected;
136146}
137147
138148void 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