summaryrefslogtreecommitdiff
path: root/libraries/ESPAsyncTCP/examples/ClientServer/Server
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ESPAsyncTCP/examples/ClientServer/Server')
-rw-r--r--libraries/ESPAsyncTCP/examples/ClientServer/Server/Server.ino73
-rw-r--r--libraries/ESPAsyncTCP/examples/ClientServer/Server/config.h23
2 files changed, 96 insertions, 0 deletions
diff --git a/libraries/ESPAsyncTCP/examples/ClientServer/Server/Server.ino b/libraries/ESPAsyncTCP/examples/ClientServer/Server/Server.ino
new file mode 100644
index 0000000..c8c9b7f
--- /dev/null
+++ b/libraries/ESPAsyncTCP/examples/ClientServer/Server/Server.ino
@@ -0,0 +1,73 @@
+#include <ESP8266WiFi.h>
+#include <ESPAsyncTCP.h>
+#include <DNSServer.h>
+#include <vector>
+
+#include "config.h"
+
+static DNSServer DNS;
+
+static std::vector<AsyncClient*> 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();
+}
diff --git a/libraries/ESPAsyncTCP/examples/ClientServer/Server/config.h b/libraries/ESPAsyncTCP/examples/ClientServer/Server/config.h
new file mode 100644
index 0000000..cf51e91
--- /dev/null
+++ b/libraries/ESPAsyncTCP/examples/ClientServer/Server/config.h
@@ -0,0 +1,23 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+/*
+ * This example demonstrate how to use asynchronous client & server APIs
+ * in order to establish tcp socket connections in client server manner.
+ * server is running (on port 7050) on one ESP, acts as AP, and other clients running on
+ * remaining ESPs acts as STAs. after connection establishment between server and clients
+ * there is a simple message transfer in every 2s. clients connect to server via it's host name
+ * (in this case 'esp_server') with help of DNS service running on server side.
+ *
+ * Note: default MSS for ESPAsyncTCP is 536 byte and defualt ACK timeout is 5s.
+*/
+
+#define SSID "ESP-TEST"
+#define PASSWORD "123456789"
+
+#define SERVER_HOST_NAME "esp_server"
+
+#define TCP_PORT 7050
+#define DNS_PORT 53
+
+#endif // CONFIG_H