Skip to content

Commit 5196c1c

Browse files
maidnlfacchinm
authored andcommitted
using shared ptr to solve server / client problem
1 parent e2a8d5b commit 5196c1c

File tree

3 files changed

+8
-23
lines changed

3 files changed

+8
-23
lines changed

libraries/WiFiS3/src/WiFiClient.cpp

+5-20
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,27 @@
22

33
/* -------------------------------------------------------------------------- */
44
WiFiClient::WiFiClient() : _sock(-1), destroy_at_distructor(true), rx_buffer(nullptr) {
5-
rx_buffer = new FifoBuffer<uint8_t,RX_BUFFER_DIM>();
5+
rx_buffer = shared_ptr<FifoBuffer<uint8_t,RX_BUFFER_DIM>>(new FifoBuffer<uint8_t,RX_BUFFER_DIM>());
66
}
77
/* -------------------------------------------------------------------------- */
88

99
/* -------------------------------------------------------------------------- */
1010
WiFiClient::WiFiClient(int s) : _sock(s), destroy_at_distructor(false), rx_buffer(nullptr) {
11-
rx_buffer = new FifoBuffer<uint8_t,RX_BUFFER_DIM>();
11+
rx_buffer = shared_ptr<FifoBuffer<uint8_t,RX_BUFFER_DIM>>(new FifoBuffer<uint8_t,RX_BUFFER_DIM>());
1212
}
1313
/* -------------------------------------------------------------------------- */
1414

1515
/* -------------------------------------------------------------------------- */
16-
WiFiClient::~WiFiClient() {
17-
if(destroy_at_distructor) {
18-
clear_buffer();
19-
}
20-
}
16+
WiFiClient::~WiFiClient() { }
2117
/* -------------------------------------------------------------------------- */
2218

23-
void WiFiClient::clear_buffer() {
24-
if(rx_buffer != nullptr) {
25-
delete rx_buffer;
26-
rx_buffer = nullptr;
27-
}
28-
}
29-
30-
3119
/* -------------------------------------------------------------------------- */
3220
WiFiClient::WiFiClient(const WiFiClient& c) {
3321
/* -------------------------------------------------------------------------- */
3422
_sock = c._sock;
3523
rx_buffer = c.rx_buffer;
3624
}
3725

38-
3926
/* -------------------------------------------------------------------------- */
4027
void WiFiClient::getSocket() {
4128
/* -------------------------------------------------------------------------- */
@@ -48,8 +35,6 @@ void WiFiClient::getSocket() {
4835
}
4936
}
5037

51-
52-
5338
/* -------------------------------------------------------------------------- */
5439
int WiFiClient::connect(IPAddress ip, uint16_t port){
5540
/* -------------------------------------------------------------------------- */
@@ -113,6 +98,7 @@ int WiFiClient::available(){
11398
modem.begin();
11499
if(modem.write(string(PROMPT(_AVAILABLE)),res, "%s%d\r\n" , CMD_WRITE(_AVAILABLE), _sock)) {
115100
rv = atoi(res.c_str());
101+
116102
}
117103
}
118104
}
@@ -131,15 +117,14 @@ int WiFiClient::_read() {
131117
/* important - it works one shot */
132118
modem.avoid_trim_results();
133119
modem.read_using_size();
120+
134121
if(modem.write(string(PROMPT(_CLIENTRECEIVE)),res, "%s%d,%d\r\n" , CMD_WRITE(_CLIENTRECEIVE), _sock, size)) {
135122
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
136123
rx_buffer->store((uint8_t)res[i]);
137124
rv++;
138125
}
139126
}
140127
}
141-
142-
143128
return rv;
144129
}
145130

libraries/WiFiS3/src/WiFiClient.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "WiFiTypes.h"
2929
#include "Modem.h"
3030
#include "FifoBuffer.h"
31+
#include <memory>
3132

3233
#define RX_BUFFER_DIM 1024
3334

@@ -64,7 +65,7 @@ class WiFiClient : public Client {
6465
protected:
6566
int _sock;
6667
void getSocket();
67-
FifoBuffer<uint8_t,RX_BUFFER_DIM> *rx_buffer;
68+
shared_ptr<FifoBuffer<uint8_t,RX_BUFFER_DIM>> rx_buffer;
6869
int _read();
6970
bool read_needed(size_t s);
7071
void clear_buffer();

libraries/WiFiS3/src/WiFiServer.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@ WiFiClient WiFiServer::available() {
1515
if(_sock != -1) {
1616
string res = "";
1717
modem.begin();
18+
/* call the server available on esp so that the accept is performed */
1819
if(modem.write(string(PROMPT(_SERVERAVAILABLE)),res, "%s%d\r\n" , CMD_WRITE(_SERVERAVAILABLE), _sock)) {
1920
int client_sock = atoi(res.c_str());
20-
2121
if(client._sock == client_sock) {
2222
return client;
2323
}
2424
else {
25-
client.clear_buffer();
2625
client = WiFiClient(client_sock);
2726
return client;
2827
}

0 commit comments

Comments
 (0)