50
50
#define DEFAULT_MAX_WS_CLIENTS 4
51
51
#endif
52
52
53
+ using AsyncWebSocketMessageBuffer = std::shared_ptr<std::vector<uint8_t >>;
54
+
53
55
class AsyncWebSocket ;
54
56
class AsyncWebSocketResponse ;
55
57
class AsyncWebSocketClient ;
@@ -84,6 +86,7 @@ typedef enum { WS_CONTINUATION, WS_TEXT, WS_BINARY, WS_DISCONNECT = 0x08, WS_PIN
84
86
typedef enum { WS_MSG_SENDING, WS_MSG_SENT, WS_MSG_ERROR } AwsMessageStatus;
85
87
typedef enum { WS_EVT_CONNECT, WS_EVT_DISCONNECT, WS_EVT_PONG, WS_EVT_ERROR, WS_EVT_DATA } AwsEventType;
86
88
89
+
87
90
class AsyncWebSocketMessage
88
91
{
89
92
private:
@@ -161,7 +164,26 @@ class AsyncWebSocketClient {
161
164
}
162
165
163
166
// data packets
164
- void message (std::shared_ptr<std::vector<uint8_t >> buffer, uint8_t opcode=WS_TEXT, bool mask=false ) { _queueMessage (buffer, opcode, mask); }
167
+ /* *
168
+ * @brief allocate memory buffer owned by shared-pointer and copy provided data
169
+ * used to keep the data untill websocket send is complete for single/multiple clients
170
+ *
171
+ * @param message
172
+ * @param len
173
+ * @return AsyncWebSocketMessageBuffer
174
+ */
175
+ AsyncWebSocketMessageBuffer makeBuffer (const uint8_t *message, size_t len);
176
+
177
+ /* *
178
+ * @brief allocate empty memory buffer owned by shared-pointer
179
+ * used to keep the data untill websocket send is complete for single/multiple clients
180
+ *
181
+ * @param len
182
+ * @return AsyncWebSocketMessageBuffer
183
+ */
184
+ inline AsyncWebSocketMessageBuffer makeBuffer (size_t len){ return std::make_shared<std::vector<uint8_t >>(len); };
185
+
186
+ void message (AsyncWebSocketMessageBuffer buffer, uint8_t opcode=WS_TEXT, bool mask=false ) { _queueMessage (buffer, opcode, mask); }
165
187
bool queueIsFull () const ;
166
188
size_t queueLen () const ;
167
189
@@ -170,18 +192,18 @@ class AsyncWebSocketClient {
170
192
size_t printf_P (PGM_P formatP, ...) __attribute__ ((format (printf, 2 , 3 )));
171
193
#endif
172
194
173
- void text (std::shared_ptr<std::vector< uint8_t >> buffer);
174
- void text (const uint8_t *message, size_t len);
175
- void text (const char *message, size_t len);
176
- void text (const char *message);
177
- void text (const String &message);
195
+ inline void text (AsyncWebSocketMessageBuffer buffer){ _queueMessage (buffer); } ;
196
+ inline void text (const uint8_t *message, size_t len){ text ( makeBuffer (message, len)); } ;
197
+ inline void text (const char *message, size_t len){ text (( const uint8_t *)message, len); } ;
198
+ inline void text (const char *message){ text (message, strlen (message)); } ;
199
+ inline void text (const String &message){ text (message. c_str (), message. length ()); } ;
178
200
void text (const __FlashStringHelper *message);
179
201
180
- void binary (std::shared_ptr<std::vector< uint8_t >> buffer);
181
- void binary (const uint8_t *message, size_t len);
182
- void binary (const char * message, size_t len);
183
- void binary (const char * message);
184
- void binary (const String &message);
202
+ inline void binary (AsyncWebSocketMessageBuffer buffer){ _queueMessage (buffer, WS_BINARY); } ;
203
+ inline void binary (const uint8_t *message, size_t len){ binary ( makeBuffer (message, len)); } ;
204
+ inline void binary (const char * message, size_t len){ binary (( const uint8_t *)message, len); } ;
205
+ inline void binary (const char * message){ binary (message, strlen (message)); } ;
206
+ inline void binary (const String &message){ binary (message. c_str (), message. length ()); } ;
185
207
void binary (const __FlashStringHelper *message, size_t len);
186
208
187
209
bool canSend () const ;
@@ -205,7 +227,7 @@ class AsyncWebSocket: public AsyncWebHandler {
205
227
std::list<AsyncWebSocketClient> _clients;
206
228
uint32_t _cNextId;
207
229
AwsEventHandler _eventHandler;
208
- AwsHandshakeHandler _handshakeHandler;
230
+ AwsHandshakeHandler _handshakeHandler;
209
231
bool _enabled;
210
232
AsyncWebLock _lock;
211
233
@@ -229,26 +251,48 @@ class AsyncWebSocket: public AsyncWebHandler {
229
251
void ping (uint32_t id, const uint8_t *data=NULL , size_t len=0 );
230
252
void pingAll (const uint8_t *data=NULL , size_t len=0 ); // done
231
253
254
+ // data packets
255
+ /* *
256
+ * @brief allocate memory buffer owned by shared-pointer and copy provided data
257
+ * used to keep the data untill websocket send is complete for single/multiple clients
258
+ *
259
+ * @param message
260
+ * @param len
261
+ * @return AsyncWebSocketMessageBuffer
262
+ */
263
+ AsyncWebSocketMessageBuffer makeBuffer (const uint8_t *message, size_t len);
264
+
265
+ /* *
266
+ * @brief allocate empty memory buffer owned by shared-pointer
267
+ * used to keep the data untill websocket send is complete for single/multiple clients
268
+ *
269
+ * @param len
270
+ * @return AsyncWebSocketMessageBuffer
271
+ */
272
+ inline AsyncWebSocketMessageBuffer makeBuffer (size_t len){ return std::make_shared<std::vector<uint8_t >>(len); };
273
+
274
+ void text (uint32_t id, AsyncWebSocketMessageBuffer message);
232
275
void text (uint32_t id, const uint8_t * message, size_t len);
233
- void text (uint32_t id, const char *message, size_t len);
234
- void text (uint32_t id, const char *message);
235
- void text (uint32_t id, const String &message);
276
+ inline void text (uint32_t id, const char *message, size_t len){ text (id, ( const uint8_t *)message, len); } ;
277
+ inline void text (uint32_t id, const char *message){ text (id, message, strlen (message)); } ;
278
+ inline void text (uint32_t id, const String &message){ text (id, message. c_str (), message. length ()); } ;
236
279
void text (uint32_t id, const __FlashStringHelper *message);
237
280
238
- void textAll (std::shared_ptr<std::vector< uint8_t >> buffer);
281
+ void textAll (AsyncWebSocketMessageBuffer buffer);
239
282
void textAll (const uint8_t *message, size_t len);
240
283
void textAll (const char * message, size_t len);
241
284
void textAll (const char * message);
242
285
void textAll (const String &message);
243
286
void textAll (const __FlashStringHelper *message); // need to convert
244
287
288
+ void binary (uint32_t id, AsyncWebSocketMessageBuffer message);
245
289
void binary (uint32_t id, const uint8_t *message, size_t len);
246
290
void binary (uint32_t id, const char *message, size_t len);
247
291
void binary (uint32_t id, const char *message);
248
292
void binary (uint32_t id, const String &message);
249
293
void binary (uint32_t id, const __FlashStringHelper *message, size_t len);
250
294
251
- void binaryAll (std::shared_ptr<std::vector< uint8_t >> buffer);
295
+ void binaryAll (AsyncWebSocketMessageBuffer buffer);
252
296
void binaryAll (const uint8_t *message, size_t len);
253
297
void binaryAll (const char *message, size_t len);
254
298
void binaryAll (const char *message);
0 commit comments