This commit is contained in:
DashyFox 2024-12-09 14:57:43 +03:00
parent daf17f1ac6
commit a95cc42233
3 changed files with 28 additions and 55 deletions

View File

@ -41,6 +41,7 @@ void EthernetMaketServer::accept(int sock)
} }
else if (client.status() == SnSR::CLOSE_WAIT && !client.available()) else if (client.status() == SnSR::CLOSE_WAIT && !client.available())
{ {
Serial.println("HARD STOP");
client.stop(); client.stop();
} }
} }
@ -85,32 +86,36 @@ void EthernetMaketServer::tick()
{ {
// for (int sock = 0; sock < MAX_SOCK_NUM; sock++) // for (int sock = 0; sock < MAX_SOCK_NUM; sock++)
{ {
EthernetMaketClient sclient = available(serverSocket); sclient = available(serverSocket);
if (sclient.connected() && sclient.available() > 0) if (sclient.connected() && sclient.available() > 0)
{ {
sclient.activityUpdate();
serverHandler(sclient); serverHandler(sclient);
} }
// // Закрытие соединения по таймеру неактивности
// if (sclient.connected() && (millis() - lastActivityTime > timeout))
// {
// Serial.println("Connection closed due to inactivity");
// sclient.stop();
// }
// if (!wasConnected && sclient.connected()) // if (!wasConnected && sclient.connected())
// { // {
// wasConnected[sock] = true; // wasConnected = true;
// Serial.println("Client connected");
// } // }
// if (wasConnected && !sclient.connected()) // if (wasConnected && !sclient.connected())
// { // {
// wasConnected[sock] = false; // wasConnected = false;
// sclient.stop(); // sclient.stop();
// // begin(serverSocket);
// Serial.println("Client disconnected"); // Serial.println("Client disconnected");
// } // }
// // Закрытие соединения по таймеру неактивности
// if (sclient.connected() && (millis() - lastActivityTime > timeout))
// {
// Serial.println("Connection closed due to inactivity");
// sclient.close();
// // begin(serverSocket);
// }
} }
} // sclient.tick_();
}

View File

@ -11,9 +11,11 @@ private:
EthernetClient available(); EthernetClient available();
void accept(int sock); void accept(int sock);
std::function<void(EthernetMaketClient&)> serverHandler = [](EthernetMaketClient &sclient) {}; std::function<void(EthernetMaketClient&)> serverHandler = [](EthernetMaketClient &sclient) {};
bool wasConnected[MAX_SOCK_NUM];
SOCKET serverSocket = MAX_SOCK_NUM; SOCKET serverSocket = MAX_SOCK_NUM;
bool wasConnected;
EthernetMaketClient sclient;
public: public:
using EthernetServer::EthernetServer; using EthernetServer::EthernetServer;
EthernetMaketClient available(int sock); EthernetMaketClient available(int sock);

View File

@ -62,6 +62,8 @@ ConnectionStatusSimple EthernetMaketClient::connectNonBlock(IPAddress ip, uint16
_sock = i; _sock = i;
Serial.print("SOCK <- "); Serial.println(_sock); Serial.print("SOCK <- "); Serial.println(_sock);
break; break;
//todo if (s == SnSR::LISTEN){ выполнить приём и занять на время отправки сокет прослушивания }
} }
} }
@ -110,7 +112,7 @@ void EthernetMaketClient::tick_(){
Serial.print("tick_() sock = "); Serial.println(_sock); Serial.print("tick_() sock = "); Serial.println(_sock);
} }
//todo [] Пересмотреть стейт машину перевести на нативные статусы
switch (connectStatus) switch (connectStatus)
{ {
case CONNECT_START: case CONNECT_START:
@ -197,7 +199,7 @@ void EthernetMaketClient::tick_(){
Serial.println("CONNECT_STOP_START"); Serial.println("CONNECT_STOP_START");
dstIP = IPAddress(0,0,0,0); dstIP = IPAddress(0,0,0,0);
dstPort = 0; dstPort = 0;
disconnect(); disconnect();
stopStartTime = millis(); stopStartTime = millis();
connectStatus = CONNECT_STOP_WAITING; connectStatus = CONNECT_STOP_WAITING;
Serial.println("CONNECT_STOP_WAITING"); Serial.println("CONNECT_STOP_WAITING");
@ -249,7 +251,8 @@ void EthernetMaketClient::tick_(){
} }
//******************************************************** //********************************************************
// //? Проверка наличия доступных данных от сервера // //? [*] Проверка наличия доступных данных от сервера
// //? проверяется во вне
// if (available() > 0) // 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<void()>& callback) { void EthernetMaketClient::setOnSendSuccess(const std::function<void()>& callback) {
onSendSuccess = callback; onSendSuccess = callback;
} }
@ -337,6 +309,7 @@ void EthernetMaketClient::resetOnSendSuccess() {
} }
void EthernetMaketClient::stop(){ void EthernetMaketClient::stop(){
// if(connectStatus!=CONNECT_STOP_WAITING)
connectStatus = CONNECT_STOP_START; connectStatus = CONNECT_STOP_START;
} }
@ -345,15 +318,6 @@ void EthernetMaketClient::startConnection(IPAddress ip, uint16_t port, bool nonB
dstPort = port; dstPort = port;
isNonBlocking = nonBlock; isNonBlocking = nonBlock;
connectStatus = CONNECT_START; connectStatus = CONNECT_START;
// if (nonBlock)
// {
// connectNonBlock(dstIP, dstPort);
// }
// else
// {
// (ConnectionStatusSimple)connect(dstIP, dstPort);
// }
}; };
void EthernetMaketClient::activityUpdate(){ void EthernetMaketClient::activityUpdate(){
@ -379,6 +343,8 @@ EthernetMaketClient& EthernetMaketClient::operator=(const EthernetMaketClient& o
this->dataPtr = other.dataPtr; this->dataPtr = other.dataPtr;
this->dataSize = other.dataSize; this->dataSize = other.dataSize;
this->onSendSuccess = other.onSendSuccess; this->onSendSuccess = other.onSendSuccess;
this->_sock = other._sock;
// Отключаем исполнение старого клиента // Отключаем исполнение старого клиента
const_cast<EthernetMaketClient&>(other).connectStatus = CONNECT_IDLE; const_cast<EthernetMaketClient&>(other).connectStatus = CONNECT_IDLE;