#include #include #include #include #include "config.h" static DNSServer DNS; static std::vector clients; // a list to hold all clients /* clients events */ static void handleError(void* arg, AsyncClient* client, int8_t error) { Serial.printf("\n connection error %s from client %s \n", client->errorToString(error), client->remoteIP().toString().c_str()); } static void handleData(void* arg, AsyncClient* client, void *data, size_t len) { Serial.printf("\n data received from client %s \n", client->remoteIP().toString().c_str()); Serial.write((uint8_t*)data, len); // reply to client if (client->space() > 32 && client->canSend()) { char reply[32]; sprintf(reply, "this is from %s", SERVER_HOST_NAME); client->add(reply, strlen(reply)); client->send(); } } static void handleDisconnect(void* arg, AsyncClient* client) { Serial.printf("\n client %s disconnected \n", client->remoteIP().toString().c_str()); } static void handleTimeOut(void* arg, AsyncClient* client, uint32_t time) { Serial.printf("\n client ACK timeout ip: %s \n", client->remoteIP().toString().c_str()); } /* server events */ static void handleNewClient(void* arg, AsyncClient* client) { Serial.printf("\n new client has been connected to server, ip: %s", client->remoteIP().toString().c_str()); // add to list clients.push_back(client); // register events client->onData(&handleData, NULL); client->onError(&handleError, NULL); client->onDisconnect(&handleDisconnect, NULL); client->onTimeout(&handleTimeOut, NULL); } void setup() { Serial.begin(115200); delay(20); // create access point while (!WiFi.softAP(SSID, PASSWORD, 6, false, 15)) { delay(500); } // start dns server if (!DNS.start(DNS_PORT, SERVER_HOST_NAME, WiFi.softAPIP())) Serial.printf("\n failed to start dns service \n"); AsyncServer* server = new AsyncServer(TCP_PORT); // start listening on tcp port 7050 server->onClient(&handleNewClient, server); server->begin(); } void loop() { DNS.processNextRequest(); }