1 Commits

Author SHA1 Message Date
b883d3a757 testing 2024-12-09 15:45:41 +03:00
2 changed files with 87 additions and 101 deletions

View File

@ -12,117 +12,103 @@ void EthernetMaketServer::resetServerHandler()
serverHandler = [](EthernetMaketClient &sclient) {}; serverHandler = [](EthernetMaketClient &sclient) {};
} }
// EthernetMaketClient EthernetMaketServer::available(int sock) EthernetMaketClient EthernetMaketServer::available(int sock)
// { {
// accept(sock); accept(sock);
// EthernetClient client(sock); EthernetClient client(sock);
// if (EthernetClass::_server_port[sock] == _port && if (EthernetClass::_server_port[sock] == _port &&
// (client.status() == SnSR::ESTABLISHED || (client.status() == SnSR::ESTABLISHED ||
// client.status() == SnSR::CLOSE_WAIT)) client.status() == SnSR::CLOSE_WAIT))
// { {
// if (client.available()) if (client.available())
// { {
// return std::move(EthernetMaketClient(client)); return std::move(EthernetMaketClient(client));
// } }
// } }
// return std::move(EthernetMaketClient(MAX_SOCK_NUM)); return std::move(EthernetMaketClient(MAX_SOCK_NUM));
// } }
// void EthernetMaketServer::accept(int sock) void EthernetMaketServer::accept(int sock)
// { {
// int listening = 0; int listening = 0;
// EthernetClient client(sock); EthernetClient client(sock);
// if (EthernetClass::_server_port[sock] == _port) if (EthernetClass::_server_port[sock] == _port)
// { {
// if (client.status() == SnSR::LISTEN) if (client.status() == SnSR::LISTEN)
// { {
// listening = 1; listening = 1;
// } }
// else if (client.status() == SnSR::CLOSE_WAIT && !client.available()) else if (client.status() == SnSR::CLOSE_WAIT && !client.available())
// { {
// Serial.println("HARD STOP"); Serial.println("HARD STOP");
// client.stop(); client.stop();
// } }
// } }
// if (!listening) if (!listening)
// { {
// // begin(); begin();
// begin(sock); // added // begin(sock); // added
// } }
// } }
// void EthernetMaketServer::begin(int sock) void EthernetMaketServer::begin(int sock)
// { {
// EthernetClient client(sock); EthernetClient client(sock);
// if (client.status() == SnSR::CLOSED) if (client.status() == SnSR::CLOSED)
// { {
// socket(sock, SnMR::TCP, _port, 0); socket(sock, SnMR::TCP, _port, 0);
// listen(sock); listen(sock);
// EthernetClass::_server_port[sock] = _port; EthernetClass::_server_port[sock] = _port;
// serverSocket = sock; serverSocket = sock;
// return; return;
// } }
// // Serial.println(F("EthernetMaketServer::begin() FAIL")); // Serial.println(F("EthernetMaketServer::begin() FAIL"));
// } }
void EthernetMaketServer::begin()
{
for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
EthernetClient client(sock);
if (client.status() == SnSR::CLOSED) {
socket(sock, SnMR::TCP, _port, 0);
listen(sock);
EthernetClass::_server_port[sock] = _port;
serverSocket = sock;
break;
}
}
// Serial.println(F("EthernetMaketServer::begin() FAIL"));
}
// void EthernetMaketServer::begin()
// {
// for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
// EthernetClient client(sock);
// if (client.status() == SnSR::CLOSED) {
// socket(sock, SnMR::TCP, _port, 0);
// listen(sock);
// EthernetClass::_server_port[sock] = _port;
// serverSocket = sock;
// break;
// }
// }
// // Serial.println(F("EthernetMaketServer::begin() FAIL"));
// }
uint8_t buf[256];
void EthernetMaketServer::tick() void EthernetMaketServer::tick()
{ {
// for (int sock = 0; sock < MAX_SOCK_NUM; sock++) // for (int sock = 0; sock < MAX_SOCK_NUM; sock++)
{ {
EthernetClient sclient = available(/* serverSocket */); sclient = available(serverSocket);
size_t dataSize; if (sclient.connected() && sclient.available() > 0)
if (sclient.connected() && (dataSize = sclient.available()) > 0)
{ {
Serial.println("Receive!"); sclient.activityUpdate();
serverHandler(sclient);
memset(buf,0x00,sizeof(buf));
sclient.read(buf, sizeof(buf));
Serial.print("Received data: ");
for (int i = 0; i < dataSize; i++)
{
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println("\n");
// sclient.activityUpdate();
//* serverHandler(sclient);
} }
// if (!wasConnected && sclient.connected()) if (!wasConnected && sclient.connected())
// { {
// wasConnected = true; wasConnected = true;
// Serial.println("Client connected"); Serial.println("Client connected");
// } }
// if (wasConnected && !sclient.connected()) if (wasConnected && !sclient.connected())
// { {
// wasConnected = false; wasConnected = false;
// sclient.stop(); sclient.stop();
// // begin(serverSocket); // begin(serverSocket);
// Serial.println("Client disconnected"); Serial.println("Client disconnected");
// } }
// // Закрытие соединения по таймеру неактивности // // Закрытие соединения по таймеру неактивности
// if (sclient.connected() && (millis() - lastActivityTime > timeout)) // if (sclient.connected() && (millis() - lastActivityTime > timeout))
// { // {
@ -131,5 +117,5 @@ void EthernetMaketServer::tick()
// // begin(serverSocket); // // begin(serverSocket);
// } // }
} }
// sclient.tick_(); sclient.tick_();
} }

View File

@ -8,8 +8,8 @@ class EthernetMaketClient;
class EthernetMaketServer : public EthernetServer class EthernetMaketServer : public EthernetServer
{ {
private: 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) {};
SOCKET serverSocket = MAX_SOCK_NUM; SOCKET serverSocket = MAX_SOCK_NUM;
@ -18,12 +18,12 @@ private:
public: public:
using EthernetServer::EthernetServer; using EthernetServer::EthernetServer;
// EthernetMaketClient available(int sock); EthernetMaketClient available(int sock);
void setServerHandler(std::function<void(EthernetMaketClient)> handler); void setServerHandler(std::function<void(EthernetMaketClient)> handler);
void resetServerHandler(); void resetServerHandler();
// void begin() override; void begin() override;
// void begin(int sock); void begin(int sock);
void tick(); void tick();
}; };