Skip to content

Commit c84aa34

Browse files
authored
Merge pull request #79 from JAndrassy/server_accept
support server.accept() for WiFiNINA library
2 parents af252c2 + 77d4881 commit c84aa34

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

Diff for: arduino/libraries/WiFi/src/WiFiServer.cpp

+26-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,13 @@ uint8_t WiFiServer::begin(uint16_t port)
7272

7373
WiFiClient WiFiServer::available(uint8_t* status)
7474
{
75-
int result = lwip_accept(_socket, NULL, 0);
75+
int result = -1;
76+
if (_accepted_sock >= 0) {
77+
result = _accepted_sock;
78+
_accepted_sock = -1;
79+
} else {
80+
result = lwip_accept(_socket, NULL, 0);
81+
}
7682

7783
if (status) {
7884
*status = (result != -1);
@@ -109,6 +115,25 @@ WiFiClient WiFiServer::available(uint8_t* status)
109115
return WiFiClient(result);
110116
}
111117

118+
WiFiClient WiFiServer::accept()
119+
{
120+
int result = -1;
121+
if (_accepted_sock >= 0) {
122+
result = _accepted_sock;
123+
_accepted_sock = -1;
124+
} else {
125+
result = lwip_accept(_socket, NULL, 0);
126+
}
127+
return WiFiClient(result);
128+
}
129+
130+
bool WiFiServer::hasClient() {
131+
if (_accepted_sock != -1)
132+
return true;
133+
_accepted_sock = lwip_accept(_socket, NULL, 0);
134+
return (_accepted_sock != -1);
135+
}
136+
112137
uint8_t WiFiServer::status() {
113138
// Deprecated.
114139
return 0;

Diff for: arduino/libraries/WiFi/src/WiFiServer.h

+3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class WiFiServer /*: public Server*/ {
3131
public:
3232
WiFiServer();
3333
WiFiClient available(uint8_t* status = NULL);
34+
WiFiClient accept();
35+
bool hasClient();
3436
uint8_t begin(uint16_t port);
3537
virtual size_t write(uint8_t);
3638
virtual size_t write(const uint8_t *buf, size_t size);
@@ -44,6 +46,7 @@ class WiFiServer /*: public Server*/ {
4446
uint16_t _port;
4547
int _socket;
4648
int _spawnedSockets[CONFIG_LWIP_MAX_SOCKETS];
49+
int _accepted_sock = -1;
4750
};
4851

4952
#endif // WIFISERVER_H

Diff for: main/CommandHandler.cpp

+17-2
Original file line numberDiff line numberDiff line change
@@ -456,10 +456,24 @@ int availDataTcp(const uint8_t command[], uint8_t response[])
456456

457457
if (socketTypes[socket] == 0x00) {
458458
if (tcpServers[socket]) {
459-
WiFiClient client = tcpServers[socket].available();
460459

460+
uint8_t accept = command[6];
461461
available = 255;
462462

463+
if (accept) {
464+
for (int i = 0; i < MAX_SOCKETS; i++) {
465+
if (socketTypes[i] == 255) {
466+
WiFiClient client = tcpServers[socket].accept();
467+
if (client) {
468+
socketTypes[i] = 0x00;
469+
tcpClients[i] = client;
470+
available = i;
471+
}
472+
break;
473+
}
474+
}
475+
} else {
476+
WiFiClient client = tcpServers[socket].available();
463477
if (client) {
464478
// try to find existing socket slot
465479
for (int i = 0; i < MAX_SOCKETS; i++) {
@@ -491,6 +505,7 @@ int availDataTcp(const uint8_t command[], uint8_t response[])
491505
}
492506
}
493507
}
508+
}
494509
} else {
495510
available = tcpClients[socket].available();
496511
}
@@ -2153,7 +2168,7 @@ void CommandHandlerClass::updateGpio0Pin()
21532168

21542169
for (int i = 0; i < MAX_SOCKETS; i++) {
21552170
if (socketTypes[i] == 0x00) {
2156-
if (tcpServers[i] && tcpServers[i].available()) {
2171+
if (tcpServers[i] && (tcpServers[i].hasClient() || tcpServers[i].available())) {
21572172
available = 1;
21582173
break;
21592174
} else if (tcpClients[i] && tcpClients[i].connected() && tcpClients[i].available()) {

0 commit comments

Comments
 (0)