Skip to content

Commit f1a72ec

Browse files
authored
Merge pull request #760 from glmfe/feat/add-ws-unregister
feat(websocket): add unregister event to websocket client
2 parents 87e96b4 + ce16050 commit f1a72ec

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

components/esp_websocket_client/esp_websocket_client.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ typedef struct {
9999
bool use_global_ca_store;
100100
bool skip_cert_common_name_check;
101101
const char *cert_common_name;
102-
esp_err_t (*crt_bundle_attach)(void *conf);
102+
esp_err_t (*crt_bundle_attach)(void *conf);
103103
esp_transport_handle_t ext_transport;
104104
} websocket_config_storage_t;
105105

@@ -188,9 +188,9 @@ static void esp_websocket_free_buf(esp_websocket_client_handle_t client, bool is
188188
}
189189

190190
static esp_err_t esp_websocket_client_dispatch_event(esp_websocket_client_handle_t client,
191-
esp_websocket_event_id_t event,
192-
const char *data,
193-
int data_len)
191+
esp_websocket_event_id_t event,
192+
const char *data,
193+
int data_len)
194194
{
195195
esp_err_t err;
196196
esp_websocket_event_data_t event_data;
@@ -206,8 +206,8 @@ static esp_err_t esp_websocket_client_dispatch_event(esp_websocket_client_handle
206206

207207
if (client->error_handle.error_type == WEBSOCKET_ERROR_TYPE_TCP_TRANSPORT) {
208208
event_data.error_handle.esp_tls_last_esp_err = esp_tls_get_and_clear_last_error(esp_transport_get_error_handle(client->transport),
209-
&client->error_handle.esp_tls_stack_err,
210-
&client->error_handle.esp_tls_cert_verify_flags);
209+
&client->error_handle.esp_tls_stack_err,
210+
&client->error_handle.esp_tls_cert_verify_flags);
211211
event_data.error_handle.esp_tls_stack_err = client->error_handle.esp_tls_stack_err;
212212
event_data.error_handle.esp_tls_cert_verify_flags = client->error_handle.esp_tls_cert_verify_flags;
213213
event_data.error_handle.esp_transport_sock_errno = esp_transport_get_errno(client->transport);
@@ -244,7 +244,7 @@ static esp_err_t esp_websocket_client_abort_connection(esp_websocket_client_hand
244244
return ESP_OK;
245245
}
246246

247-
static esp_err_t esp_websocket_client_error(esp_websocket_client_handle_t client, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
247+
static esp_err_t esp_websocket_client_error(esp_websocket_client_handle_t client, const char *format, ...) __attribute__((format(printf, 2, 3)));
248248
static esp_err_t esp_websocket_client_error(esp_websocket_client_handle_t client, const char *format, ...)
249249
{
250250
va_list myargs;
@@ -675,7 +675,7 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
675675
client->keep_alive_cfg.keep_alive_enable = true;
676676
client->keep_alive_cfg.keep_alive_idle = (config->keep_alive_idle == 0) ? WEBSOCKET_KEEP_ALIVE_IDLE : config->keep_alive_idle;
677677
client->keep_alive_cfg.keep_alive_interval = (config->keep_alive_interval == 0) ? WEBSOCKET_KEEP_ALIVE_INTERVAL : config->keep_alive_interval;
678-
client->keep_alive_cfg.keep_alive_count = (config->keep_alive_count == 0) ? WEBSOCKET_KEEP_ALIVE_COUNT : config->keep_alive_count;
678+
client->keep_alive_cfg.keep_alive_count = (config->keep_alive_count == 0) ? WEBSOCKET_KEEP_ALIVE_COUNT : config->keep_alive_count;
679679
}
680680

681681
if (config->if_name) {
@@ -950,7 +950,7 @@ static esp_err_t esp_websocket_client_recv(esp_websocket_client_handle_t client)
950950
client->last_fin = esp_transport_ws_get_fin_flag(client->transport);
951951
client->last_opcode = esp_transport_ws_get_read_opcode(client->transport);
952952

953-
if (rlen == 0 && client->last_opcode == WS_TRANSPORT_OPCODES_NONE ) {
953+
if (rlen == 0 && client->last_opcode == WS_TRANSPORT_OPCODES_NONE) {
954954
ESP_LOGV(TAG, "esp_transport_read timeouts");
955955
esp_websocket_free_buf(client, false);
956956
return ESP_OK;
@@ -1056,7 +1056,7 @@ static void esp_websocket_client_task(void *pv)
10561056
}
10571057
}
10581058

1059-
if ( _tick_get_ms() - client->pingpong_tick_ms > client->config->pingpong_timeout_sec * 1000 ) {
1059+
if (_tick_get_ms() - client->pingpong_tick_ms > client->config->pingpong_timeout_sec * 1000) {
10601060
if (client->wait_for_pong_resp) {
10611061
esp_websocket_client_error(client, "Error, no PONG received for more than %d seconds after PING", client->config->pingpong_timeout_sec);
10621062
esp_websocket_client_abort_connection(client, WEBSOCKET_ERROR_TYPE_PONG_TIMEOUT);
@@ -1373,3 +1373,13 @@ esp_err_t esp_websocket_register_events(esp_websocket_client_handle_t client,
13731373
}
13741374
return esp_event_handler_register_with(client->event_handle, WEBSOCKET_EVENTS, event, event_handler, event_handler_arg);
13751375
}
1376+
1377+
esp_err_t esp_websocket_unregister_events(esp_websocket_client_handle_t client,
1378+
esp_websocket_event_id_t event,
1379+
esp_event_handler_t event_handler)
1380+
{
1381+
if (client == NULL) {
1382+
return ESP_ERR_INVALID_ARG;
1383+
}
1384+
return esp_event_handler_unregister_with(client->event_handle, WEBSOCKET_EVENTS, event, event_handler);
1385+
}

components/esp_websocket_client/examples/target/main/websocket_example.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ static void websocket_app_start(void)
227227
xSemaphoreTake(shutdown_sema, portMAX_DELAY);
228228
esp_websocket_client_close(client, portMAX_DELAY);
229229
ESP_LOGI(TAG, "Websocket Stopped");
230+
esp_websocket_unregister_events(client, WEBSOCKET_EVENT_ANY, websocket_event_handler);
230231
esp_websocket_client_destroy(client);
231232
}
232233

components/esp_websocket_client/include/esp_websocket_client.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,18 @@ esp_err_t esp_websocket_register_events(esp_websocket_client_handle_t client,
460460
esp_event_handler_t event_handler,
461461
void *event_handler_arg);
462462

463+
/**
464+
* @brief Unegister the Websocket Events
465+
*
466+
* @param client The client handle
467+
* @param event The event id
468+
* @param event_handler The callback function
469+
* @return esp_err_t
470+
*/
471+
esp_err_t esp_websocket_unregister_events(esp_websocket_client_handle_t client,
472+
esp_websocket_event_id_t event,
473+
esp_event_handler_t event_handler);
474+
463475
#ifdef __cplusplus
464476
}
465477
#endif

0 commit comments

Comments
 (0)