@@ -148,7 +148,14 @@ namespace ofxLibwebsockets {
148148 memcpy (&buf[LWS_SEND_BUFFER_PRE_PADDING], packet.message .c_str (), dataSize );
149149
150150 int writeMode = LWS_WRITE_TEXT;
151- writeMode |= LWS_WRITE_NO_FIN; // add "we're not finished" flag
151+ bool bDone = false ;
152+
153+ if ( packet.index + dataSize >= packet.message .size () ){
154+ dataSize = packet.message .size () - packet.index ;
155+ bDone = true ;
156+ } else {
157+ writeMode |= LWS_WRITE_NO_FIN; // add "we're not finished" flag
158+ }
152159
153160 protocol->idle = false ;
154161
@@ -161,6 +168,10 @@ namespace ofxLibwebsockets {
161168 libwebsocket_callback_on_writable (context, ws);
162169 packet.index = dataSize;
163170
171+ if ( bDone ){
172+ messages_text.erase (messages_text.begin ());
173+ }
174+
164175 } else {
165176 // continue to send large message in chunks
166177 int dataSize = bufferSize > packet.message .size () ? packet.message .size () : bufferSize;
@@ -195,16 +206,28 @@ namespace ofxLibwebsockets {
195206
196207 if ( packet.index == 0 ){
197208 // write beginning of packet
198- int dataSize = bufferSize;
209+ int dataSize = bufferSize > packet. size ? packet. size : bufferSize ;
199210 memcpy (&binaryBuf[LWS_SEND_BUFFER_PRE_PADDING], packet.data , dataSize );
200211
201212 int writeMode = LWS_WRITE_BINARY;
202- writeMode |= LWS_WRITE_NO_FIN;
213+
214+ bool bDone = false ;
215+ if ( packet.index + dataSize >= packet.size ){
216+ bDone = true ;
217+ } else {
218+ writeMode |= LWS_WRITE_NO_FIN;
219+ }
203220
204221 protocol->idle = false ;
205222 int n = libwebsocket_write (ws, &binaryBuf[LWS_SEND_BUFFER_PRE_PADDING], dataSize, (libwebsocket_write_protocol) writeMode );
206223 libwebsocket_callback_on_writable (context, ws);
207224 packet.index += dataSize;
225+
226+ if ( bDone ){
227+ free (packet.data );
228+ messages_binary.erase (messages_binary.begin ());
229+ }
230+
208231 } else {
209232 // continue to send large message in chunks
210233 int dataSize = bufferSize > packet.size ? packet.size : bufferSize;
0 commit comments