#include "GwSocketServer.h" GwSocketServer::GwSocketServer(const GwConfigHandler *config,GwLog *logger){ this->config=config; this->logger=logger; } void GwSocketServer::begin(){ server=new WiFiServer(config->getInt(config->serverPort),config->getInt(config->maxClients)); server->begin(); logger->logString("Socket server created, port=%d", config->getInt(config->serverPort)); } void GwSocketServer::loop() { WiFiClient client = server->available(); // listen for incoming clients if (client){ logger->logString("new client connected from %s", client.remoteIP().toString().c_str()); clients.push_back(wiFiClientPtr(new WiFiClient(client))); } for (auto it = clients.begin(); it != clients.end();it++) { if ((*it) != NULL) { if (!(*it)->connected()) { logger->logString("client disconnect "); (*it)->stop(); clients.erase(it); } else { while ((*it)->available()) { char c = (*it)->read(); //TODO: read data } } } else { it = clients.erase(it); // Should have been erased by StopClient } } } void GwSocketServer::sendToClients(const char *buf){ for (auto it = clients.begin() ; it != clients.end(); it++) { if ( (*it) != NULL && (*it)->connected() ) { (*it)->println(buf); } } } int GwSocketServer::numClients(){ return clients.size(); }