5050#define DEFAULT_MAX_WS_CLIENTS 4
5151#endif
5252
53+ using AsyncWebSocketMessageBuffer = std::shared_ptr<std::vector<uint8_t >>;
54+
5355class AsyncWebSocket ;
5456class AsyncWebSocketResponse ;
5557class AsyncWebSocketClient ;
@@ -84,6 +86,7 @@ typedef enum { WS_CONTINUATION, WS_TEXT, WS_BINARY, WS_DISCONNECT = 0x08, WS_PIN
8486typedef enum { WS_MSG_SENDING, WS_MSG_SENT, WS_MSG_ERROR } AwsMessageStatus;
8587typedef enum { WS_EVT_CONNECT, WS_EVT_DISCONNECT, WS_EVT_PONG, WS_EVT_ERROR, WS_EVT_DATA } AwsEventType;
8688
89+
8790class AsyncWebSocketMessage
8891{
8992private:
@@ -161,7 +164,26 @@ class AsyncWebSocketClient {
161164 }
162165
163166 // 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); }
165187 bool queueIsFull () const ;
166188 size_t queueLen () const ;
167189
@@ -170,18 +192,18 @@ class AsyncWebSocketClient {
170192 size_t printf_P (PGM_P formatP, ...) __attribute__ ((format (printf, 2 , 3 )));
171193#endif
172194
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 ()); } ;
178200 void text (const __FlashStringHelper *message);
179201
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 ()); } ;
185207 void binary (const __FlashStringHelper *message, size_t len);
186208
187209 bool canSend () const ;
@@ -205,7 +227,7 @@ class AsyncWebSocket: public AsyncWebHandler {
205227 std::list<AsyncWebSocketClient> _clients;
206228 uint32_t _cNextId;
207229 AwsEventHandler _eventHandler;
208- AwsHandshakeHandler _handshakeHandler;
230+ AwsHandshakeHandler _handshakeHandler;
209231 bool _enabled;
210232 AsyncWebLock _lock;
211233
@@ -229,26 +251,48 @@ class AsyncWebSocket: public AsyncWebHandler {
229251 void ping (uint32_t id, const uint8_t *data=NULL , size_t len=0 );
230252 void pingAll (const uint8_t *data=NULL , size_t len=0 ); // done
231253
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);
232275 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 ()); } ;
236279 void text (uint32_t id, const __FlashStringHelper *message);
237280
238- void textAll (std::shared_ptr<std::vector< uint8_t >> buffer);
281+ void textAll (AsyncWebSocketMessageBuffer buffer);
239282 void textAll (const uint8_t *message, size_t len);
240283 void textAll (const char * message, size_t len);
241284 void textAll (const char * message);
242285 void textAll (const String &message);
243286 void textAll (const __FlashStringHelper *message); // need to convert
244287
288+ void binary (uint32_t id, AsyncWebSocketMessageBuffer message);
245289 void binary (uint32_t id, const uint8_t *message, size_t len);
246290 void binary (uint32_t id, const char *message, size_t len);
247291 void binary (uint32_t id, const char *message);
248292 void binary (uint32_t id, const String &message);
249293 void binary (uint32_t id, const __FlashStringHelper *message, size_t len);
250294
251- void binaryAll (std::shared_ptr<std::vector< uint8_t >> buffer);
295+ void binaryAll (AsyncWebSocketMessageBuffer buffer);
252296 void binaryAll (const uint8_t *message, size_t len);
253297 void binaryAll (const char *message, size_t len);
254298 void binaryAll (const char *message);
0 commit comments