3
3
4
4
extern uint8_t networkGetType (uint8_t user);
5
5
6
+ #define PVT_SERVER_MAX_CLIENTS 4
7
+
6
8
class NetworkServer : public Server
7
9
{
8
10
protected:
@@ -11,7 +13,12 @@ class NetworkServer : public Server
11
13
Server * _server; // Ethernet or WiFi server
12
14
uint8_t _networkType;
13
15
uint16_t _port;
14
- Client * _client;
16
+ #if defined(COMPILE_ETHERNET)
17
+ EthernetClient _ethernetClient[PVT_SERVER_MAX_CLIENTS];
18
+ #endif // COMPILE_ETHERNET
19
+ #if defined(COMPILE_WIFI)
20
+ WiFiClient _wifiClient[PVT_SERVER_MAX_CLIENTS];
21
+ #endif // COMPILE_WIFI
15
22
16
23
public:
17
24
@@ -24,22 +31,6 @@ class NetworkServer : public Server
24
31
_networkType{networkType},
25
32
_port{port}
26
33
{
27
- #if defined(COMPILE_ETHERNET)
28
- if (_networkType == NETWORK_TYPE_ETHERNET)
29
- {
30
- _client = new EthernetClient;
31
- }
32
- else
33
- #endif // COMPILE_ETHERNET
34
- #if defined(COMPILE_WIFI)
35
- {
36
- _client = new WiFiClient;
37
- }
38
- #else // COMPILE_WIFI
39
- {
40
- _client = nullptr ;
41
- }
42
- #endif // COMPILE_WIFI
43
34
}
44
35
45
36
// ------------------------------
@@ -64,9 +55,19 @@ class NetworkServer : public Server
64
55
delete _server;
65
56
_server = nullptr ;
66
57
}
67
- if (_client)
68
- delete _client;
69
- _client = nullptr ;
58
+ // for (uint8_t i = 0; i < PVT_SERVER_MAX_CLIENTS; i++)
59
+ // {
60
+ // if (_ethernetClient[i])
61
+ // {
62
+ // delete _ethernetClient[i];
63
+ // _ethernetClient[i] = nullptr;
64
+ // }
65
+ // if (_wifiClient[i])
66
+ // {
67
+ // delete _wifiClient[i];
68
+ // _wifiClient[i] = nullptr;
69
+ // }
70
+ // }
70
71
}
71
72
72
73
// ------------------------------
@@ -75,57 +76,83 @@ class NetworkServer : public Server
75
76
76
77
void begin ()
77
78
{
78
- if (_server)
79
- _server->begin ();
79
+ #if defined(COMPILE_ETHERNET)
80
+ if (_networkType == NETWORK_TYPE_ETHERNET)
81
+ if (_server)
82
+ {
83
+ ((EthernetServer *)_server)->begin ();
84
+ }
85
+ #endif // COMPILE_ETHERNET
86
+ #if defined(COMPILE_WIFI)
87
+ if (_networkType == NETWORK_TYPE_WIFI)
88
+ if (_server)
89
+ {
90
+ ((WiFiServer *)_server)->begin ();
91
+ }
92
+ #endif // COMPILE_WIFI
80
93
}
81
94
82
95
// ------------------------------
83
96
// Determine if new client is available
84
97
// ------------------------------
85
98
86
- Client *available ()
99
+ Client *available (uint8_t index )
87
100
{
101
+ if (index < PVT_SERVER_MAX_CLIENTS)
102
+ {
88
103
#if defined(COMPILE_ETHERNET)
89
104
if (_networkType == NETWORK_TYPE_ETHERNET)
90
105
if (_server)
91
106
{
92
- *_client = ((EthernetServer *)_server)->available ();
93
- return _client;
107
+ // if (!_ethernetClient[index])
108
+ // _ethernetClient[index] = new EthernetClient;
109
+ // if (!_ethernetClient[index])
110
+ // return nullptr;
111
+ _ethernetClient[index] = ((EthernetServer *)_server)->available ();
112
+ return &_ethernetClient[index];
94
113
}
95
- #endif // COMPILE_WIFI
114
+ #endif // COMPILE_ETHERNET
96
115
#if defined(COMPILE_WIFI)
97
116
if (_networkType == NETWORK_TYPE_WIFI)
98
117
if (_server)
99
118
{
100
- *_client = ((WiFiServer *)_server)->available ();
101
- return _client;
119
+ // if (!_wifiClient[index])
120
+ // _wifiClient[index] = new WiFiClient;
121
+ // if (!_wifiClient[index])
122
+ // return nullptr;
123
+ _wifiClient[index] = ((WiFiServer *)_server)->available ();
124
+ return &_wifiClient[index];
102
125
}
103
126
#endif // COMPILE_WIFI
127
+ }
104
128
return nullptr ;
105
129
}
106
130
107
131
// ------------------------------
108
132
// Accept new client
109
133
// ------------------------------
110
134
111
- Client *accept ()
135
+ Client *accept (uint8_t index )
112
136
{
137
+ if (index < PVT_SERVER_MAX_CLIENTS)
138
+ {
113
139
#if defined(COMPILE_ETHERNET)
114
140
if (_networkType == NETWORK_TYPE_ETHERNET)
115
141
if (_server)
116
142
{
117
- *_client = ((EthernetServer *)_server)->accept ();
118
- return _client ;
143
+ _ethernetClient[index] = ((EthernetServer *)_server)->accept ();
144
+ return &_ethernetClient[index] ;
119
145
}
120
- #endif // COMPILE_WIFI
146
+ #endif // COMPILE_ETHERNET
121
147
#if defined(COMPILE_WIFI)
122
148
if (_networkType == NETWORK_TYPE_WIFI)
123
149
if (_server)
124
150
{
125
- *_client = ((WiFiServer *)_server)->accept ();
126
- return _client ;
151
+ _wifiClient[index] = ((WiFiServer *)_server)->accept ();
152
+ return &_wifiClient[index] ;
127
153
}
128
154
#endif // COMPILE_WIFI
155
+ }
129
156
return nullptr ;
130
157
}
131
158
@@ -135,7 +162,17 @@ class NetworkServer : public Server
135
162
136
163
operator bool ()
137
164
{
138
- return _server;
165
+ #if defined(COMPILE_ETHERNET)
166
+ if (_networkType == NETWORK_TYPE_ETHERNET)
167
+ if (_server)
168
+ return (*((EthernetServer *)_server));
169
+ #endif // COMPILE_ETHERNET
170
+ #if defined(COMPILE_WIFI)
171
+ if (_networkType == NETWORK_TYPE_WIFI)
172
+ if (_server)
173
+ return (*((WiFiServer *)_server));
174
+ #endif // COMPILE_WIFI
175
+ return false ;
139
176
}
140
177
141
178
// ------------------------------
@@ -157,8 +194,16 @@ class NetworkServer : public Server
157
194
158
195
size_t write (uint8_t b)
159
196
{
160
- if (_server)
161
- return _server->write (b);
197
+ #if defined(COMPILE_ETHERNET)
198
+ if (_networkType == NETWORK_TYPE_ETHERNET)
199
+ if (_server)
200
+ return ((EthernetServer *)_server)->write (b);
201
+ #endif // COMPILE_ETHERNET
202
+ #if defined(COMPILE_WIFI)
203
+ if (_networkType == NETWORK_TYPE_WIFI)
204
+ if (_server)
205
+ return ((WiFiServer *)_server)->write (b);
206
+ #endif // COMPILE_WIFI
162
207
return 0 ;
163
208
}
164
209
@@ -168,9 +213,26 @@ class NetworkServer : public Server
168
213
169
214
size_t write (const uint8_t *buf, size_t size)
170
215
{
171
- if (_server)
172
- return _server->write (buf, size);
173
- return 0 ;
216
+ #if defined(COMPILE_ETHERNET)
217
+ if (_networkType == NETWORK_TYPE_ETHERNET)
218
+ if (_server)
219
+ return ((EthernetServer *)_server)->write (buf, size);
220
+ #endif // COMPILE_ETHERNET
221
+ #if defined(COMPILE_WIFI)
222
+ if (_networkType == NETWORK_TYPE_WIFI)
223
+ if (_server)
224
+ return ((WiFiServer *)_server)->write (buf, size);
225
+ #endif // COMPILE_WIFI
226
+ return 0 ;
227
+ }
228
+
229
+ void statusreport () // EthernetServer only - and only if uncommented in EthernetServer.cpp
230
+ {
231
+ #if defined(COMPILE_ETHERNET)
232
+ if (_networkType == NETWORK_TYPE_ETHERNET)
233
+ if (_server)
234
+ ((EthernetServer *)_server)->statusreport ();
235
+ #endif // COMPILE_ETHERNET
174
236
}
175
237
176
238
protected:
0 commit comments