ESPHome 2026.1.4
Loading...
Searching...
No Matches
async_tcp_socket.h
Go to the documentation of this file.
1#pragma once
2
4
5#if !defined(USE_ESP32) && !defined(USE_ESP8266) && !defined(USE_RP2040) && !defined(USE_LIBRETINY) && \
6 (defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS))
7
9#include <functional>
10#include <memory>
11#include <string>
12#include <utility>
13
14namespace esphome::async_tcp {
15
19 public:
20 using AcConnectHandler = std::function<void(void *, AsyncClient *)>;
21 using AcDataHandler = std::function<void(void *, AsyncClient *, void *data, size_t len)>;
22 using AcErrorHandler = std::function<void(void *, AsyncClient *, int8_t error)>;
23
24 AsyncClient() = default;
25 ~AsyncClient() = default;
26
27 [[nodiscard]] bool connect(const char *host, uint16_t port);
28 void close();
29 [[nodiscard]] bool connected() const { return connected_; }
30 size_t write(const char *data, size_t len);
31
32 void onConnect(AcConnectHandler cb, void *arg = nullptr) { // NOLINT(readability-identifier-naming)
33 connect_cb_ = std::move(cb);
34 connect_arg_ = arg;
35 }
36 void onDisconnect(AcConnectHandler cb, void *arg = nullptr) { // NOLINT(readability-identifier-naming)
37 disconnect_cb_ = std::move(cb);
38 disconnect_arg_ = arg;
39 }
41 void onData(AcDataHandler cb, void *arg = nullptr) { // NOLINT(readability-identifier-naming)
42 data_cb_ = std::move(cb);
43 data_arg_ = arg;
44 }
45 void onError(AcErrorHandler cb, void *arg = nullptr) { // NOLINT(readability-identifier-naming)
46 error_cb_ = std::move(cb);
47 error_arg_ = arg;
48 }
49
50 // Must be called from loop()
51 void loop();
52
53 private:
54 std::unique_ptr<esphome::socket::Socket> socket_;
55
56 AcConnectHandler connect_cb_{nullptr};
57 void *connect_arg_{nullptr};
58 AcConnectHandler disconnect_cb_{nullptr};
59 void *disconnect_arg_{nullptr};
60 AcDataHandler data_cb_{nullptr};
61 void *data_arg_{nullptr};
62 AcErrorHandler error_cb_{nullptr};
63 void *error_arg_{nullptr};
64
65 bool connected_{false};
66 bool connecting_{false};
67};
68
69} // namespace esphome::async_tcp
70
71// Expose AsyncClient in global namespace to match library behavior
72using esphome::async_tcp::AsyncClient; // NOLINT(google-global-names-in-headers)
73#endif
AsyncClient API for platforms using sockets (ESP-IDF, host, etc.) NOTE: This class is NOT thread-safe...
void onConnect(AcConnectHandler cb, void *arg=nullptr)
std::function< void(void *, AsyncClient *, void *data, size_t len)> AcDataHandler
void onError(AcErrorHandler cb, void *arg=nullptr)
bool connect(const char *host, uint16_t port)
void onDisconnect(AcConnectHandler cb, void *arg=nullptr)
void onData(AcDataHandler cb, void *arg=nullptr)
Set data callback. NOTE: data pointer is only valid during callback execution.
std::function< void(void *, AsyncClient *, int8_t error)> AcErrorHandler
std::function< void(void *, AsyncClient *)> AcConnectHandler
size_t write(const char *data, size_t len)
std::string size_t len
Definition helpers.h:595