Skip to content

Commit d7fa24b

Browse files
feat(websocket): add events for begin/end thread
Add events to signal the start and end of the websocket thread handler, only once each per client.
1 parent 9cf4163 commit d7fa24b

File tree

5 files changed

+18
-0
lines changed

5 files changed

+18
-0
lines changed

components/esp_websocket_client/esp_websocket_client.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,7 @@ static void esp_websocket_client_task(void *pv)
970970

971971
client->state = WEBSOCKET_STATE_INIT;
972972
xEventGroupClearBits(client->status_bits, STOPPED_BIT | CLOSE_FRAME_SENT_BIT);
973+
esp_websocket_client_dispatch_event(client, WEBSOCKET_EVENT_BEGIN, NULL, 0);
973974
int read_select = 0;
974975
while (client->run) {
975976
if (xSemaphoreTakeRecursive(client->lock, lock_timeout) != pdPASS) {
@@ -1104,6 +1105,7 @@ static void esp_websocket_client_task(void *pv)
11041105
}
11051106
}
11061107

1108+
esp_websocket_client_dispatch_event(client, WEBSOCKET_EVENT_FINISH, NULL, 0);
11071109
esp_transport_close(client->transport);
11081110
xEventGroupSetBits(client->status_bits, STOPPED_BIT);
11091111
client->state = WEBSOCKET_STATE_UNKNOW;

components/esp_websocket_client/examples/linux/main/websocket_linux.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
2525
{
2626
esp_websocket_event_data_t *data = (esp_websocket_event_data_t *)event_data;
2727
switch (event_id) {
28+
case WEBSOCKET_EVENT_BEGIN:
29+
ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN");
30+
break;
2831
case WEBSOCKET_EVENT_CONNECTED:
2932
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
3033
break;
@@ -59,6 +62,9 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
5962
log_error_if_nonzero("captured as transport's socket errno", data->error_handle.esp_transport_sock_errno);
6063
}
6164
break;
65+
case WEBSOCKET_EVENT_FINISH:
66+
ESP_LOGI(TAG, "WEBSOCKET_EVENT_FINISH");
67+
break;
6268
}
6369
}
6470

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
7474
{
7575
esp_websocket_event_data_t *data = (esp_websocket_event_data_t *)event_data;
7676
switch (event_id) {
77+
case WEBSOCKET_EVENT_BEGIN:
78+
ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN");
79+
break;
7780
case WEBSOCKET_EVENT_CONNECTED:
7881
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
7982
break;
@@ -122,6 +125,9 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
122125
log_error_if_nonzero("captured as transport's socket errno", data->error_handle.esp_transport_sock_errno);
123126
}
124127
break;
128+
case WEBSOCKET_EVENT_FINISH:
129+
ESP_LOGI(TAG, "WEBSOCKET_EVENT_FINISH");
130+
break;
125131
}
126132
}
127133

components/esp_websocket_client/include/esp_websocket_client.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ typedef enum {
3636
WEBSOCKET_EVENT_DATA, /*!< When receiving data from the server, possibly multiple portions of the packet */
3737
WEBSOCKET_EVENT_CLOSED, /*!< The connection has been closed cleanly */
3838
WEBSOCKET_EVENT_BEFORE_CONNECT, /*!< The event occurs before connecting */
39+
WEBSOCKET_EVENT_BEGIN, /*!< The event occurs once after thread creation, before event loop */
40+
WEBSOCKET_EVENT_FINISH, /*!< The event occurs once after event loop, before thread destruction */
3941
WEBSOCKET_EVENT_MAX
4042
} esp_websocket_event_id_t;
4143

docs/esp_websocket_client/en/index.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,14 @@ For more options on :cpp:type:`esp_websocket_client_config_t`, please refer to A
9191

9292
Events
9393
------
94+
* `WEBSOCKET_EVENT_BEGIN': The client thread is running.
9495
* `WEBSOCKET_EVENT_BEFORE_CONNECT`: The client is about to connect.
9596
* `WEBSOCKET_EVENT_CONNECTED`: The client has successfully established a connection to the server. The client is now ready to send and receive data. Contains no event data.
9697
* `WEBSOCKET_EVENT_DATA`: The client has successfully received and parsed a WebSocket frame. The event data contains a pointer to the payload data, the length of the payload data as well as the opcode of the received frame. A message may be fragmented into multiple events if the length exceeds the buffer size. This event will also be posted for non-payload frames, e.g. pong or connection close frames.
9798
* `WEBSOCKET_EVENT_ERROR`: The client has experienced an error. Examples include transport write or read failures.
9899
* `WEBSOCKET_EVENT_DISCONNECTED`: The client has aborted the connection due to the transport layer failing to read data, e.g. because the server is unavailable. Contains no event data.
99100
* `WEBSOCKET_EVENT_CLOSED`: The connection has been closed cleanly.
101+
* `WEBSOCKET_EVENT_FINISH': The client thread is about to exit.
100102

101103
If the client handle is needed in the event handler it can be accessed through the pointer passed to the event handler:
102104

0 commit comments

Comments
 (0)