5#ifdef FASTLED_HAS_NETWORKING
9 #include "platforms/win/socket_win.h"
11 #include "platforms/posix/socket_posix.h"
26NativeHttpClient::NativeHttpClient(
const string& host, u16 port,
const ConnectionConfig& config)
27 : mEndpoint(host, port)
36bool NativeHttpClient::connect() {
37 if (mConnection.getState() == ConnectionState::CLOSED) {
47 mConnection.connect();
50 if (platformConnect()) {
51 mConnection.onConnected(0);
56 mConnection.onDisconnected();
60void NativeHttpClient::disconnect() {
61 if (mSocket.is_open()) {
63 mConnection.disconnect();
67void NativeHttpClient::close() {
72bool NativeHttpClient::isConnected()
const {
73 return mConnection.isConnected() && isSocketConnected();
77 return mConnection.getState();
81 if (!isConnected() || !mSocket.is_open()) {
86 size_t n = mSocket.write_some(data, ec);
89 if (ec.code == asio::errc::would_block) {
92 mConnection.onDisconnected();
96 return static_cast<int>(n);
100 if (!isConnected() || !mSocket.is_open()) {
105 size_t n = mSocket.read_some(buffer, ec);
108 if (ec.code == asio::errc::would_block) {
112 mConnection.onDisconnected();
117 mConnection.onHeartbeatReceived();
119 return static_cast<int>(n);
122void NativeHttpClient::update(u32 currentTimeMs) {
124 mConnection.update(currentTimeMs);
127 if (mConnection.shouldReconnect()) {
133 if (!isConnected() && mSocket.is_open()) {
138bool NativeHttpClient::shouldSendHeartbeat(u32 currentTimeMs)
const {
139 return mConnection.shouldSendHeartbeat(currentTimeMs);
142void NativeHttpClient::onHeartbeatSent() {
143 mConnection.onHeartbeatSent();
146void NativeHttpClient::onHeartbeatReceived() {
147 mConnection.onHeartbeatReceived();
150u32 NativeHttpClient::getReconnectDelayMs()
const {
151 return mConnection.getReconnectDelayMs();
154u32 NativeHttpClient::getReconnectAttempts()
const {
155 return mConnection.getReconnectAttempts();
158bool NativeHttpClient::platformConnect() {
160 if (mSocket.is_open()) {
161 platformDisconnect();
164 asio::error_code ec = mSocket.connect(mEndpoint);
168void NativeHttpClient::platformDisconnect() {
172bool NativeHttpClient::isSocketConnected()
const {
173 if (!mSocket.is_open()) {
179 socklen_t len =
sizeof(error);
180 int ret = getsockopt(mSocket.native_handle(), SOL_SOCKET, SO_ERROR, (
char*)&error, &len);
182 if (ret != 0 || error != 0) {
Base definition for an LED controller.
Asio-compatible endpoint type: bundles host address + port.