diff --git a/src/EthernetOverride/Server.cpp b/src/EthernetOverride/Server.cpp index fe7d6a7..34b953c 100644 --- a/src/EthernetOverride/Server.cpp +++ b/src/EthernetOverride/Server.cpp @@ -41,6 +41,7 @@ void EthernetMaketServer::accept(int sock) } else if (client.status() == SnSR::CLOSE_WAIT && !client.available()) { + Serial.println("HARD STOP"); client.stop(); } } @@ -85,32 +86,36 @@ void EthernetMaketServer::tick() { // for (int sock = 0; sock < MAX_SOCK_NUM; sock++) { - EthernetMaketClient sclient = available(serverSocket); + sclient = available(serverSocket); if (sclient.connected() && sclient.available() > 0) { + sclient.activityUpdate(); serverHandler(sclient); } - // // Закрытие соединения по таймеру неактивности - // if (sclient.connected() && (millis() - lastActivityTime > timeout)) - // { - // Serial.println("Connection closed due to inactivity"); - // sclient.stop(); - // } - // if (!wasConnected && sclient.connected()) // { - // wasConnected[sock] = true; + // wasConnected = true; + // Serial.println("Client connected"); // } // if (wasConnected && !sclient.connected()) // { - // wasConnected[sock] = false; + // wasConnected = false; // sclient.stop(); + // // begin(serverSocket); // Serial.println("Client disconnected"); // } + // // Закрытие соединения по таймеру неактивности + // if (sclient.connected() && (millis() - lastActivityTime > timeout)) + // { + // Serial.println("Connection closed due to inactivity"); + // sclient.close(); + // // begin(serverSocket); + // } } -} \ No newline at end of file + // sclient.tick_(); +} diff --git a/src/EthernetOverride/Server.h b/src/EthernetOverride/Server.h index 794c88b..7bf41d4 100644 --- a/src/EthernetOverride/Server.h +++ b/src/EthernetOverride/Server.h @@ -11,9 +11,11 @@ private: EthernetClient available(); void accept(int sock); std::function serverHandler = [](EthernetMaketClient &sclient) {}; - bool wasConnected[MAX_SOCK_NUM]; SOCKET serverSocket = MAX_SOCK_NUM; + bool wasConnected; + EthernetMaketClient sclient; + public: using EthernetServer::EthernetServer; EthernetMaketClient available(int sock); diff --git a/src/EthernetOverride/TCP.cpp b/src/EthernetOverride/TCP.cpp index 4a62352..bd34c61 100644 --- a/src/EthernetOverride/TCP.cpp +++ b/src/EthernetOverride/TCP.cpp @@ -62,6 +62,8 @@ ConnectionStatusSimple EthernetMaketClient::connectNonBlock(IPAddress ip, uint16 _sock = i; Serial.print("SOCK <- "); Serial.println(_sock); break; + + //todo if (s == SnSR::LISTEN){ выполнить приём и занять на время отправки сокет прослушивания } } } @@ -110,7 +112,7 @@ void EthernetMaketClient::tick_(){ Serial.print("tick_() sock = "); Serial.println(_sock); } - +//todo [] Пересмотреть стейт машину перевести на нативные статусы switch (connectStatus) { case CONNECT_START: @@ -197,7 +199,7 @@ void EthernetMaketClient::tick_(){ Serial.println("CONNECT_STOP_START"); dstIP = IPAddress(0,0,0,0); dstPort = 0; - disconnect(); + disconnect(); stopStartTime = millis(); connectStatus = CONNECT_STOP_WAITING; Serial.println("CONNECT_STOP_WAITING"); @@ -249,7 +251,8 @@ void EthernetMaketClient::tick_(){ } //******************************************************** - // //? Проверка наличия доступных данных от сервера + // //? [*] Проверка наличия доступных данных от сервера + // //? проверяется во вне // if (available() > 0) // { @@ -297,37 +300,6 @@ void EthernetMaketClient::dataWrite(uint8_t* data, uint16_t dataSize, bool overr } } - -// bool EthernetMaketClient::send(uint8_t* data, uint16_t dataSize, IPAddress ip, uint16_t port) { -// this->dataPtr = data; -// this->dataSize = dataSize; -// dstIP = ip; -// dstPort = port; - -// switch (connectStatus) { -// case CONNECT_CONNECTED: -// if(dataWrite()){ -// onSendSuccess(); -// } -// // Если подключено, отправляем данные -// return true; - -// case CONNECT_STOP_WAITING: -// case CONNECT_STOP_START: -// return false; // Ожидаем завершения разрыва - -// // case CONNECT_FAIL: -// case CONNECT_IDLE: -// connectNonBlock(ip, port); -// connectStatus = CONNECT_START; // Начинаем новое подключение -// return false; // Подключение инициировано - -// default: -// return false; // Пока ждём подключения -// } -// return false; -// } - void EthernetMaketClient::setOnSendSuccess(const std::function& callback) { onSendSuccess = callback; } @@ -337,6 +309,7 @@ void EthernetMaketClient::resetOnSendSuccess() { } void EthernetMaketClient::stop(){ + // if(connectStatus!=CONNECT_STOP_WAITING) connectStatus = CONNECT_STOP_START; } @@ -345,15 +318,6 @@ void EthernetMaketClient::startConnection(IPAddress ip, uint16_t port, bool nonB dstPort = port; isNonBlocking = nonBlock; connectStatus = CONNECT_START; - // if (nonBlock) - // { - // connectNonBlock(dstIP, dstPort); - // } - // else - // { - // (ConnectionStatusSimple)connect(dstIP, dstPort); - // } - }; void EthernetMaketClient::activityUpdate(){ @@ -379,6 +343,8 @@ EthernetMaketClient& EthernetMaketClient::operator=(const EthernetMaketClient& o this->dataPtr = other.dataPtr; this->dataSize = other.dataSize; this->onSendSuccess = other.onSendSuccess; + + this->_sock = other._sock; // Отключаем исполнение старого клиента const_cast(other).connectStatus = CONNECT_IDLE;