My receiving code looks like this:
Code: Select all
void Sockhop::OnSocketEvent(wxSocketEvent& event)
{
cout << "Event" << "\n";
wxSocketBase* sockBase = event.GetSocket();
switch (event.GetSocketEvent())
{
case wxSOCKET_INPUT:
{
// Disable input events while parsing;
sockBase->SetNotify(wxSOCKET_LOST_FLAG);
sockBase->SetFlags(wxSOCKET_WAITALL);
cout << "New message" << "\n";
char *bufPtr = messageBuffer;
wxUint32 totalRd = 0;
wxUint32 lenRd = 1;
while (lenRd > 0 && wxString::FromUTF8(bufPtr - 1, 1) != '\n')
{
lenRd = sockBase->Read(bufPtr++, 1).LastCount();
totalRd += lenRd;
}
if (!totalRd) return;
// parse message
auto message = json::parse(wxString::FromUTF8(messageBuffer, totalRd));
OnMessage(message);
cout << "Finished message" << "\n";
//Enable input events again.
sockBase->SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG);
break;
}
default:
cout << "Other message" << "\n";
}
}
Notice I put message printing both before and after handling the message to make sure I wasn't blocking the socket.
Output is:
Code: Select all
...
Event
New message
DATA: bots.c7ab112c-8216-11e7-bb31-be2e44b06b34.datastore.platform.pdo.bus_voltage, 51.14507293701172
Finished message
Event
New message
DATA: bots.c7ab112c-8216-11e7-bb31-be2e44b06b34.datastore.platform.pdo.bus_voltage, 51.031959533691406
Finished message
Event
New message
DATA: bots.c7ab112c-8216-11e7-bb31-be2e44b06b34.datastore.platform.pdo.bus_voltage, 51.1656379699707
Finished message
Event
New message
DATA: bots.c7ab112c-8216-11e7-bb31-be2e44b06b34.datastore.platform.pdo.bus_voltage, 51.147647857666016
Finished message
Event
New message
DATA: bots.c7ab112c-8216-11e7-bb31-be2e44b06b34.datastore.platform.pdo.bus_voltage, 51.18363571166992
Finished message
(Here it just hangs after finishing that last message
Thanks guys!
Oh also, this forum is amazing. After years of getting flamed on Stack overflow, you guys are a refreshing change