mirror of
				https://github.com/Show-maket/EthernetMaket.git
				synced 2025-10-30 02:12:43 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			daf17f1ac6
			...
			todo-Rewor
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b883d3a757 | |||
| 89c91cb68f | |||
| a95cc42233 | 
| @ -41,14 +41,15 @@ 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(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (!listening) |     if (!listening) | ||||||
|     { |     { | ||||||
|         // begin(); |         begin(); | ||||||
|         begin(sock); // added |         // begin(sock); // added | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -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 (!wasConnected && sclient.connected()) | ||||||
|  |         { | ||||||
|  |             wasConnected = true; | ||||||
|  |             Serial.println("Client connected"); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (wasConnected && !sclient.connected()) | ||||||
|  |         { | ||||||
|  |             wasConnected = false; | ||||||
|  |             sclient.stop(); | ||||||
|  |             // begin(serverSocket); | ||||||
|  |             Serial.println("Client disconnected"); | ||||||
|  |         } | ||||||
|         // // Закрытие соединения по таймеру неактивности |         // // Закрытие соединения по таймеру неактивности | ||||||
|         // if (sclient.connected() && (millis() - lastActivityTime > timeout)) |         // if (sclient.connected() && (millis() - lastActivityTime > timeout)) | ||||||
|         // { |         // { | ||||||
|         //     Serial.println("Connection closed due to inactivity"); |         //     Serial.println("Connection closed due to inactivity"); | ||||||
|         //     sclient.stop(); |         //     sclient.close(); | ||||||
|         // } |         //     // begin(serverSocket); | ||||||
|  |  | ||||||
|         // if (!wasConnected && sclient.connected()) |  | ||||||
|         // { |  | ||||||
|         //     wasConnected[sock] = true; |  | ||||||
|         // } |  | ||||||
|  |  | ||||||
|         // if (wasConnected && !sclient.connected()) |  | ||||||
|         // { |  | ||||||
|         //     wasConnected[sock] = false; |  | ||||||
|         //     sclient.stop(); |  | ||||||
|         //     Serial.println("Client disconnected"); |  | ||||||
|         // } |         // } | ||||||
|     } |     } | ||||||
|  |     sclient.tick_(); | ||||||
| } | } | ||||||
| @ -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); | ||||||
|  | |||||||
| @ -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: | ||||||
| @ -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(){ | ||||||
| @ -380,6 +344,8 @@ EthernetMaketClient& EthernetMaketClient::operator=(const EthernetMaketClient& o | |||||||
|     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; | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,15 +0,0 @@ | |||||||
| #include "TCP.h" |  | ||||||
|  |  | ||||||
| static EthernetMaketClient tcpSock[MAX_SOCK_NUM]; |  | ||||||
|  |  | ||||||
| using TCP_SESSION = SOCKET; |  | ||||||
|  |  | ||||||
| TCP_SESSION newConnection(IPAddress ip, uint16_t port, bool nonBlock = true){ |  | ||||||
|     for(int i = 0; i < MAX_SOCK_NUM; i++){ |  | ||||||
|         if(tcpSock[i].status() == SnSR::CLOSED){ |  | ||||||
|             tcpSock[i].startConnection(ip, port, nonBlock); |  | ||||||
|             return i; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return MAX_SOCK_NUM; |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user