mirror of
https://github.com/Links2004/arduinoWebSockets.git
synced 2025-07-15 00:06:30 +02:00
first parts of client working
This commit is contained in:
@ -67,6 +67,8 @@ void WebSocketsClient::begin(const char *host, uint16_t port, const char * url)
|
|||||||
// todo find better seed
|
// todo find better seed
|
||||||
randomSeed(millis());
|
randomSeed(millis());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
asyncConnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebSocketsClient::begin(String host, uint16_t port, String url) {
|
void WebSocketsClient::begin(String host, uint16_t port, String url) {
|
||||||
@ -85,11 +87,12 @@ void WebSocketsClient::beginSSL(String host, uint16_t port, String url, String f
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC)
|
||||||
/**
|
/**
|
||||||
* called in arduino loop
|
* called in arduino loop
|
||||||
*/
|
*/
|
||||||
void WebSocketsClient::loop(void) {
|
void WebSocketsClient::loop(void) {
|
||||||
#if (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC)
|
|
||||||
if(!clientIsConnected(&_client)) {
|
if(!clientIsConnected(&_client)) {
|
||||||
|
|
||||||
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
|
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
|
||||||
@ -120,37 +123,16 @@ void WebSocketsClient::loop(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(_client.tcp->connect(_host.c_str(), _port)) {
|
if(_client.tcp->connect(_host.c_str(), _port)) {
|
||||||
DEBUG_WEBSOCKETS("[WS-Client] connected to %s:%u.\n", _host.c_str(), _port);
|
connectedCb();
|
||||||
|
|
||||||
_client.status = WSC_HEADER;
|
|
||||||
|
|
||||||
// set Timeout for readBytesUntil and readStringUntil
|
|
||||||
_client.tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT);
|
|
||||||
|
|
||||||
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
|
|
||||||
_client.tcp->setNoDelay(true);
|
|
||||||
|
|
||||||
if(_client.isSSL && _fingerprint.length()) {
|
|
||||||
if(!_client.ssl->verify(_fingerprint.c_str(), _host.c_str())) {
|
|
||||||
DEBUG_WEBSOCKETS("[WS-Client] certificate mismatch\n");
|
|
||||||
WebSockets::clientDisconnect(&_client, 1000);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// send Header to Server
|
|
||||||
sendHeader(&_client);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
DEBUG_WEBSOCKETS("[WS-Client] connection to %s:%u Faild\n", _host.c_str(), _port);
|
connectFailedCb();
|
||||||
delay(10); //some little delay to not flood the server
|
delay(10); //some little delay to not flood the server
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
handleClientData();
|
handleClientData();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set callback function
|
* set callback function
|
||||||
@ -511,3 +493,89 @@ void WebSocketsClient::handleHeader(WSclient_t * client, String * headerLine) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebSocketsClient::connectedCb() {
|
||||||
|
|
||||||
|
DEBUG_WEBSOCKETS("[WS-Client] connected to %s:%u.\n", _host.c_str(), _port);
|
||||||
|
|
||||||
|
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
|
||||||
|
_client.tcp->onDisconnect(std::bind([](WebSocketsClient * c, AsyncTCPbuffer * obj, WSclient_t * client) -> bool {
|
||||||
|
DEBUG_WEBSOCKETS("[WS-Server][%d] Disconnect client\n", client->num);
|
||||||
|
client->status = WSC_NOT_CONNECTED;
|
||||||
|
client->tcp = NULL;
|
||||||
|
|
||||||
|
// reconnect
|
||||||
|
// c->asyncConnect();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}, this, std::placeholders::_1, &_client));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_client.status = WSC_HEADER;
|
||||||
|
|
||||||
|
#if (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC)
|
||||||
|
// set Timeout for readBytesUntil and readStringUntil
|
||||||
|
_client.tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
|
||||||
|
_client.tcp->setNoDelay(true);
|
||||||
|
|
||||||
|
if(_client.isSSL && _fingerprint.length()) {
|
||||||
|
if(!_client.ssl->verify(_fingerprint.c_str(), _host.c_str())) {
|
||||||
|
DEBUG_WEBSOCKETS("[WS-Client] certificate mismatch\n");
|
||||||
|
WebSockets::clientDisconnect(&_client, 1000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// send Header to Server
|
||||||
|
sendHeader(&_client);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WebSocketsClient::connectFailedCb() {
|
||||||
|
DEBUG_WEBSOCKETS("[WS-Client] connection to %s:%u Faild\n", _host.c_str(), _port);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
|
||||||
|
|
||||||
|
void WebSocketsClient::asyncConnect() {
|
||||||
|
|
||||||
|
AsyncClient * tcpclient = new AsyncClient();
|
||||||
|
|
||||||
|
|
||||||
|
if(!tcpclient) {
|
||||||
|
DEBUG_WEBSOCKETS("[WS-Client] creating AsyncClient class failed!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tcpclient->onConnect(std::bind([](WebSocketsClient * ws , AsyncClient * tcp) {
|
||||||
|
ws->_client.tcp = new AsyncTCPbuffer(tcp);
|
||||||
|
if(!ws->_client.tcp) {
|
||||||
|
DEBUG_WEBSOCKETS("[WS-Client] creating Network class failed!");
|
||||||
|
ws->connectFailedCb();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ws->connectedCb();
|
||||||
|
}, this, std::placeholders::_2));
|
||||||
|
|
||||||
|
tcpclient->onError(std::bind([](WebSocketsClient * ws , AsyncClient * tcp) {
|
||||||
|
ws->connectFailedCb();
|
||||||
|
|
||||||
|
// reconnect
|
||||||
|
ws->asyncConnect();
|
||||||
|
}, this, std::placeholders::_2));
|
||||||
|
|
||||||
|
if(!tcpclient->connect(_host.c_str(), _port)) {
|
||||||
|
connectFailedCb();
|
||||||
|
delete tcpclient;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,7 +44,12 @@ class WebSocketsClient: private WebSockets {
|
|||||||
void beginSSL(String host, uint16_t port, String url = "/", String fingerprint = "");
|
void beginSSL(String host, uint16_t port, String url = "/", String fingerprint = "");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC)
|
||||||
void loop(void);
|
void loop(void);
|
||||||
|
#else
|
||||||
|
// Async interface not need a loop call
|
||||||
|
void loop(void) __attribute__ ((deprecated)) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
void onEvent(WebSocketClientEvent cbEvent);
|
void onEvent(WebSocketClientEvent cbEvent);
|
||||||
|
|
||||||
@ -82,6 +87,13 @@ class WebSocketsClient: private WebSockets {
|
|||||||
void sendHeader(WSclient_t * client);
|
void sendHeader(WSclient_t * client);
|
||||||
void handleHeader(WSclient_t * client, String * headerLine);
|
void handleHeader(WSclient_t * client, String * headerLine);
|
||||||
|
|
||||||
|
void connectedCb();
|
||||||
|
void connectFailedCb();
|
||||||
|
|
||||||
|
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
|
||||||
|
void asyncConnect();
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* called for sending a Event to the app
|
* called for sending a Event to the app
|
||||||
* @param type WStype_t
|
* @param type WStype_t
|
||||||
|
@ -42,13 +42,12 @@ public:
|
|||||||
~WebSocketsServer(void);
|
~WebSocketsServer(void);
|
||||||
|
|
||||||
void begin(void);
|
void begin(void);
|
||||||
|
|
||||||
#if (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC)
|
#if (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC)
|
||||||
void loop(void);
|
void loop(void);
|
||||||
#else
|
#else
|
||||||
// Async interface not need a loop call
|
// Async interface not need a loop call
|
||||||
void loop(void) __attribute__ ((deprecated)) {
|
void loop(void) __attribute__ ((deprecated)) {}
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void onEvent(WebSocketServerEvent cbEvent);
|
void onEvent(WebSocketServerEvent cbEvent);
|
||||||
|
Reference in New Issue
Block a user