diff options
Diffstat (limited to 'components/wisp_relay/ws_server.h')
| -rw-r--r-- | components/wisp_relay/ws_server.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/components/wisp_relay/ws_server.h b/components/wisp_relay/ws_server.h new file mode 100644 index 0000000..4fe616e --- /dev/null +++ b/components/wisp_relay/ws_server.h | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | #ifndef WS_SERVER_H | ||
| 2 | #define WS_SERVER_H | ||
| 3 | |||
| 4 | #include <stdint.h> | ||
| 5 | #include <stdbool.h> | ||
| 6 | #include <stddef.h> | ||
| 7 | #include "esp_http_server.h" | ||
| 8 | #include "freertos/FreeRTOS.h" | ||
| 9 | #include "freertos/semphr.h" | ||
| 10 | |||
| 11 | #define WS_MAX_CONNECTIONS 8 | ||
| 12 | #define WS_MAX_FRAME_SIZE 65536 | ||
| 13 | #define WS_IP_ADDR_MAX_LEN 48 | ||
| 14 | |||
| 15 | typedef struct { | ||
| 16 | int fd; | ||
| 17 | bool active; | ||
| 18 | uint32_t connected_at; | ||
| 19 | uint32_t last_activity; | ||
| 20 | char remote_ip[WS_IP_ADDR_MAX_LEN]; | ||
| 21 | } ws_connection_t; | ||
| 22 | |||
| 23 | typedef struct { | ||
| 24 | httpd_handle_t server; | ||
| 25 | ws_connection_t connections[WS_MAX_CONNECTIONS]; | ||
| 26 | SemaphoreHandle_t lock; | ||
| 27 | uint8_t connection_count; | ||
| 28 | } ws_server_t; | ||
| 29 | |||
| 30 | typedef void (*ws_message_cb_t)(int fd, const char *data, size_t len); | ||
| 31 | typedef void (*ws_disconnect_cb_t)(int fd); | ||
| 32 | |||
| 33 | esp_err_t ws_server_init(ws_server_t *server, uint16_t port, ws_message_cb_t on_message); | ||
| 34 | void ws_server_set_disconnect_cb(ws_disconnect_cb_t cb); | ||
| 35 | void ws_server_stop(ws_server_t *server); | ||
| 36 | bool ws_server_is_running(ws_server_t *server); | ||
| 37 | esp_err_t ws_server_send(ws_server_t *server, int fd, const char *data, size_t len); | ||
| 38 | esp_err_t ws_server_broadcast(ws_server_t *server, const char *data, size_t len); | ||
| 39 | void ws_server_close_connection(ws_server_t *server, int fd); | ||
| 40 | |||
| 41 | #endif | ||