Skip to content

Commit 247741d

Browse files
CRUCIAL FIX: sending was broken
1 parent e6cc789 commit 247741d

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

libs/ofxLibwebsockets/src/Connection.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)