Skip to content

Commit e2a8d5b

Browse files
maidnlfacchinm
authored andcommitted
changes for server
1 parent f1f0ff6 commit e2a8d5b

File tree

4 files changed

+85
-25
lines changed

4 files changed

+85
-25
lines changed

libraries/WiFiS3/src/WiFiClient.cpp

+52-19
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,41 @@
11
#include "WiFiClient.h"
22

33
/* -------------------------------------------------------------------------- */
4-
WiFiClient::WiFiClient() : _sock(-1) { }
4+
WiFiClient::WiFiClient() : _sock(-1), destroy_at_distructor(true), rx_buffer(nullptr) {
5+
rx_buffer = new FifoBuffer<uint8_t,RX_BUFFER_DIM>();
6+
}
7+
/* -------------------------------------------------------------------------- */
8+
9+
/* -------------------------------------------------------------------------- */
10+
WiFiClient::WiFiClient(int s) : _sock(s), destroy_at_distructor(false), rx_buffer(nullptr) {
11+
rx_buffer = new FifoBuffer<uint8_t,RX_BUFFER_DIM>();
12+
}
513
/* -------------------------------------------------------------------------- */
614

715
/* -------------------------------------------------------------------------- */
8-
WiFiClient::WiFiClient(int s) : _sock(s) {
16+
WiFiClient::~WiFiClient() {
17+
if(destroy_at_distructor) {
18+
clear_buffer();
19+
}
920
}
1021
/* -------------------------------------------------------------------------- */
11-
22+
23+
void WiFiClient::clear_buffer() {
24+
if(rx_buffer != nullptr) {
25+
delete rx_buffer;
26+
rx_buffer = nullptr;
27+
}
28+
}
29+
30+
31+
/* -------------------------------------------------------------------------- */
32+
WiFiClient::WiFiClient(const WiFiClient& c) {
33+
/* -------------------------------------------------------------------------- */
34+
_sock = c._sock;
35+
rx_buffer = c.rx_buffer;
36+
}
37+
38+
1239
/* -------------------------------------------------------------------------- */
1340
void WiFiClient::getSocket() {
1441
/* -------------------------------------------------------------------------- */
@@ -77,9 +104,9 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size){
77104
int WiFiClient::available(){
78105
/* -------------------------------------------------------------------------- */
79106
int rv = 0;
80-
if(_sock >= 0) {
81-
if(rx_buffer.available() > 0) {
82-
return rx_buffer.available();
107+
if(_sock >= 0 && rx_buffer != nullptr) {
108+
if(rx_buffer->available() > 0) {
109+
return rx_buffer->available();
83110
}
84111
else {
85112
string res = "";
@@ -96,29 +123,33 @@ int WiFiClient::available(){
96123
int WiFiClient::_read() {
97124
/* -------------------------------------------------------------------------- */
98125
int rv = -1;
99-
if(_sock >= 0) {
126+
if(_sock >= 0 && rx_buffer != nullptr) {
100127
string res = "";
101-
uint32_t size = rx_buffer.freePositions() - 1;
128+
uint32_t size = rx_buffer->freePositions() - 1;
102129
modem.begin();
103130

104131
/* important - it works one shot */
105132
modem.avoid_trim_results();
106133
modem.read_using_size();
107134
if(modem.write(string(PROMPT(_CLIENTRECEIVE)),res, "%s%d,%d\r\n" , CMD_WRITE(_CLIENTRECEIVE), _sock, size)) {
108135
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
109-
rx_buffer.store((uint8_t)res[i]);
136+
rx_buffer->store((uint8_t)res[i]);
110137
rv++;
111138
}
112139
}
113140
}
141+
142+
114143
return rv;
115144
}
116145

117146
/* -------------------------------------------------------------------------- */
118147
bool WiFiClient::read_needed(size_t s) {
119148
/* -------------------------------------------------------------------------- */
120-
if((size_t)rx_buffer.available() < s) {
121-
_read();
149+
if(rx_buffer != nullptr) {
150+
if((size_t)rx_buffer->available() < s) {
151+
_read();
152+
}
122153
}
123154
}
124155

@@ -138,14 +169,16 @@ int WiFiClient::read(uint8_t *buf, size_t size) {
138169
read_needed(size);
139170
int rv = 0;
140171
bool go_on = true;
141-
for(int i = 0; i < size && go_on; i++) {
142-
bool is_read = false;
143-
*(buf+i) = rx_buffer.read(&is_read);
144-
if(is_read) {
145-
rv++;
146-
}
147-
else {
148-
go_on = false;
172+
if(_sock >= 0 && rx_buffer != nullptr) {
173+
for(int i = 0; i < size && go_on; i++) {
174+
bool is_read = false;
175+
*(buf+i) = rx_buffer->read(&is_read);
176+
if(is_read) {
177+
rv++;
178+
}
179+
else {
180+
go_on = false;
181+
}
149182
}
150183
}
151184
return rv;

libraries/WiFiS3/src/WiFiClient.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ class WiFiClient : public Client {
3535

3636
public:
3737
WiFiClient();
38+
/* this constructor is not intended to be called outside of the Server class */
3839
WiFiClient(int s);
40+
WiFiClient(const WiFiClient& c);
41+
~WiFiClient();
3942
virtual int connect(IPAddress ip, uint16_t port);
4043
virtual int connect(const char *host, uint16_t port);
4144
virtual size_t write(uint8_t);
@@ -61,9 +64,11 @@ class WiFiClient : public Client {
6164
protected:
6265
int _sock;
6366
void getSocket();
64-
FifoBuffer<uint8_t,RX_BUFFER_DIM> rx_buffer;
67+
FifoBuffer<uint8_t,RX_BUFFER_DIM> *rx_buffer;
6568
int _read();
6669
bool read_needed(size_t s);
70+
void clear_buffer();
71+
bool destroy_at_distructor;
6772

6873

6974

libraries/WiFiS3/src/WiFiServer.cpp

+23-4
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,21 @@ WiFiServer::WiFiServer(int p) : _sock(-1), _port(p) {}
1111

1212
/* -------------------------------------------------------------------------- */
1313
WiFiClient WiFiServer::available() {
14-
/* -------------------------------------------------------------------------- */
14+
/* -------------------------------------------------------------------------- */
1515
if(_sock != -1) {
1616
string res = "";
1717
modem.begin();
1818
if(modem.write(string(PROMPT(_SERVERAVAILABLE)),res, "%s%d\r\n" , CMD_WRITE(_SERVERAVAILABLE), _sock)) {
1919
int client_sock = atoi(res.c_str());
20-
return WiFiClient(client_sock);
20+
21+
if(client._sock == client_sock) {
22+
return client;
23+
}
24+
else {
25+
client.clear_buffer();
26+
client = WiFiClient(client_sock);
27+
return client;
28+
}
2129
}
2230
}
2331
return WiFiClient();
@@ -41,15 +49,26 @@ void WiFiServer::begin() {
4149
begin(_port);
4250
}
4351

52+
53+
4454
/* -------------------------------------------------------------------------- */
45-
size_t WiFiServer::write(uint8_t){
55+
size_t WiFiServer::write(uint8_t b){
4656
/* -------------------------------------------------------------------------- */
47-
return 0;
57+
return write(&b, 1);
4858
}
4959

5060
/* -------------------------------------------------------------------------- */
5161
size_t WiFiServer::write(const uint8_t *buf, size_t size) {
5262
/* -------------------------------------------------------------------------- */
63+
if(_sock >= 0) {
64+
string res = "";
65+
modem.begin();
66+
modem.write_nowait(string(PROMPT(_SERVERWRITE)),res, "%s%d,%d\r\n" , CMD_WRITE(_SERVERWRITE), _sock, size);
67+
if(modem.passthrough(buf,size)) {
68+
return size;
69+
}
70+
71+
}
5372
return 0;
5473
}
5574

libraries/WiFiS3/src/WiFiServer.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@
2525
#include "Modem.h"
2626
#include "WiFiClient.h"
2727

28-
class WiFiClient;
28+
2929

3030
class WiFiServer : public Server {
3131
private:
3232
int _sock;
3333
int _port;
34+
WiFiClient client;
3435

3536
public:
3637
WiFiServer();
@@ -44,6 +45,8 @@ class WiFiServer : public Server {
4445

4546

4647
using Print::write;
48+
49+
friend class WiFiClient;
4750
};
4851

4952
#endif

0 commit comments

Comments
 (0)